### S – Single Responsibility / Принцип единственной ответственности Каждый класс должен отвечать только за одну операцию. ![Принципы SOLID](images/Принципы%20SOLID.png) ### O — Open-Closed / Принцип открытости-закрытости Программные сущности должны быть открыты для расширения, но закрыты для модификации. Изменения кода в сущностях, которые ранее были протестированы и введены в работу, требуют повторного тестирования. ![Принципы SOLID-1](images/Принципы%20SOLID-1.png) Добавление нового функционала путем создания новой сущности (например, композиция или наследование) не требует таких трудозатрат. ![Принципы SOLID-2](images/Принципы%20SOLID-2.png) ### L — Liskov Substitution / Принцип подстановки Барбары Лисков Наследуемый класс должен дополнять, а не замещать поведение родительского класса ![Принципы SOLID-3](images/Принципы%20SOLID-3.png) ### I — Interface Segregation / Принцип разделения интерфейсов Программные сущности не должны зависеть от методов, которые они не используют. Если перефразировать: нельзя заставлять сущность реализовывать интерфейс, которым он не пользуется. На картинке ниже класс Knife вынужден реализовывать метод reload, хотя нож не нуждается в перезарядке. ![Принципы SOLID-4](images/Принципы%20SOLID-4.png) <br> Правильно сделать так ![Принципы SOLID-5](images/Принципы%20SOLID-5.png) ### D — Dependency Inversion / Принцип инверсии зависимостей Сущности верхнего уровня не должны зависеть от сущностей нижнего уровня. И те, и другие должны зависеть от абстракций. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций. ![Принципы SOLID-6](images/Принципы%20SOLID-6.png) <br> Источники https://www.youtube.com/watch?v=TxZwqVTaCmA https://habr.com/ru/company/productivity_inside/blog/505430/ https://ru.wikipedia.org/wiki/SOLID