Архив рубрики ~Лента новостей~

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

Принципы 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 (Принцип инверсии зависимостей)

Курс изучения 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() { // Пингвин ест } }

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

Источник

❌ Нет тегов для этой статьи

Оцените материал:

Поделиться
Понравилась статья? Расскажите другим
ВКонтакте
Читайте также
Новости робототехники GAM Enterprises будет производить редукторы Schaeffler PSC Новости робототехники Партнеры Avnet и Weston Robot запустят платформу проверки периферийного искусственного интеллекта Архив рубрики ~Коротко из Telegram~ ChatGPT научился читать вкладки браузера — OpenAI выпустила обновление расширения… Архив рубрики ~Коротко из Telegram~ 🐱 Превращаем рабочий стол в уютное место с котиками, собачками… Архив рубрики ~Коротко из Telegram~ Samsung, Huawei и вся полупроводниковая отрасль ищут выход из тупика… Архив рубрики ~Коротко из Telegram~ Дайджест дня В первом полугодии 2026 г. более 60% мобильных… Архив рубрики ~Коротко из Telegram~ С ИИ работы будет меньше, говорили они Разработчики ИИ давно… Архив рубрики ~Коротко из Telegram~ Учёные смогли «омолодить» кожу на десятки лет С возрастом в… Архив рубрики ~Коротко из Telegram~ К законам об ИИ в различных странах подходят по-разному, но… Архив рубрики ~Коротко из Telegram~ DeepSeek V4-Flash оказался дешевым до неприличия После выхода DeepSeek V4-Flash… Архив рубрики ~Коротко из Telegram~ Опенсорсный видеоредактор на Claude Code монтирует по текстовой команде Нашли… Архив рубрики ~Коротко из Telegram~ Google выключил новую AI-фичу в картах всего через сутки Google… Архив рубрики ~Коротко из Telegram~ Во втором квартале интерес россиян к зарубежным мессенджерам вырос на… Архив рубрики ~Коротко из Telegram~ В первой половине 2026 года количество веб-атак на российские компании… Новости робототехники GAM Enterprises будет производить редукторы Schaeffler PSC Новости робототехники Партнеры Avnet и Weston Robot запустят платформу проверки периферийного искусственного интеллекта Архив рубрики ~Коротко из Telegram~ ChatGPT научился читать вкладки браузера — OpenAI выпустила обновление расширения… Архив рубрики ~Коротко из Telegram~ 🐱 Превращаем рабочий стол в уютное место с котиками, собачками… Архив рубрики ~Коротко из Telegram~ Samsung, Huawei и вся полупроводниковая отрасль ищут выход из тупика… Архив рубрики ~Коротко из Telegram~ Дайджест дня В первом полугодии 2026 г. более 60% мобильных… Архив рубрики ~Коротко из Telegram~ С ИИ работы будет меньше, говорили они Разработчики ИИ давно… Архив рубрики ~Коротко из Telegram~ Учёные смогли «омолодить» кожу на десятки лет С возрастом в… Архив рубрики ~Коротко из Telegram~ К законам об ИИ в различных странах подходят по-разному, но… Архив рубрики ~Коротко из Telegram~ DeepSeek V4-Flash оказался дешевым до неприличия После выхода DeepSeek V4-Flash… Архив рубрики ~Коротко из Telegram~ Опенсорсный видеоредактор на Claude Code монтирует по текстовой команде Нашли… Архив рубрики ~Коротко из Telegram~ Google выключил новую AI-фичу в картах всего через сутки Google… Архив рубрики ~Коротко из Telegram~ Во втором квартале интерес россиян к зарубежным мессенджерам вырос на… Архив рубрики ~Коротко из Telegram~ В первой половине 2026 года количество веб-атак на российские компании…