Набор из пяти объектно-ориентированных принципов проектирования, направленных на создание более гибкого, поддерживаемого и расширяемого кода.
S - Single Responsibility Principle (Принцип единственной ответственности) У класса должна быть только одна причина для изменения.
O - Open/Closed Principle (Принцип открытости/закрытости) Программные сущности (классы, модули, функции и т.д.) должны быть открыты для расширения, но закрыты для модификации.
L - Liskov Substitution Principle (Принцип подстановки Лисков) Дочерние классы должны быть полностью взаимозаменяемы с родительскими классами. Объекты в программе должны быть заменены их подтипами без изменения правильности выполнения программы.
I - Interface Segregation Principle (Принцип разделения интерфейса) Клиенты не должны быть вынуждены зависеть от интерфейсов, которые они не используют. Лучше иметь много специализированных интерфейсов, чем один универсальный.
D - Dependency Inversion Principle (Принцип инверсии зависимостей) Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба типа модулей должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.