S: Do one job well (Single Responsibility Principle).
O: Open for extension, closed for modification (Open/Closed Principle).
L: Subclasses should fit the parent (Liskov Substitution Principle).
I: Keep interfaces small and focused (Interface Segregation Principle).
D: Depend on protocols, not concrete classes (Dependency Inversion Principle).
