одна-единственная обязанность.
O
Open/closed principle
Принцип открытости/закрытости
Программные сущности должны быть открыты для расширения,
но закрыты для изменения.L
Liskov substitution principle
Принцип подстановки Барбары Лисков
Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом.
I
Interface segregation principle
Принцип разделения интерфейса
Много специализированных интерфейсов лучше, чем один универсальный.
D
Dependency inversion principle
Принцип инверсии зависимостей
Зависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций