intent: Decouple an abstraction from its implementation so that the two can vary independently.
Implementation here means the objects that the abstract class an its derivations use to implement themselves with.
Focus on the?problem rather than the solution
Use commonality/variability analysis rather than noun/verb analysis
Two mandates of OO design
- Find what varies and encapsulate it.
- Favor composition over inheritance.
?