Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: Interface Segregation Principle, SOLID, software design, interface, dependency

Что такое Interface Segregation?

Вопрос проверяет понимание принципа разделения интерфейсов (Interface Segregation Principle, ISP), который является частью SOLID и помогает создавать гибкие и поддерживаемые системы, избегая зависимости от неиспользуемых методов.

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

Interface Segregation Principle (ISP) — это принцип SOLID, который гласит, что клиенты не должны зависеть от методов, которые они не используют. Вместо одного большого интерфейса лучше создавать несколько маленьких и специфичных. Это уменьшает связность и упрощает поддержку кода, так как изменения в одном интерфейсе затрагивают только те классы, которые от него зависят.

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

Принцип разделения интерфейсов (Interface Segregation Principle, ISP) — это один из пяти принципов объектно-ориентированного дизайна SOLID, предложенных Робертом Мартином. Его основная идея заключается в том, что клиенты (классы, модули) не должны быть вынуждены зависеть от интерфейсов, которые они не используют. Создание "толстых" интерфейсов, содержащих множество методов, приводит к тому, что классы-клиенты реализуют методы, которые им не нужны, что увеличивает сложность и хрупкость системы.

Проблема "толстого" интерфейса

Представьте интерфейс для устройства, которое может печатать, сканировать и отправлять факсы. Если создать один интерфейс IMultifunctionDevice со всеми этими методами, то простой принтер будет вынужден реализовывать методы сканирования и отправки факса, даже если он их не поддерживает. Это нарушает ISP и приводит к пустым реализациям или выбрасыванию исключений.

Решение через разделение

Вместо этого следует разделить интерфейс на несколько узкоспециализированных:

// Плохо: один "толстый" интерфейс
interface IMultifunctionDevice {
    void Print(Document d);
    void Scan(Document d);
    void Fax(Document d);
}

// Хорошо: несколько специфичных интерфейсов
interface IPrinter {
    void Print(Document d);
}

interface IScanner {
    void Scan(Document d);
}

interface IFax {
    void Fax(Document d);
}

// Класс может реализовывать только нужные интерфейсы
class SimplePrinter : IPrinter {
    public void Print(Document d) { /* реализация печати */ }
}

class MultifunctionMachine : IPrinter, IScanner, IFax {
    // реализация всех методов
}

Где применяется ISP?

Этот принцип широко используется при проектировании библиотек, API и микросервисов. Например, в веб-разработке можно создавать отдельные интерфейсы для чтения и записи данных (CQRS), в Java — разделять интерфейсы коллекций (Iterable, Collection, List), а в микросервисной архитектуре — дробить большие контракты на мелкие, чтобы сервисы зависели только от необходимых операций.

Вывод: Применяйте Interface Segregation Principle, когда хотите уменьшить связность между компонентами, упростить тестирование и сделать систему более гибкой к изменениям. Особенно он полезен при разработке библиотек, где клиенты могут выбирать только нужную функциональность.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Java

    Java

  • C#

    C#

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

#Interface Segregation Principle

#SOLID

#software design

#interface

#dependency

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию