Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Java: solid, oop, design

Что такое SOLID и для чего он нужен?

Проверяет знание принципов проектирования SOLID.

Короткий ответ

SOLID — это 5 принципов ООП для создания поддерживаемого и расширяемого кода:

  1. SRP (Single Responsibility) — один класс = одна ответственность.

  2. OCP (Open-Closed) — классы открыты для расширения, но закрыты для изменений.

  3. LSP (Liskov Substitution) — подклассы должны заменять родительские классы.

  4. ISP (Interface Segregation) — маленькие интерфейсы лучше больших.

  5. DIP (Dependency Inversion) — зависимости от абстракций, а не реализаций.

Длинный ответ

1. SRP (Принцип единственной ответственности)

  • Проблема: Класс User отвечает за сохранение в БД и отправку email.

  • Решение: Разделить на User, UserRepository, EmailService.

2. OCP (Принцип открытости/закрытости)

  • Пример:

    interface Discount { double apply(double price); }
    class RegularDiscount implements Discount { ... }
    class PremiumDiscount implements Discount { ... }

    Новые скидки добавляются без изменения существующего кода.

3. LSP (Принцип подстановки Барбары Лисков)

  • Нарушение:

    class Square extends Rectangle {
        void setWidth(int w) { 
            super.setWidth(w);
            super.setHeight(w); // Неожиданное поведение для Rectangle!
        }
    }

4. ISP (Принцип разделения интерфейса)

  • Проблема:

    interface Worker {
        void code();
        void cook();
    }  
    // Программист вынужден реализовывать ненужный cook()!

5. DIP (Принцип инверсии зависимостей)

  • Плохо:

    class UserService {
        private MySQLDatabase db; // Зависимость от конкретной БД.
    }  
  • Хорошо:

    class UserService {
        private Database db; // Зависимость от абстракции.
    }

Вывод:
SOLID упрощает поддержку и масштабирование кода.

Уровень

  • Рейтинг:

    1

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#solid

#oop

#design

Подпишись на Java Developer в телеграм