In an ideal world, every software practitioner would understand the concepts and reasoning behind object-oriented programming and the software development life cycle as outlined in Object-Oriented Analysis and Design with Applications. My experience leads me to realize that just as in civil engineering, where a solid mathematical foundation precedes bridge design, in software engineering, source code implementation must precede design and analysis.
Making the transition from an implementer to a designer/analyst is often made harder because the implementation phase of the software development life cycle is strongly rule driven and practiced under the merciless eye of a compiler or interpreter. This early experience often leads engineers to look for the rules, or silver bullets, that make designers and analysts successful. However, as Fred Brooks explained in The Mythical Man-Month (Addison-Wesley, 1975, 1995), there is no silver bullet for software design or analysis.
If you have enough practical experience to understand why there's no silver bullet, a working knowledge of an object-oriented language, and an enduring interest in understanding object-oriented development, you'll enjoy this book. The concepts, methods, and applications it introduces will prove worthwhile.
Grady Booch is a recognized thought leader in the object-oriented community. The third edition of this highly influential book continues to provide guidance on object-oriented development practices. The book is organized into three main sections: concepts, methods, and applications. And unlike previous editions, this book uses UML 2.0 notation. It has less emphasis on C++ and more emphasis on the modeling aspects of object-oriented analysis and design. It has a strong academic feel to its structure, complete with chapter summaries, references, and an extensive bibliography. One thing I especially liked was the authors' use of a single example—specifically, a hydroponics greenhouse—throughout the concepts and methods sections. I found this consistency helped reveal the different focus from one concept or method to another.
The concepts section outlines some challenges and conceptual underpinnings of complexity and how object-oriented models and practices go about solving these problems. In particular, chapter 2 describes the object model's evolution from earlier structured programming concepts, and chapter 4 discusses classification concepts and their importance to the analysis and design process.
Experienced practitioners will find the methods section mostly familiar. It describes using diagrams to help clarify the design implementation and includes a chapter dedicated to the Unified Modeling Language (UML) notation. However, if you—re just looking for an introduction to UML, instead of a conceptual overview of object-oriented development, you might consider reading UML Distilled by Martin Fowler (Addison-Wesley, 2003).
Chapter 6 includes an overview of what the authors call The Micro Process, which uses object-oriented practices to break down the design into the details needed during a project's implementation phase. Although the process is presented in the context of an object-oriented project, it could apply to any software development.
A chapter on pragmatics provides an important reminder of the hard work involved in the development process. In particular, the authors note that the often-touted ability to reuse objects requires real work and organizational dedication.
The applications section uses substantial examples to walk through portions of object-oriented analysis and design. The example applications are valuable not so much in the designs per se but in the authors' discussion about why they made certain decisions. Given the subjective nature of analysis and design, such examples and discussions are the best food for thought.
The book includes an appendix that provides a brief overview of object-oriented programming languages. Some of today's C# developers have grown up with C/C++ and are better grounded in structured techniques than in object-oriented ones. I think an appendix overview of the C# language could help these developers in understanding object-oriented techniques.
Overall, the third edition of Object-Oriented Analysis and Design with Applications provides a solid and thorough review of object-oriented programming. To fully appreciate this book, you must be able to appreciate the subjective nature of the design and analysis process. Although the book doesn't provide concrete answers, it clearly explains how to use object-oriented techniques to help handle the fundamental complexities associated with software development.
Contact David Arthur Eatough at firstname.lastname@example.org.