stringtranslate.com

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

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

В объектно-ориентированном программировании принцип открытости–закрытости (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.

Внешние ссылки