Jump to content

Принцип замены Лискова

(Перенаправлено с Заменимости )
Портрет Барбары Лисковой
Замену Лискову представила Барбара Лисков , фото сделано в 2010 году.

Принцип замены Лискова ( LSP ) — это частное определение отношения подтипирования , называемое сильным поведенческим подтипированием , которое было первоначально представлено Барбарой Лисков докладе на конференции 1987 года в программном под названием «Абстракция данных и иерархия» . Он основан на концепции «заменяемости» — принципе объектно-ориентированного программирования, гласящем, что объект (например, класс ) может быть заменен подобъектом (например, классом, расширяющим первый класс), не нарушая при этом программа. Это семантическое, а не просто синтаксическое отношение, поскольку оно призвано гарантировать семантическую совместимость типов в иерархии, в частности типов объектов. Барбара Лисков и Жаннетт Винг кратко описали этот принцип в статье 1994 года следующим образом: [1]

Требование подтипа : Пусть быть доказуемым свойством объектов типа Т. ​Тогда должно быть верно для объектов типа S , где S — подтип T .

Символически:

То есть, если S подтипирует T, то, что справедливо для T-объектов, справедливо и для S-объектов.В той же статье Лисков и Винг подробно изложили свое понятие поведенческого подтипирования в расширении логики Хоара , которое имеет определенное сходство с замыслом Бертрана Мейера по контракту в том, что оно рассматривает взаимодействие подтипирования с предусловиями , постусловиями и инвариантами .

Понятие Лискова о поведенческом подтипе определяет понятие взаимозаменяемости объектов; то есть, если S является подтипом T , то объекты типа T в программе могут быть заменены объектами типа S без изменения каких-либо желательных свойств этой программы (например, корректности ).

Поведенческое подтипирование — более сильное понятие, чем типичное подтипирование функций, определенных в теории типов , которая опирается только на контравариантность типов параметров и ковариацию возвращаемого типа. Поведенческое подтипирование в общем неразрешимо : если q является свойством «метод для x всегда завершается », то программа (например, компилятор) не может проверить, что оно справедливо для некоторого подтипа S из T , даже если q действительно выполняется. для Т. ​Тем не менее, этот принцип полезен при рассуждениях о построении иерархий классов.

Принцип замены Лискова налагает некоторые стандартные требования к сигнатурам , которые были приняты в новых объектно-ориентированных языках программирования (обычно на уровне классов, а не типов; см. в номинальных и структурных подтипах различия ):

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

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

  • Предусловия не могут быть усилены в подтипе.
  • Постусловия не могут быть ослаблены в подтипе.
  • Инварианты не могут быть ослаблены в подтипе.
  • Ограничение истории («правило истории»). Объекты считаются модифицируемыми только посредством их методов ( инкапсуляция ). Поскольку подтипы могут вводить методы, отсутствующие в супертипе, введение этих методов может допускать изменения состояния в подтипе, которые недопустимы в супертипе. Ограничение истории запрещает это. Это был новый элемент, введенный Лисковым и Вингом. Нарушение этого ограничения можно продемонстрировать, определив изменяемую точку как подтип неизменяемой точки . Это нарушение ограничения истории, поскольку в истории неизменяемой точки состояние после создания всегда остается одним и тем же, поэтому оно не может включать историю изменяемой точки вообще. Однако поля, добавленные в подтип, можно безопасно изменять, поскольку они не наблюдаются с помощью методов супертипа. Таким образом, можно определить круг с неизменяемым центром и изменяемым радиусом как подтип неизменяемой точки, не нарушая ограничения истории.

Происхождение

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

Правила пред- и постусловий идентичны правилам, введенным Бертраном Мейером в его книге 1988 года « Объектно-ориентированное построение программного обеспечения» . И Мейер, и позже Пьер Америка, который первым использовал термин «поведенческое подтипирование» , дали теоретико-доказательные определения некоторых понятий поведенческого подтипирования, но их определения не учитывали псевдонимы , которые могут возникать в языках программирования, поддерживающих ссылки или указатели. . Учет псевдонимов был основным улучшением, сделанным Лисковым и Вингом (1994), а ключевым компонентом является ограничение истории. Согласно определениям Мейера и Америки, изменяемая точка будет поведенческим подтипом неизменяемой точки, тогда как принцип замены Лискова запрещает это.

См. также

[ редактировать ]
  1. ^ Лисков, Варвара; Винг, Жаннетт (1 ноября 1994 г.). «Поведенческое понятие подтипирования» . Транзакции ACM в языках и системах программирования . 16 (6): 1811–41. дои : 10.1145/197320.197383 . S2CID   999172 .

Библиография

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

Конкретные ссылки

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

Общая ссылка

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: e3f3aa1ae7a11fb7093fb103dff28daa__1720445100
URL1:https://arc.ask3.ru/arc/aa/e3/aa/e3f3aa1ae7a11fb7093fb103dff28daa.html
Заголовок, (Title) документа по адресу, URL1:
Liskov substitution principle - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)