Part 3. Design the application right
Good design principles help us design the application right. These principles include minimizing dependencies among classes by hiding their implementations, leaving no surprises in our code, designing subclasses right, and choosing between “is-a” inheritance relationships and “has-a” aggregation relationships.
The design principles help us meet the challenges of change and complexity by creating cohesive and loosely coupled classes. We’ll see in the next part of the book that good design principles form the foundation of design patterns.