Принцип подстановки Лискова

редактировать
Принцип объектно-ориентированного программирования

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

Требование к подтипу: Пусть ϕ (x) {\ displaystyle \ phi (x) }\ phi (x) быть доказуемым свойством для объектов x {\ displaystyle x}x типа T. Тогда ϕ (y) {\ displaystyle \ phi (y)}{\ displaystyle \ phi (y)} должно быть истинным для объектов y {\ displaystyle y}y типа S, где S является подтипом T.

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

Содержание
  • 1 Принцип
  • 2 Истоки
  • 3 Критика
  • 4 См. Также
  • 5 Ссылки
  • 6 Библиография
  • 7 Внешние ссылки
Принцип

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

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

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

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

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

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

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

Критика

Хотя широко используется, характеристика поведенческого подтипа как способности заменять объекты подтипа на объекты супертипа считается ошибочной. В нем не упоминаются спецификации, поэтому предлагается неправильное чтение, когда реализация супертипа сравнивается с реализацией подтипа. Это проблематично по нескольким причинам, одна из которых заключается в том, что он не поддерживает общий случай, когда супертип является абстрактным и не имеет реализации. Кроме того, более тонко, в контексте объектно-ориентированного императивного программирования трудно точно определить, что означает универсальная или экзистенциальная количественная оценка объектов данного типа или замена одного объекта другим. При применении подтипов обычно мы не заменяем объекты подтипа на объекты супертипа, мы просто используем объекты подтипа как объекты супертипа. То есть это те же объекты, объекты подтипа, которые также являются объектами супертипа.

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

См. Также
Ссылки
Библиография

Общие ссылки

Особые ссылки

Внешние ссылки
Последняя правка сделана 2021-05-27 11:15:36
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте