SOLID — это аббревиатура от названий пяти принципов объектно-ориентированного программирования, которые помогают разработчикам писать поддерживаемый и масштабируемый код.
Принципы разработаны Робертом Мартином (американским инженером, программистом и автором книги «Чистый код») в начале 2000-х годов.
- S (Single Responsibility Principle) — принцип единственной ответственности;
- O (Open/Closed Principle) — принцип открытости/закрытости;
- L (Liskov Substitution Principle) — принцип подстановки Барбары Лисков;
- I (Interface Segregation Principle) — принцип разделения интерфейса;
- D (Dependency Inversion Principle) — принцип инверсии зависимостей.
-
Принцип единственной ответственности (Single Responsibility Principle — SRP). Каждый класс должен иметь только одну причину для изменения. Это означает, что класс должен быть ответственным только за одну конкретную функцию или задачу.
-
Принцип открытости/закрытости (Open/Closed Principle — OCP). Программные сущности, такие как классы, модули и функции, должны быть открыты для расширения, но закрыты для модификации. Вместо изменения существующего кода, следует добавлять новый код для внесения изменений.
-
Принцип подстановки Лисков (Liskov Substitution Principle — LSP). Объекты в программе должны быть заменяемыми экземплярами их базовых типов, не нарушая корректность программы. Это означает, что код, который работает с базовым типом, должен работать и с любым его подтипом, не вызывая ошибок или неожиданного поведения.
-
Принцип разделения интерфейса (Interface Segregation Principle — ISP). Клиенты не должны зависеть от интерфейсов, которые они не используют. Вместо создания общих интерфейсов следует создавать специфические интерфейсы, предназначенные для конкретных клиентов. Это позволяет избежать излишней связности между компонентами системы и улучшить модульность. Это значит, что нужно создавать только небольшие и узконаправленные интерфейсы, не перегруженные ненужными методами.
-
Принцип инверсии зависимостей (Dependency Inversion Principle — DIP). Зависимости внутри системы должны строиться на основе абстракций, а не деталей. Это означает, что высокоуровневые модули не должны зависеть от низкоуровневых модулей, и они все должны зависеть от абстракций. Классы должны зависеть от абстракций, а не от конкретных реализаций. Высокоуровневые модули не должны зависеть от низкоуровневых модулей. Этот принцип помогает уменьшить связанность между компонентами системы и повысить их переиспользуемость.
Цель использования принципов SOLID
— упростить разработку, сделать её более гибкой и устойчивой к ошибкам.
Следование принципам SOLID
позволяет строить масштабируемые и сопровождаемые программные продукты с понятной бизнес-логикой.
Код, который написан с соблюдением принципов SOLID
, проще понимать, поддерживать, расширять или изменять его функциональность.