Описание тега liskov-substitution-principle

По вопросам о принципе подстановки Лискова (LSP) в объектно-ориентированном дизайне, разработанном Барбарой Лисков и собранном Робертом К. Мартином как один из принципов SOLID.

Барбара Лисков представила принцип подстановки Лискова в 1987 году как принцип объектно-ориентированного программирования. В нем говорится, что программа должна иметь возможность заменять экземпляр типа экземпляром подтипа, не влияя на какие-либо желаемые свойства программы. LSP описывает семантическое, а не просто синтаксическое отношение, потому что он определяет поведенческие подтипы, превышающие функциональную корректность.

Здесь требуется что-то вроде следующего свойства подстановки: Если для каждого объекта o1 типа S есть объект o2 типа T такое, что для всех программ P определяется с точки зрения T, поведение P не меняется, когда o1 заменяется на o2 тогда S это подтип T.

Например, предположим, что у нас есть класс Animal с методом walk(), и подкласс Dog наследует walk(). В следующем фрагменте кода во время выполненияx не известно.

Animal x;
x = AnimalFactory.createAnimal(some_parameter);
x.walk();

Хотя Dog.walk() может отменять Animal.walk(), и имеют более конкретную реализацию, не должно влиять на поведение программы, x это пример Animal или экземпляр Dog.

Роберт Мартин включил LSP как третий из своих твердых принципов и приравнял его к проектированию по контракту.

Между LSP и концепцией "Дизайн по контракту", изложенной Бертраном Мейером, существует тесная связь. Используя эту схему, методы классов объявляют предусловия и постусловия. Предварительные условия должны быть истинными для выполнения метода. По завершении метод гарантирует, что постусловие будет истинным.

См. Статью LSP в разделе " Принципы OOD".