Reviewed: January 2016
I decided to study this book to improve my OO skills. It is reasonably well-written and, as a hardback, is sturdy enough to see a lot of use. It is sufficiently in-depth enough to require deep study and multiple readings.
The inside front and back covers act as a convenient quick reference regarding the process of Object-Oriented Development process and Booch’s notation (probably superseded by the UML notation).
The preface discusses the evolution of this book, its goals, audience and structure. I am reviewing this book from the perspective of a Software Developer wanting to refurbish my OOA, OOD and OOP skills.
This book is divided into three main sections – Concepts, the Method, Applications/Case studies. Also, there is an appendix covering different OOP languages as well as Notes, Glossary and a classified Bibliography and Index.
Section One – Concepts – has 4 chapters: Complexity, The Object Model, Classes and Objects and Classification. Indeed, I was so determined to master this section that I spent a lot of time reading it, re-reading it, making notes by summarising the text and re-reading the notes. I made these notes in a Journal and there were 161 pages of notes. In addition, I used marker pens in the book itself.
Chapter 1: Complexity (covers Inherent complexity of software, Structure of Complex Systems, Bringing Order to Chaos and On Designing Complex Systems). This discusses the inevitability of complexity in I.T. systems and the role of OO in dealing with that complexity.
Chapter 2: The Object model discusses the evolution of the object model in software systems. From early programmes that dealt with mathematical things through to current day OO languages. It discusses OOA (Object Oriented Analysis), OOD (Object Oriented Design) and OOP (Object Oriented Programming). It discusses four major elements of the Object Model (Abstraction, Encapsulation, Modularity and Hierarchy) and three minor elements (Type system, Concurrency, Persistence).
Chapter 3: Classes and Objects (The Nature of an Object – an object has State, Behaviour and Identity, Relationships among Objects, The Nature of a Class, Relationships Among Classes, The Interplay of Classes and Objects and On Building Quality Classes and Objects). By the time you finish this chapter you should be confident when dealing with Data Abstraction.
Chapter 4: Classification (The Importance of Proper Classification, Identifying Classes and Objects, Key Abstractions and Mechanisms) builds on the previous 3 chapters to produce confidence with inheritance (generalisationspecialisation mechanisms).
Section Two – The Method – has 3 chapters. The first two (The Notation, The Process) are largely superseded by UML).
The third chapter, Pragmatics covers considerations beyond programming – in particular Management and Planning, Staffing, Release Management, Reuse, Quality Assurance and Metrics, Documentation, Tools, Benefits and Risks of OOD. This chapter is easier to read than most and is likely to be relevant for a very long time.
Section Three – Applications – has five chapters, each of which is a case study of an application of the OO process. Most of its pseudo-code is in C++ and some of the examples are (currently) difficult to understand. However, I’ll be improving my C++ and revisiting this section sometime in the future. The case studies involved are Weather Monitoring Station, Frameworks (Foundation Class Library), Inventory Tracking, A.I. (Cryptanalysis) and Traffic Management.
Conclusion. I really liked this book and find it difficult to review because there are so many things I find interesting in this book that I'd like to share in this review.