We try to solve the problem by rushing through the design process so that enough time is left at the end of the project to uncover the errors that were made because we rushed through the design process.
WHAT YOU WILL LEARN IN THIS CHAPTER:
- How to use generalization and refinement to build inheritance hierarchies
- Warning signs of bad inheritance hierarchies
- How to use composition to build new classes without inheritance
- How normalization protects databases from anomalies
- Rules for first, second, and third normal forms
High-level design paints an application’s structure in broad strokes. It identifies the system’s general environment (hardware, operating system, network, and so on) and architecture (such as monolithic, client/server, and service-oriented). It identifies the system’s major components such as reporting modules, databases, and top-level classes. It should also sketch out how the pieces of the system will interact.
Low-level design fills in some of the gaps to provide extra detail that’s necessary before developers can start writing code. It gives more specific guidance for how the parts of the system will work and how they will work together. It refines the definitions of the database, the major classes, and the internal and external interfaces.
High-level design focuses on what. Low-level design begins to focus on how.
As an analogy, if you were building a highway system, high-level design would determine ...