* Objects First Approach. Students learn to design with objectsfrom the start. In more traditional approaches, students firstlearn "programming basics in the context of procedural programmingin the small." Since this frame of reference is essentially uselesswhen attacking large-scale problems, students must later "re-learnhow to approach problems. Instructors can present material from apoint of view that will "make sense" throughout the curriculum.Presentation and justification of programming principles and goodtechniques is easier.
* Emphasis on the distinction between class specification andimplementation. Students learn to develop coherent classspecifications early on, and to build components that conform tocarefully defined, consistent specifications. The result is moremain-tainable, error-free code.
* Early emphasis on testing and test-driven implementation.Students develop a habit of testing as part of the implementationprocess. Testing is essential to ensure quality programs.
* Current presentation of object-oriented design and Java. Studentsbenefit from seeing general approaches to commonly occurring designpatterns in a specific, well-defined context. This will also makeit easier for students to "get the point" when such topics areintroduced in upper-level design and software engineering courses.Other features include an emphasis on event-driven interfaces,rather than traditional procedural I/O; informal use of standardUML notation
* Optional interactive exercises are designed for use with theopen-source DrJava integrated development environment (IDE) - apopular tool for compiling and testing programs
Chapter O. Introduction to object-oriented software design.
Chapter 1. Data abstraction: introductory concepts.
Chapter 2. Defining a simple class.
Chapter 3. Designing interacting classes.
Chapter 4. Conditions.
Chapter 5. Programming by contract.
Chapter 6. Testing.
Chapter 7. Building a text-based user interface.
Chapter 8. The software life cycle: building a complete system.
Chapter 9. Specifying clients: interfaces.
Chapter 10. Class extension and inheritance.
Chapter 11. Modeling with abstraction.
Chapter 12. Lists.
Chapter 13. Arrays.
Chapter 14. Sorting and searching.
Chapter 15. Failures and exceptions.
Chapter 16. Stream i/o.
Chapter 17. Building a graphical user interface.
Chapter 18. Integrating user interface and model: the Model-View-Controller pattern.
Chapter 19. Recursion.
Chapter 20. Generic structur5es.
Chapter 21. Implementing lists: linked implementations.
Chapter 22. Iterators.
Supplement a. Systems and software.
Supplement b. Programming errors.
Supplement C. Applets.
Supplement d. Enumerations types: the rest of the story.
Appendix i. Compiling, executing, and documenting.
Appendix ii. DrJava.
Appendix iii. Controls and basic Latin: the first 128 Unicode characters.