Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: Open Closed Principle, SOLID, OOP, software design, extensibility

Что такое принцип открытости/закрытости (O в SOLID)?

Вопрос проверяет понимание принципа открытости/закрытости (Open/Closed Principle) из SOLID, который является фундаментальным для создания гибкого и расширяемого кода.

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

Принцип открытости/закрытости (OCP) гласит, что классы должны быть открыты для расширения, но закрыты для модификации. Это означает, что вы можете добавлять новую функциональность, не изменяя существующий код. Достигается это через наследование, полиморфизм и абстракции. Например, вместо изменения класса для поддержки новых типов, вы создаете подклассы или используете интерфейсы.

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

Что такое принцип открытости/закрытости?

Принцип открытости/закрытости (Open/Closed Principle, OCP) — это второй принцип SOLID, сформулированный Бертраном Мейером. Он утверждает, что программные сущности (классы, модули, функции) должны быть открыты для расширения, но закрыты для модификации. Другими словами, вы должны иметь возможность добавлять новое поведение, не изменяя уже существующий, протестированный код.

Как это работает на практике?

Основная идея — использовать абстракции (интерфейсы или абстрактные классы) для определения контракта, а затем реализовывать конкретные варианты поведения. Это позволяет добавлять новые реализации без изменения кода, который зависит от абстракции.

Рассмотрим пример на JavaScript. Допустим, у нас есть класс для расчета площади фигур:

class AreaCalculator {
  calculate(shape) {
    if (shape.type === 'circle') {
      return Math.PI * shape.radius ** 2;
    } else if (shape.type === 'rectangle') {
      return shape.width * shape.height;
    }
  }
}

Этот код нарушает OCP, потому что для добавления новой фигуры (например, треугольника) нам придется изменить метод calculate. Вместо этого мы можем сделать так:

class Shape {
  area() {
    throw new Error('Method not implemented');
  }
}

class Circle extends Shape {
  constructor(radius) {
    super();
    this.radius = radius;
  }
  area() {
    return Math.PI * this.radius ** 2;
  }
}

class Rectangle extends Shape {
  constructor(width, height) {
    super();
    this.width = width;
    this.height = height;
  }
  area() {
    return this.width * this.height;
  }
}

class AreaCalculator {
  calculate(shape) {
    return shape.area();
  }
}

Теперь для добавления треугольника мы просто создаем новый класс Triangle extends Shape с методом area(), и AreaCalculator не требует изменений.

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

OCP широко используется в паттернах проектирования, таких как Стратегия, Декоратор, Шаблонный метод. Он особенно полезен в больших проектах, где часто добавляются новые функции, и важно минимизировать риск поломки существующего кода.

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

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

#Open Closed Principle

#SOLID

#OOP

#software design

#extensibility

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

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

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