Program Development in Java: abstraction, specification and object-oriented design - Barbara Liskov (Addison-Wesley, 2005)