S - Single Responsibility: один класс - одна причина для изменения. O - Open/Closed: открыт для расширения, закрыт для модификации. L - Liskov Substitution: подтипы должны быть заменяемы базовым типом. I - Interface Segregation: много узких интерфейсов лучше одного "толстого". D - Dependency Inversion: зависить от абстракций, не от конкретных классов.