Substitutability is a principle in
object-oriented programming. It states that, in a
computer program, if S is a
subtype of T, then objects of
type T may be replaced with objects of type S (i.e., objects of type S may
substitute objects of type T) without altering any of the desirable properties of that program (correctness, task performed, etc.). More formally, the
Liskov substitution principle (
LSP) is a particular definition of a
subtyping relation, called
(strong) behavioral subtyping, that was initially introduced by
Barbara Liskov in a 1987 conference
keynote address entitled
Data abstraction and hierarchy. It is a
semantic rather than merely syntactic relation because it intends to guarantee semantic interoperability of
types in a hierarchy,
object types in particular.
Barbara Liskov and
Jeannette Wing formulated the principle succinctly in a 1994 paper as follows:
Subtype Requirement: Let be a property provable about objects of type . Then should be true for objects of type where is a subtype of .
In the same paper, Liskov and Wing detailed their notion of behavioral subtyping in an extension of
Hoare logic, which bears a certain resemblance with
Bertrand Meyer's
Design by Contract in that it considers the interaction of subtyping with
preconditions,
postconditions and
invariants.