Program development in Java abstraction, specification, and object-oriented design - Liskov, B. (Addison-Wesley, 2001)