Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

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

Бертран Мейер обычно приписывают за то, что возник термин открытого закрытого принципа , [2] , который появился в его книге 1988 года объектно - ориентированного программного обеспечения строительства .

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

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

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

Полиморфный принцип открытого – закрытого [ править ]

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

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

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

См. Также [ править ]

  • ТВЕРДЫЙ - буква «О» в «ТВЕРДЫМ» представляет принцип «открыто-закрыто».

Ссылки [ править ]

  1. ^ Мейер, Бертран (1988). Построение объектно-ориентированного программного обеспечения . Прентис Холл. ISBN 0-13-629049-3. CS1 maint: обескураженный параметр ( ссылка )
  2. ^ a b Роберт К. Мартин "Принцип открытости-закрытости", отчет C ++ , январь 1996 г. Архивировано 22 августа 2006 г., в Wayback Machine.
  3. ^ Мейер, Бертран (1988). Построение объектно-ориентированного программного обеспечения . Нью-Йорк: Прентис-Холл. п. 23. ISBN 0136290493.
  4. ^ Мейер, Бертран (1988). Построение объектно-ориентированного программного обеспечения . Нью-Йорк: Прентис-Холл. п. 229. ISBN 0136290493.
  5. ^ Крейг Ларман, «Защищенная вариация: важность закрытости», IEEE Software, май / июнь 2001 г., стр. 89-91 [1]

Внешние ссылки [ править ]

  • Принципы OOD
  • Принцип открытости / закрытости: опасения по поводу изменений в дизайне программного обеспечения
  • Принцип открытого и закрытого
  • Принцип открытого-закрытого - и что за ним скрывается