Why Read This Book?
One way to master OO design is do design and implementation of a large number of classes. This book guides you through exercises to design dozens of classes that must work together to create a large – and reasonably complete – application. We’ll discuss the design in some detail to reveal an approach to object-oriented design.
While it is also important to read examples of good design, a finished product doesn’t reveal the designer’s decision-making process. Our goal in this book is to help programmer understand the design process that leads to a final product.
Everything is Design It’s important to note that all software development involves considerable skill in design. In some circles, there is an attempt to distinguish between architects (or designers) and coders. The idea is that someone can be able to work with a language – coding – but not quite ready to do design work. The coders can be given a detailed “specification” from which they can write code.
This distinction between designers and coders doesn’t really exist. It’s unhelpful to try and make this distinction. All programming involves design at some level.
If we attempt to write a design specification so detailed that someone else can transform it into code without them having to make any design decisions, the specification is isomorphic to code, but written in some non-technical language like English. The design has all the details of code. An automated translation could produce code from this magically complete with fewer errors than a person.
If we write specifications at somewhat more abstract level, we’re demanding that the “coder” makes some design decisions to move from the abstraction to concrete code. The more abstract the specification, the more design work must be done. The amount of design work is non-zero.
The point of this book is to build skills in object-oriented design prior to a project with a fixed budget and a looming deadline.
1.2 What You’ll Do
This book provides a sequence of interesting and moderately complex exercises in OO design. The exercises are not hypothetical but must lead directly to working programs.
The applications we will build are a step above trivial, and will require some careful thought as part of creating a workable design. Further, because the applications are largely recreational in nature, they are interesting and engaging. This book allows the reader to explore the processes and artifacts of OO design before project deadlines make good design seem impossible.
The first part will be quite detailed. The third part will summarize the designs at a higher level of abstraction