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