stringtranslate.com

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

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

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

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

Символично:

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

Принцип

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

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

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

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

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

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

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

Ссылки

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

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

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

Общая ссылка

Внешние ссылки