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


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

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

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

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

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

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


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