Принцип подстановки Барбары Лисков
Принцип подстановки Барбары Лисков () в объектно-ориентированном программировании является специфичным определением "подтипа", предложенным Барбарой Лисков в 1987 году на конференции в основном докладе под названием "Абстракция данных и иерархия"

В последующей статье Лисков кратко сформулировала свой принцип следующим образом:

: "Пусть formula_1 является свойством, верным относительно объектов formula_2 некоторого типа formula_3. Тогда formula_4 также должно быть верным для объектов formula_5 типа formula_6, где formula_6 является подтипом типа formula_3."

Роберт С. Мартин определил этот принцип так:

: "Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом."

Таким образом, идея Лисков о «подтипе» даёт определение понятия замещения — если S является подтипом T, тогда объекты типа T в программе могут быть замещены объектами типа S без каких-либо изменений желательных свойств этой программы (например, корректность).

Этот принцип является "важнейшим" критерием для оценки качества принимаемых решений при построении иерархий наследования. Сформулировать его можно в виде простого правила: тип S будет подтипом Т "тогда и только тогда", когда каждому объекту oS типа S соответствует некий объект oT типа T таким образом, что для всех программ P, реализованных в терминах T, поведение P не будет меняться, если oT заменить на oS.

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

Саттер и Александреску в своём руководстве по использованию C++ для выражения этого принципа также используют фразу «подкласс не должен требовать от вызывающего кода больше, чем базовый класс, и не должен предоставлять вызывающему коду меньше, чем базовый класс». По мнению данных авторов, публичное наследование в C++ можно употреблять только тогда, когда оно удовлетворяет принципу Лисков. Приватное наследование, по их же мнению, дозволено использовать для доступа к protected части базы и перекрытия виртуальных методов. В любом же ином случае, то есть для всего лишь повторного использования кода из базы, наследование применять нельзя.

Основания: использование публичного наследования для повторного использования кода приводит к тому, что внешний мир начинает считать класс Derived разновидностью класса Base, и возможно появление кода, явно использующего этот факт. Это сильно сужает простор для манёвра архитектора в дальнейшем поддержании и рефакторинге класса Derived.
Q79872
объектно-ориентированном программировании
Concept
Q16080922
Барбарой Лисков
PER
корректность
UNK
Q1500644
виртуальных методов
UNK
Q116877
рефакторинг
Concept
Q957386
Принцип подстановки Барбары Лисков
Concept
1987-01-01T00:00:00Z^^http://www.w3.org/2001/XMLSchema#dateTime
в 1987
DATE
+1^^http://www.w3.org/2001/XMLSchema#decimal
1
NUMBER
+2^^http://www.w3.org/2001/XMLSchema#decimal
2
NUMBER
+3^^http://www.w3.org/2001/XMLSchema#decimal
3
NUMBER
+4^^http://www.w3.org/2001/XMLSchema#decimal
4
NUMBER
+5^^http://www.w3.org/2001/XMLSchema#decimal
5
NUMBER
+6^^http://www.w3.org/2001/XMLSchema#decimal
6
NUMBER
+6^^http://www.w3.org/2001/XMLSchema#decimal
6
NUMBER
+3^^http://www.w3.org/2001/XMLSchema#decimal
3
NUMBER
named after