When designing a system for an object- oriented implementation
, you must:
- Identify the participants in the system
- Factor them into classes at the right level of granularity
- Define the public interface of each class
- Establish inheritance hierarchies
- Define the relationships between classes
Experienced developers may be able to build a working solution through this procedure.
However it is almost unheard of for even experienced designers to build a reusable solution on their first attempt.
Before you can build an extensible, reusable system, you are probably going to have to build a prototype to find out where your errors and misconceptions are.
Once you understand design patterns and have had a mind altering experience with them, you will not ever think about object-oriented design in the same way.
You will have insights that can make your own designs more flexible, modular, and reusable, which is why you're interested in object-oriented technology in the first place.