- Single Responsibility Principle
A class should have only one reason to change (one job).
- Open and Closed Principle
Open for extension, closed for modification (add features without altering existing code).
- Liskov Substitution Principle
Objects of a superclass should be replaceable with objects of a subclass without affecting correctness.
- Interface Segregation Principle
a class should not be forced to implement interfaces it does not use.
- Dependency Inversion Principle
High-level modules should not depend on low-level modules. Both should depend on abstractions.