реклама
разместить

SOLID — принципы объектно-ориентированного программирования

SOLID — принципы объектно-ориентированного программирования

SOLID - это аббревиатура пяти основных принципов проектирования в объектно‑ориентированном программировании — Single responsibility, Open-closed, Liskov substitution, Interface segregation и Dependency inversion.

Расшифровка:

  • Single responsibility — принцип единственной ответственности
  • Open-closed — принцип открытости / закрытости
  • Liskov substitution — принцип подстановки Барбары Лисков
  • Interface segregation — принцип разделения интерфейса
  • Dependency inversion — принцип инверсии зависимостей

Принцип единственной обязанности / ответственности (single responsibility principle / SRP) обозначает, что каждый объект должен иметь одну обязанность и эта обязанность должна быть полностью инкапсулирована в класс. Все его сервисы должны быть направлены исключительно на обеспечение этой обязанности.

Принцип открытости / закрытости (open-closed principle / OCP) декларирует, что программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для изменения. Это означает, что эти сущности могут менять свое поведение без изменения их исходного кода.

Принцип подстановки Барбары Лисков (Liskov substitution principle / LSP) в формулировке Роберта Мартина: «функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа не зная об этом». Следование принципу LSP заключается в том, что при построении иерархий наследования создаваемые наследники должны корректно реализовывать поведение базового типа. То есть если базовый тип реализует определённое поведение, то это поведение должно быть корректно реализовано и для всех его наследников.

Принцип разделения интерфейса (interface segregation principle / ISP) в формулировке Роберта Мартина: «клиенты не должны зависеть от методов, которые они не используют». Принцип разделения интерфейсов говорит о том, что слишком «толстые» интерфейсы необходимо разделять на более «тонкие», маленькие и специфические, чтобы клиенты маленьких интерфейсов знали только о методах, которые необходимы им в работе. В итоге, при изменении отдельного метода интерфейса не должны меняться клиенты, которые этот метод не используют.

Принцип инверсии зависимостей (dependency inversion principle / DIP) — модули верхних уровней не должны зависеть от модулей нижних уровней, а оба типа модулей должны зависеть от абстракций; сами абстракции не должны зависеть от деталей, а вот детали должны зависеть от абстракций.

Плюсы:

Улучшение поддерживаемости кода — код, написанный с учетом SOLID, легче понимать и изменять, обычно он более структурирован.

Гибкость и расширяемость, низкая связанность — проще добавлять новую функциональность, не изменяя существующий код. Меньше зависимостей между компонентами системы, что делает код более модульным и устойчивым к изменениям. Это особенно полезно в больших проектах, где изменения могут быть сложными и дорогостоящими.

Упрощение тестирования — соответствующий SOLID код легче покрывать тестами, в частности, за счёт использования интерфейсов.

Минусы:

Чрезмерное усложнение архитектуры и овер‑инжениринг — разработчики могут создавать излишне сложные решения, которые не оправданы контекстом задачи. Такой код сложнее сопровождать, стоимость внесения изменений растёт и вероятность ошибок возрастает.

Увеличение времени разработки — написание кода с учетом принципов SOLID требует больше времени и усилий, что бывает неоправданно для простых проектов, для небольших команд или при разработке прототипов.

Резюме:

SOLID — это хороший инструмент для создания качественного и поддерживаемого кода. Но эти принципы не должны становиться догмами. В сложных и долгосрочных проектах SOLID помогает избежать хаоса и упрощает развитие системы, упрощается общение в команде за счёт возможности отсылок к этим принципам, упрощается тестирование и понимание сложных компонентов. А вот для небольших задач или при создании прототипов строгое следование этим принципам может быть избыточным, тормозить разработку и создавать лишние проблемы.

реклама
разместить
Начать дискуссию
Разработка IT-продукта в 2025: как сэкономить минимум в 2 раза и запустить проект без классических ошибок — 7 проверенных шагов
Разработка IT-продукта в 2025: как сэкономить минимум в 2 раза и запустить проект без классических ошибок — 7 проверенных шагов
44
Чистая архитектура фронтенд приложений. Часть первая

Предисловие

Курьеры не нужны? Кто на самом деле будет доставлять ваши заказы в 2025 году
Курьеры не нужны? Кто на самом деле будет доставлять ваши заказы в 2025 году
Принцип прочности

В продолжении разговора о надежности, прочности и устойчивости. Недавно наткнулся на принцип, о существовании которого не знал, но много раз применял его на практике. Точней сказать, я не знал, что это целый принцип. 😃

🏗 DDD — от теории к практике: что это и как его внедрять
🏗 DDD — от теории к практике: что это и как его внедрять
Базовая архитектура сервиса на GO

Основная цель моей архитектуры — разделить код на слои, каждый из которых решает свои задачи. Это не просто модный тренд, а необходимость, которая помогает изолировать бизнес-логику от технических деталей, упрощает тестирование и делает код более понятным.

Как выжить на рынке рекламы или окончательный запрет Запретограма

Свежие новости на тему “Как выжить на рынке рекламы”. С 1 сентября 2025 года вступит в силу запрет на размещение рекламы на признанных нежелательными или запрещенных информационных ресурсах. Как именно будет контролироваться соблюдение этих поправок в закон – посмотрим. Но всем законопослушным участникам рынка рекламы придется искать альтернативу и…

Как выжить на рынке рекламы или окончательный запрет Запретограма
Устранение уязвимостей в коде

Сегодня решил рассказать об одном аспекте в разработке ПО, про который очень часто несправедливо забывают. Это способы изоляции приложения и системы, в которой это приложение исполняется.

Причины, по которым дизайн-система может давать сбои (и как их избежать)

Даже при самых продуманных планах иногда изменения в направлении компании или характеристиках продукта означают, что ваша система дизайна терпит неудачу.

реклама
разместить
Топ 10 ошибок, которые мешают стать программистом: разбор ключевых проблем новичков
Топ 10 ошибок, которые мешают стать программистом: разбор ключевых проблем новичков
11
5 простых инструментов, которые помогут сделать работу на проекте более эффективной (структурной)

Любой проект - экосистема, за которой необходимо ухаживать. Если за экосистемой не следить или вовсе начать ее загрязнять лишним - она быстро умрет и перестанет приносить свои плоды. Так и с проектом. Любому проекту так же точно важно уделять время и внимание, выстраивать и налаживать процессы, чтобы получился хороший результат.

33
Структура, высеченная в камне

Сегодня будет небольшой манифест. Часто сталкиваюсь с одним очень интересным фактом. Большинство разработчиков с большей охотой идут на изменения в коде, нежели на изменение в структуре проекта. Даже самые очевидные аргументы в этом вопросе работают плохо.

Структура, высеченная в камне
[]