Originally posted by FUTTERSACK MICHEL:
1) Encapsulate what varies
9) A class should have only one reason to change
The Single Responsibility Principle.
3) program to interfaces not implementations
4) Strive for loosely coupled designs between objets that interact
6) Depend on abstractions Do not depend on concrete classes
Dependency Inversion Principle
5) Classes should be open for extension but closed for modification (Bertrand Meyer)
Open Closed Principle, obviously.
7) Only talk to your friends
Law of Demeter
2) Favor composition over inheritance
I don't think this is a good principle. It's a good heuristic for beginners who tend to overuse inheritance. Experienced developers don't favor composition over inheritance, they try to find a good balance between them.
What seems to be missing are
Single Choice Principle, and
Liskov's Substitution Principle