Image

Принципы SOLID: зачем они нужны и как применять на практике

Принципы SOLID: зачем они нужны и как применять на практике

Принципы SOLID: зачем они нужны и как применять на практике

Понимание принципов SOLID помогает писать код, который легко поддерживать, масштабировать и тестировать. Разберем, зачем нужны эти принципы и как их использовать на практике.

Что такое принципы SOLID?

Принципы SOLID — это пять основных правил объектно-ориентированного программирования, сформулированных Робертом Мартином («Дядюшкой Бобом»). Эти принципы направлены на создание структурированного, понятного и гибкого кода. Если соблюдать их, ваш проект станет легче адаптировать к изменениям, а также снизится риск ошибок при доработках.

Расшифровка аббревиатуры SOLID:

    S — Single Responsibility Principle (Принцип единственной ответственности)O — Open/Closed Principle (Принцип открытости/закрытости)L — Liskov Substitution Principle (Принцип подстановки Барбары Лисков)I — Interface Segregation Principle (Принцип разделения интерфейса)D — Dependency Inversion Principle (Принцип инверсии зависимостей)

Принципы SOLID: зачем они нужны и как применять на практике

Курс изучения Java

Можете пройти наш бесплатный курс по изучению Java

Single Responsibility Principle (SRP)

Принцип единственной ответственности гласит, что каждый класс должен иметь только одну причину для изменения, то есть выполнять только одну задачу. Если класс выполняет несколько функций, при изменении одной из них могут непредсказуемо сломаться другие.

Пример нарушения SRP:

class Report { public String generateReport() { // Логика генерации отчета } public void saveToFile(String filename) { // Логика сохранения отчета в файл } }

Здесь класс и генерирует отчет, и сохраняет его на диск. Лучше вынести сохранение в отдельный класс.

Как исправить:

class Report { public String generateReport() { // Логика генерации отчета } } class ReportSaver { public void saveToFile(Report report, String filename) { // Логика сохранения отчета } }

Open/Closed Principle (OCP)

Принцип открытости/закрытости означает, что программные сущности должны быть открыты для расширения, но закрыты для модификации. Иными словами, добавлять новое поведение можно без изменения уже существующего кода.

Плохой пример:

class AreaCalculator { public double calculateArea(Object shape) { if (shape instanceof Circle) { // Вычисление площади круга } else if (shape instanceof Square) { // Вычисление площади квадрата } return 0; } }

При добавлении новой фигуры придётся менять код калькулятора. Это нарушает принцип OCP.

Хороший пример:

interface Shape { double calculateArea(); } class Circle implements Shape { public double calculateArea() { // Площадь круга } } class Square implements Shape { public double calculateArea() { // Площадь квадрата } } class AreaCalculator { public double calculateArea(Shape shape) { return shape.calculateArea(); } }

Liskov Substitution Principle (LSP)

Принцип подстановки Лисков утверждает: если класс S является подклассом класса T, то объекты типа T могут быть заменены объектами типа S без изменения правильности программы.

Пример нарушения LSP:

class Bird { public void fly() { // Птица летит } } class Penguin extends Bird { @Override public void fly() { throw new UnsupportedOperationException(«Пингвины не умеют летать»); } }

Пингвин не умеет летать, значит, наследование от Bird некорректно. Нужно пересмотреть иерархию.

Как исправить:

interface Bird { void eat(); } interface FlyingBird extends Bird { void fly(); } class Sparrow implements FlyingBird { public void fly() { // Воробей летит } public void eat() { // Воробей ест } } class Penguin implements Bird { public void eat() { // Пингвин ест } }

Принципы SOLID: зачем они нужны и как применять на практике

Курс изучения Java

Можете пройти наш бесплатный курс по изучению Java

Interface Segregation Principle (ISP)

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

Плохой пример:

interface Worker { void work(); void eat(); } class Robot implements Worker { public void work() { // Робот работает } public void eat() { // Робот не ест } }

Роботы не едят, значит, их заставляют реализовать ненужный метод.

Хороший пример:

interface Workable { void work(); } interface Eatable { void eat(); } class Human implements Workable, Eatable { public void work() { // Человек работает } public void eat() { // Человек ест } } class Robot implements Workable { public void work() { // Робот работает } }

Dependency Inversion Principle (DIP)

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

Плохой пример:

class LightBulb { public void turnOn() {} public void turnOff() {} } class Switch { private LightBulb bulb; public Switch(LightBulb bulb) { this.bulb = bulb; } public void operate() { // Управление лампочкой } }

Переключатель жёстко связан с конкретной реализацией лампочки.

Хороший пример:

interface Switchable { void turnOn(); void turnOff(); } class LightBulb implements Switchable { public void turnOn() {} public void turnOff() {} } class Switch { private Switchable device; public Switch(Switchable device) { this.device = device; } public void operate() { // Управление устройством } }

Заключение

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

Источник

❌ Нет тегов для этой статьи
Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых