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 — это основа для создания чистого, поддерживаемого и масштабируемого кода. Они помогают избегать типичных ошибок проектирования, упрощают командную работу и ускоряют разработку. Следование этим правилам требует опыта и внимательности, но со временем принципы становятся неотъемлемой частью мышления профессионального разработчика.

Источник

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

галерея

ИИ почти всех обгонит? Прогнозы звучат громко, но есть нюансы…
Компания Anthropic получила от Amazon 5 миллиардов долларов и в обмен пообещала инвестировать 100 миллиардов долларов в облачные сервисы.
dummy-img
Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.
Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.
dummy-img
dummy-img
Взаимодействие человека и машины погружается под воду.
Взаимодействие человека и машины погружается под воду.
Image Not Found
Компания Anthropic получила от Amazon 5 миллиардов долларов и в обмен пообещала инвестировать 100 миллиардов долларов в облачные сервисы.

Компания Anthropic получила от Amazon 5 миллиардов долларов и в обмен пообещала инвестировать 100 миллиардов долларов в облачные сервисы.

Вкратце Опубликовано: Изображение предоставлено: Thos Robinson/Getty Images для The New York Times (откроется в новом окне) Джули Борт Компания Anthropic получила от Amazon 5 миллиардов долларов и в обмен пообещала инвестировать 100 миллиардов долларов в облачные сервисы.…

Апр 21, 2026
dummy-img

Как почистить виниловые пластинки (2026): пылесос, ультразвук, чистящий раствор, щетка.

Эти щелчки и треск недопустимы. Приведите свою музыку в порядок с помощью этого удобного руководства. Источник: www.wired.com

Апр 21, 2026
Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.

Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.

Это сегодняшний выпуск The Download, нашей ежедневной новостной рассылки, которая предоставляет вам ежедневную порцию событий в мире технологий. Кибермошенники обходят системы безопасности банков с помощью незаконных инструментов, продаваемых в Telegram. В центре по отмыванию денег в Камбодже…

Апр 21, 2026
Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.

Загрузка: обход банковских систем кибермошенниками и проблемы с удалением углерода.

Это сегодняшний выпуск The Download, нашей ежедневной новостной рассылки, которая предоставляет вам ежедневную порцию событий в мире технологий. Кибермошенники обходят системы безопасности банков с помощью незаконных инструментов, продаваемых в Telegram. В центре по отмыванию денег в Камбодже…

Апр 21, 2026

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