SOLID
Принципы SOLID и их связь с ООП
SOLID — это набор пяти принципов проектирования объектно-ориентированных систем. Они формулируют, как правильно применять базовые возможности ООП: наследование, инкапсуляцию, полиморфизм и абстракцию. Фактически, SOLID — это мост между «теорией» объектно-ориентированного подхода и «практикой» написания гибкого и поддерживаемого кода.
S — Single Responsibility Principle (Принцип единственной ответственности)
Каждый класс должен отвечать только за одну задачу. Этот принцип напрямую связан с инкапсуляцией: скрывая детали реализации, мы выделяем чёткие зоны ответственности.
ООП даёт инструмент — класс.
SOLID уточняет: класс должен инкапсулировать одну ответственность, а не десятки.
Схема для SRP:

O — Open/Closed Principle (Принцип открытости-закрытости)
Программные сущности должны быть открыты для расширения, но закрыты для изменения. Это прямое следствие абстракции и полиморфизма.
ООП даёт нам интерфейсы и абстрактные классы.
SOLID говорит: расширяйте поведение через новые реализации, а не меняйте старый код.
Схема для OCP:

L — Liskov Substitution Principle (Принцип подстановки Барбары Лисков)
Подклассы должны быть взаимозаменяемы с базовыми классами. Этот принцип уточняет, как использовать наследование. Если класс B
наследуется от класса A
, то любой код, работающий с A
, должен корректно работать и с B
.
ООП даёт наследование и полиморфизм.
SOLID требует: наследование должно сохранять инварианты и ожидания базового класса.
Схема для LSP:

I — Interface Segregation Principle (Принцип разделения интерфейсов)
Клиенты не должны зависеть от методов, которые они не используют. Это расширение идеи абстракции и интерфейсов.
ООП позволяет объявлять интерфейсы или абстрактные классы.
SOLID говорит: делите их на небольшие, специализированные интерфейсы.
Схема для ISP:

D — Dependency Inversion Principle (Принцип инверсии зависимостей)
Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба типа должны зависеть от абстракций. Это развитие идеи полиморфизма и инкапсуляции.
ООП даёт абстракции (интерфейсы, базовые классы).
SOLID формулирует: связывайтесь через абстракцию, а не через конкретику.
Схема для DIP:

Вывод: ООП → SOLID и обратно
SOLID не вводит новых сущностей, которых нет в ООП. Он лишь уточняет, как правильно применять ООП. Принципы ООП дают инструменты: классы, объекты, наследование, инкапсуляцию, полиморфизм. Принципы SOLID говорят, как пользоваться этими инструментами, чтобы избежать ошибок.
SRP — уточнение инкапсуляции: каждая капсула должна содержать одну ответственность.
OCP — уточнение абстракции: расширяйте через новые реализации, а не меняйте старые.
LSP — уточнение наследования: наследники не должны ломать поведение родителей.
ISP — уточнение интерфейсов: делайте маленькие и специализированные интерфейсы.
DIP — уточнение полиморфизма: связывайтесь через абстракции, а не через конкретные классы.