I recently read Head First Design Patterns, and they had a handy set of Object-Oriented design principles that were repeated throughout the book that I wanted to document for reference.
- Encapsulate what varies.
- Favor composition over inheritance.
- Program to interfaces, not implementations.
- Strive for loosely coupled designs between objects that interact.
- Classes should be open for extension but closed for modification.
- Depend on abstractions. Do not depend on concrete classes.
- “Only talk to your friends.”
- “Don’t call us, we’ll call you.”
- A class should only have one reason to change.