Принцип подстановки Барбары Лисков (Liskov Substitution Principle, LSP)
- Пусть
q(x)
является свойством, верным относительно объектовx
некоторого типаT
. Тогдаq(y)
также должно быть верным для объектовy
типаS
, гдеS
является подтипом типаT
.
или
- Наследующий класс должен дополнять, а не замещать поведение базового класса.
или
- Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом.
Замещения - если S
является подтипом T
, тогда объекты типа T
в программе могут быть замещены объектами типа S
без каких-либо изменений желательных свойств этой программы.
Более простыми словами можно сказать, что поведение наследуемых классов не должно противоречить поведению, заданному базовым классом, то есть поведение наследуемых классов должно быть ожидаемым для кода, использующего переменную базового типа.
«Подкласс не должен требовать от вызывающего кода больше, чем базовый класс, и не должен предоставлять вызывающему коду меньше, чем базовый класс» (Саттер и Александреску)