Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: SOLID, Interface Segregation, ISP, interface, abstraction, cohesion

Что такое принцип разделения интерфейсов (I в SOLID)?

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

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

Принцип разделения интерфейсов (ISP) гласит, что клиенты не должны зависеть от интерфейсов, которые они не используют. Лучше иметь несколько специализированных интерфейсов, чем один общий. Это уменьшает связанность кода и упрощает его поддержку. Например, вместо одного интерфейса Printer с методами print, scan и fax, лучше создать отдельные интерфейсы для каждой функции.

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

Что такое принцип разделения интерфейсов?

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

Почему это важно?

Когда интерфейс содержит слишком много методов, классы, которые его реализуют, вынуждены определять даже те методы, которые им не нужны. Это приводит к следующим проблемам:

  • Увеличивается связанность кода — изменения в интерфейсе затрагивают все классы-реализаторы.
  • Нарушается инкапсуляция — клиенты получают доступ к функциональности, которая им не требуется.
  • Снижается читаемость и поддерживаемость кода.

Пример нарушения ISP

Представьте интерфейс для многофункционального устройства:

interface MultiFunctionPrinter {
    void print(Document d);
    void scan(Document d);
    void fax(Document d);
}

Если класс SimplePrinter реализует этот интерфейс, ему придется реализовать методы scan и fax, которые не имеют смысла для простого принтера. Это нарушает ISP.

Правильное применение ISP

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

interface Printer {
    void print(Document d);
}
interface Scanner {
    void scan(Document d);
}
interface Fax {
    void fax(Document d);
}

Теперь класс SimplePrinter реализует только интерфейс Printer, а класс MultiFunctionPrinter может реализовать все три интерфейса. Это делает систему более гибкой и легкой для расширения.

Вывод

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • TypeScript

    TypeScript

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

#SOLID

#Interface Segregation

#ISP

#interface

#abstraction

#cohesion

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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