Program Development in Java: Abstraction, Specification, and Object-Oriented Design - Liskov; Guttag