There are a lot of good books on object-oriented analysis and design. We will cite many of them in the various "further reading" sections of this book. Following all these links would be a hopeless mission for our readers. This is why we want to give a special recommendation for some books that should be found under every designer's pillow at night. Most are classics in spite of their youthfulness. Reading them with a pocket light is strongly recommended.
In this book we distinguish design in the large versus design in the small. We will discuss books in the order from design in the large to design in the very small. Design in the small may be language dependent. C++ programmers need other idioms than Smalltalk programmers.
We have also added a further reading section here. It should be sufficient if keep those in your room at night. Some of these books tend to have more of a focus on management. From our experience we can say that we have never seen a project in real trouble caused only by technical reasons. Management, and also technical management, should never be neglected.
Buschmann, Jškel, Meunier, Rohnert, Stal: "Pattern-Oriented Software Architecture"
Coplien: "Advanced C++ - Programming Styles and Idioms"
Coplien, Schmidt (ed.): "PLoP Materials - Pattern Language of Program Design"
Gamma, Helm, Johnson, Vlissides: "Design Patterns Elements of Reusable Object-oriented Software"
Gamma: "Objektorientierte Softwareentwicklung am Beispiel von ET++"
Meyers: "Effective C++ - 50 Specific Ways to Improve Your Programs and Desings"
Meyers: "More Effective C++ - 35 New Ways to Improve Your Programs and Desings"
Webster: "Pitfalls of Object-Oriented Development"
Pattern-Oriented Software Architecture
By Frank Buschmann, Claus Jškel, Regine Meunier, Hans Rohnert and Michael Stal, Wiley 1996.
This book deals with top level architectural patterns that have to be chosen early after starting a project. The resulting top level components are usually defined in a very early phase. Typi-cal architectures described are, e.g. Layered Architectures, Pipes and Filters, Model-View-Controller and other architectural patterns. While most of the architectures described have been presented before by Garlan and Shaw as architectural styles [Gar+93] this book is very readable because it uses pattern form. The introduction contains a brief summary of nonfunc-tional software quality attributes that's also worth reading.
Design Patterns Elements of Reusable Object-oriented Software
By Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, Addison-Wesley 1995.
Being on the market no longer than since 1995, Design Patterns is the best selling computer book ever. The authors are the ultimate authority in design patterns. The way they describe designs is still unreached in its clarity. The book is not about finding the top level components but about designing components that might contain something around 5-10 classes.
The book is divided in three sections:
These sections cover most relevant known patterns for design.
As mentioned above, programming idioms are language dependent. This is why we recom-mend different books for C++ and Smalltalk.
Advanced C++ Programming Styles and Idioms
By Jim Coplien, Addison-Wesley 1992.
Each language has its idioms at class level. The book presents idioms that are best used for C++. Some very basic concepts are introduced like Orthodox Canonical Class Form, Counted References or the Letter-Envelope idiom that can also be found in an extended form as a de-sign pattern in "Pattern-Oriented Software Architecture".
Effective C++ 50 Specific Ways to Improve Your Programs and Designs
More Effective C++ 35 New Ways to Improve Your Programs and Designs
By Scott Meyers, Addison-Wesley 1992 and 1996.
C++ is a very powerful language. But not everything that is a syntactically correct C++ pro-gram is also a well designed or well mannered C++ program. Scott Meyers provides hints and checklists for design at a class and method level.
Pitfalls of Object-Oriented Development
By Bruce F. Webster, M&T Books 1995.
The book deals with problems that one might face when practicing object-oriented design and development. The book contains a checklist of conceptual, political, management, analysis and design and other pitfalls. Each possible pitfall is described in brief form, outlining symp-toms that indicate you have fallen into the pit, consequences (how does it feel down there in yogurt creek), detection (how do you detect you're in yogurt), extraction (how to get out of it) and prevention.
The book is about as drastic as the description above and really amusing. Pitfalls like e.g. hy-perspaghetti objects or Swiss army knife objects (Swiss army knives are nice gadgets but a conventional screwdriver is better) are accumulated to a valuable checklist that can prevent you from falling into well known project pits.
PLoP Materials Pattern Languages of Program Design
edited by Jim Coplien and Doug Schmidt, Addison-Wesley 1995.
This book is the first of a series of conference proceedings from PLoP conferences that are still to be held. The book presents patterns from various sources and is some kind of a pattern readers digest. Check out whether it contains something you might find useful and look out for further releases.
Objektorientierte Softwareentwicklung am Beispiel von ET++
By Erich Gamma, Springer Verlag, 1992.
This book is the predecessor of "Design-Patterns...". It's worth reading because it tells a lot about the nature of good design and the difficulties of building class libraries and reusable software.
All rights on the presented material are reserved including publication. No part of this material may be reproduced without the prior written consent of the authors. Munich, 1996