Program develoment in Java: Abstraction, specification, and object-oriented design - Barbara Liskov (Addison-Wesley, 2000)