Students learn to design with objects from the start. In more traditional approaches, students first learn 'programming basics in the context of procedural programming in the small'. Since this frame of reference is essentially useless when attacking large-scale problems, students must later re-learn how to approach problems. Instructors can present material from a point of view that will 'make sense' throughout the curriculum. Presentation and justification of programming principles and good techniques is easier. This title places emphasis on the distinction between class specification and implementation. Students learn to develop coherent class specifications early on, and to build components that conform to carefully defined, consistent specifications. The result is more maintainable, error-free code. This title also places early emphasis on testing and test-driven implementation. Students develop a habit of testing as part of the implementation process. Testing is essential to ensure quality programs. This title features the current presentation of object-oriented design and Java.Students benefit from seeing general approaches to commonly occurring design patterns in a specific, well-defined context. This will also make it easier for students to 'get the point' when such topics are introduced in upper-level design and software engineering courses. Other features of this title include an emphasis on event-driven interfaces, rather than traditional procedural I/O and informal use of standard UML notation. Optional interactive exercises are designed for use with the open-source DrJava integrated development environment (IDE) - a popular tool for compiling and testing programs.