Program Development in Java: abstraction, specification and object-oriented design - John Guttag (Addison-Wesley)