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