Описание тега open-closed-principle

На вопросы о принципе открытости-закрытости объектно-ориентированного проектирования, предложенном Бертраном Мейером в его книге "Конструирование объектно-ориентированного программного обеспечения". В нем говорится, что "модули должны быть как открытыми, так и закрытыми". (2-е издание, стр. 57)

Бертран Мейер впервые опубликовал принцип открытости-закрытости в издании своей книги 1988 года: Построение объектно-ориентированного программного обеспечения. Позже он усовершенствовал его во втором издании 1997 года. Роберт Мартин также принял этот принцип как второй из своих твердых принципов.

По словам Мейера (2-е издание, стр. 57)

Противоречие между двумя терминами очевидно только потому, что они соответствуют целям разного характера:

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

Решением Мейера этого противоречия стало наследование: расширение модуля без его модификации. Решение Мартина для OCP - это архитектура плагинов: инвертирование всех зависимостей так, чтобы они указывали на систему, а не от нее.