As we discussed the design evolution in previous section, we have already hinted at the criteria that ensure design quality:
- It has to be flexible enough to adapt to the incoming changes (they are as inevitable as taxes, so you'd better be ready)
- It has to clearly communicate the project structure and specialization of each part
- It has to use well-defined domain terminology
- It has to allow testing parts in isolation and integrated together
- It has to be presented in a form that allows us to discuss it with the future customers and, ideally, is tested by them
- It has to take full advantage of the four OOP concepts—encapsulation, interface, inheritance, and polymorphism
Those are general criteria for any project and any OOP language. But in this book, we introduce Java best practices, so we need to mainly discuss the detailed design, coding...