- Single Responsibility Principle (SRP)
- A class should have one and only one reason to change, meaning that a class should have only one job or responsibility.
- Open/Closed Principle (OCP)
- Software entities (classes, modules, functions, etc.) should be open for extension but closed for modification.
- Liskov Substitution Principle (LSP)
- Objects of a superclass should be replaceable with objects of a subclass without affecting the correctness of the program.
- Interface Segregation Principle (ISP)
- Clients should not be forced to depend on interfaces they do not use.
- Dependency Inversion Principle (DIP)
- High-level modules should not depend on low-level modules. Both should depend on abstractions.
- Abstractions should not depend on details. Details should depend on abstractions.