Jump to content

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

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

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

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

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

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

[ редактировать ]

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

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

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

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

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

[ редактировать ]

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

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

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

См. также

[ редактировать ]
  1. ^ Jump up to: а б с Мейер, Бертран (1988). Объектно-ориентированное построение программного обеспечения . Прентис Холл. ISBN  0-13-629049-3 .
  2. ^ Jump up to: а б Роберт К. Мартин «Принцип открытости-закрытости», отчет C ++ , январь 1996 г. Архивировано 22 августа 2006 г. в Wayback Machine.
  3. ^ Ларман, Крейг (май – июнь 2001 г.). «Защищенный вариант: важность закрытости» (PDF) . Программное обеспечение IEEE . 18 (2). ИИЭР: 89–91. дои : 10.1109/52.922731 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2e0d5488325ce23444c2c49d1bf276cd__1716446340
URL1:https://arc.ask3.ru/arc/aa/2e/cd/2e0d5488325ce23444c2c49d1bf276cd.html
Заголовок, (Title) документа по адресу, URL1:
Open–closed principle - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)