1. The Single Responsibility Principle (SRP)
 
A class should have only one cause to 
change.
 
2. Open Closed Principle (OCP) composition 
among
 
Class module should be extensible, as 
immutable (open for extension, to change the closed).
 
3. The Liskov Substitution Principle (LSP)
 
Subclasses must be substitutable for their 
base classes.
 
4. The Principle of Dependency Inversion 
(DIP)
 
High level modules should not depend on the 
underlying modules, both should depend upon abstractions. Abstractions should 
not depend upon the implementation details, but details should depend upon 
the abstractions.
 
5. Interface Segregation Principle (ISP)
 
Should not force the client, it depends upon the 
way that they do not use.