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.