Что такое принцип открытости/закрытости (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 по типам. Снижает риск регрессий.