In spite of the slight change in title to include object-oriented analysis, this book is of course an updated version of Booch’s popular original . The book is divided into three sections. Section 1 (chapters 1 to 4) deals with the fundamental concepts in object-oriented analysis, design, and programming. Chapter 1 discusses the complexity issues in systems today, leading to chapter 2, which introduces such object-oriented concepts as abstraction, encapsulation, modularity, hierarchy, typing, concurrency, and persistence. Chapter 3 then covers object-related concepts such as states, behavior, aggregations, and identity, and class-related concepts such as associations, inheritance, aggregations, using, instantiation, and metaclasses. Chapter 4 provides some guidelines on the identification of classes and objects.
The presentation of object orientation in chapter 3 remains outstanding. Associations and aggregations have been added, so the fundamental concepts are more in line with those of most other authors. This material should not be missed by people reading Booch for the first time. Furthermore, I am pleased to note that all examples in chapter 3, as well as the sample applications in Section 3, are now expressed in C++. This will be a great relief to readers of the first edition, because they are no longer expected to be familiar with every object-oriented programming language, including Ada, C++, CLOS, Object Pascal, and Smalltalk.
People who have read the first edition may choose to go directly to Section 2. The notation, commonly known as Booch diagrams, is explained in chapter 5, and chapter 6 explains how to apply it. Chapter 7 covers the practical aspects of applying the method.
The notation has been changed, and the explanations have been rewritten. For example, attributes and operations are now part of the class icons and object icons, while class relationship symbols have been simplified. Interaction diagrams have been added, in the style of Rumbaugh’s event traces. The module diagrams have been simplified. The state-transition diagrams resemble Rumbaugh’s state diagrams, because of the change of shape and the inclusion of nested states. Advanced concepts related to the use of the notation have been included. The discussion of the process and pragmatics of object-oriented analysis and design has been greatly expanded. The process is only discussed in general terms, however, and readers must study the applications in Section 3 before appreciating the methodology. This style of presentation may not be suitable for experienced practitioners who only want to gain some idea of the Booch method without going into detail.
Section 3 (chapters 8 through 12) gives examples of applications of the method to various cases, such as a weather monitoring station, a foundation class library, inventory tracking, cryptanalysis, and traffic management. The new choice of applications is excellent and is a great improvement over the first edition. Readers should not confuse these applications with simple case studies. These applications prepare readers for important design principles. For example, the foundation class library of abstract data types and abstract algorithms illustrates the development of domain-independent object-oriented frameworks, and the inventory tracking system illustrates the unification of database and application design through a client/server architecture. Vertical examples such as cryptanalysis and traffic management systems remain and have been updated.
Like its first edition, the book is unbeatable as a bibliographical reference. The classified bibliography now contains over 1100 entries, in addition to 18 pages of reference notes and annotated suggestions for further reading at the end of each chapter.
This new edition is a marked improvement over the first edition while retaining the outstanding features of the original. It is a must for people who are serious about object-oriented analysis and design.