Принцип открыт-закрыт - Open–closed principle

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

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

Принцип открытости-закрытости - один из пяти ТВЕРДЫЙ принципы объектно-ориентированного дизайна.

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

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

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

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

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

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

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

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

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

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

  • ТВЕРДЫЙ - "O" в "SOLID" представляет принцип открыт – закрыт.

Рекомендации

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

внешняя ссылка