PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Что такое принцип открытости/закрытости (Open-Closed Principle)

Продвинутые темы

Принцип открытости/закрытости (Open-Closed Principle, OCP) — это принцип SOLID: программные сущности должны быть открыты для расширения, но закрыты для модификации.

Что означает

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

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

function area(shape) {
  if (shape.type === 'circle') return Math.PI * shape.r ** 2;
  if (shape.type === 'square') return shape.s ** 2;
  // новый тип → правим эту функцию (нарушение OCP)
}

Соблюдение через полиморфизм

class Circle { area() { return Math.PI * this.r ** 2; } }
class Square { area() { return this.s ** 2; } }
// новый тип — новый класс, existing код не трогаем
shapes.forEach((s) => s.area());

Новую фигуру добавляют новым классом, не меняя цикл.

Как достигается

  • Полиморфизм, наследование, интерфейсы.
  • Абстракции и стратегии вместо if/switch по типам.
  • Плагины, хуки, конфигурация.

Зачем

  • Меньше риск регрессий (старый код не трогают).
  • Легче расширять и поддерживать.

Коротко для собеседования

OCP (Open-Closed Principle) из SOLID: сущности открыты для расширения, закрыты для модификации — новую функциональность добавляют расширением (новый класс/стратегия), не меняя существующий код. Достигается полиморфизмом и абстракциями вместо if/switch по типам. Снижает риск регрессий.

Другие вопросы раздела