Book Reviews


Object-Oriented Design with Applications

Reviewed by Alex Lane


Alex Lane is the Senior Technical Writer in the Languages Business Unit at Borland International. This article was excerpted from Turbo C++ by Example (M&T Books, 1990) and has been reprinted with the permission of M&T Books (415/366-3600).

The object model is taking the programming world by storm, to the extent that the technology for implementing object-oriented systems is outstripping the ability of many programmers to use it effectively. Using a new technology effectively involves adopting new design techniques, not simply using new tools. Grady Booch's Object-Oriented Design with Applications is a practical guide to constructing object-oriented systems.

The book's emphasis is on the pragmatic, for although Booch does discuss the fundamental concepts of the object model and introduces the reader to a notation system for object-oriented design, most of the book focuses on nuts-and-bolts discussions of object-oriented system design. Concepts, the method, and applications are, in fact, the three major sections of the book. The audience for the book encompasses both computer professional — including software engineer, analyst, and manager — and student.

Concepts

The discussion of concepts starts with an examination of complexity. Booch tackles the issue of what makes software complex and links complexity directly to the "software crisis." He lists five attributes of complex systems and discusses the role of both algorithmic and object-oriented decomposition to help cope with this complexity.

Booch then embarks on a definition of the object model that discusses its evolution, its elements, and its applications. This model is a "language-free" model, in that it is not predicated on any one language, but rather abstracts the model from existing concepts. Booch then discusses what is and is not an object and a class, discusses the relationships among objects, among classes, and between objects and classes. The first section ends with an important chapter on classification.

The Method

The section on the method begins with a justification for and presentation of the object-oriented design notation that Booch uses in the rest of the book. This includes notation for class and object diagrams (for documenting the logical design of a system), and module and process diagrams (for documenting the physical design). Booch also provides state transition and timing diagrams to show the state space of a class instance and dynamic object interactions, respectively. On my first read of the book, I skipped these sections, which was a mistake, since they are used extensively in the applications discussions. The notation is, however, reproduced on the book's inside covers for easy reference.

The book continues its presentation of the method by describing the design process ("round-trip gestalt design"), and discussing the pragmatics of design given the incremental, iterative nature of object-oriented design.

Applications

The first two sections are a preamble of sorts to the third section covering applications. While I found this section to be a real treasure — Booch takes five applications from the analysis stage through design, evolution, and modification — readers who specialize in only one object-oriented language will likely leave 80 percent of this section unread because the author implements each of the five applications in a different language. A home heating system is done in Smalltalk. A geometric optics construction kit is implemented in Object Pascal. C++ is used to construct a problem reporting system. Common LISP is applied to the problem of cryptanalysis. Finally, Ada is used to build a traffic management system.

In today's computing world, developers have increasingly become cliquish, sticking to their own specialty and shunning others. However, as Robert Heinlein once wrote, "Specialization is for insects," and the reader who ignores the "other" parts of this section on applications is shortchanging him- or herself. You don't have to be a guru at any of these languages to get a great deal out of this section.

In General

Many computer science books — particularly those undertaking to explain design — have the unfortunate characteristic of taking themselves too seriously. This is certainly not the case in Booch's book. Illustrative cartoons scattered throughout the book will bring a smile to your lips as they pound home their message. Booch also has a refreshing way of expressing ideas. Nobody, he notes, would expect to successfully (or cheaply) add a sub-basement to a 100-story building, yet equivalent changes are demanded in software all the time. I'll marshall that argument the next time I'm confronted with such a change.

The book makes good use of typography, with distinguishable fonts for text and code, and recognizable section headers. There is a band of whitespace along the sides of the page, and the pages stand up well to scribbling and accenting with yellow marker. Figures, cartoons, and sidebars break the monotony of text-filled pages. Sidebars are noted in the Table of Contents.

The end material in the book is helpful, and, in general, well organized. A capsule summary of object concepts and the characterstics of object-oriented languages is presented in the appendix. These are, of necessity, pretty sparse summaries, and Booch provides a list of references for each language. The appendix is followed by the book's footnotes (I would have preferred them at the end of each chapter), and a good glossary of terms.

The bibliography is arranged in a classified manner. References to object-oriented design are grouped separately from those on object-oriented programming, software engineering, etc. This gives the bibliography a limited value. If you know your subject and want a list of books, you're fine. If you know only your author, you may have to look in several different classifications before finding what you seek.

The field of object-oriented design is young, and there is always the risk that the first few books published on the subject will be rushed and incomplete. Not so here. Grady Booch's book thoroughly covers its material in an engaging manner, and is destined to be a classic in the field. It deserves a place on the shelf of every serious software developer.

Object-Oriented Design with Applications
Grady Booch
Benjamin/Cummings
Publishing Co.
ISBN 0-8053-0091-0
580 pp.
(1991)