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