Принцип открытости-закрытости

Концепция объектно-ориентированного программирования
Портрет Бертрана Мейера
Принцип открытости-закрытости был введен Бертраном Мейером .

В объектно-ориентированном программировании принцип открытости–закрытости (OCP) гласит: « сущности программного обеспечения (классы, модули, функции и т. д.) должны быть открыты для расширения, но закрыты для модификации » [1] ; то есть такая сущность может позволить расширять свое поведение без изменения ее исходного кода .

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

Принцип открытости-закрытости является одним из пяти принципов SOLID объектно-ориентированного проектирования.

Принцип открытости-закрытости Мейера

Бертрану Мейеру обычно приписывают создание термина « принцип открытости–закрытости» [ 2] , который появился в его книге 1988 года «Конструирование объектно-ориентированного программного обеспечения » [1] : 23 

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

В то время, когда Мейер писал, добавление полей или функций в библиотеку неизбежно требовало внесения изменений в любые программы, зависящие от этой библиотеки. [ требуется ссылка ] Предложенное Мейером решение этой проблемы основывалось на идее объектно-ориентированного наследования (в частности, наследования реализации ): [1] : 229 

Класс закрыт, так как он может быть скомпилирован, сохранен в библиотеке, базирован и использован клиентскими классами. Но он также открыт, так как любой новый класс может использовать его как родительский, добавляя новые возможности. Когда определяется класс-потомок, нет необходимости изменять исходный или беспокоить его клиентов.

Полиморфный принцип открытости-закрытости

В 1990-х годах принцип открытости-закрытости стал широко использоваться для обозначения использования абстрактных интерфейсов, где реализации могут быть изменены, а также могут быть созданы и полиморфно заменены друг другом несколько реализаций.

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

Статья Роберта К. Мартина 1996 года «Принцип открытости-закрытости» [2] была одним из основополагающих трудов, в которых использовался этот подход. В 2001 году Крейг Ларман связал принцип открытости-закрытости с моделью Алистера Кокберна под названием «Защищенные вариации » и с обсуждением Дэвида Парнаса сокрытия информации . [3]

Смотрите также

Ссылки

  1. ^ abc Мейер, Бертран (1988). Объектно-ориентированное построение программного обеспечения . Prentice Hall. ISBN 0-13-629049-3.
  2. ^ Роберт С. Мартин "Принцип открытости-закрытости", C++ Report, январь 1996 г. Архивировано 22 августа 2006 г. на Wayback Machine
  3. ^ Ларман, Крейг (май–июнь 2001 г.). «Защищенная вариация: важность закрытости» (PDF) . Программное обеспечение IEEE . 18 (2). IEEE: 89–91. doi :10.1109/52.922731.
  • Принципы ООД
  • Принцип открытости/закрытости: опасения по поводу изменений в дизайне программного обеспечения
  • Принцип открытости-закрытости и что за ним скрывается
Взято с "https://en.wikipedia.org/w/index.php?title=Открыто–закрыто_принцип&oldid=1225257299"