-
Single responsibility principle - A class should have only one reason to change.
-
Open/Closed principle - Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.
-
Liskov Substitution Principle - Child classes should never break the parent class type definitions.
-
Interface Segregation Principle - No client should be forced to depend on methods it does not use.
-
Dependency inversion principle - High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.