Text this: Program Development in Java: abstraction, specification and object-oriented design