Liskov substitution principle

From CSSEMediaWiki
(Difference between revisions)
Jump to: navigation, search
(New page: The Liskov substitution principle (LSP) is a particular definition of subtype that was introduced by Barbara Liskov, in 1987. Succinctly, it states :''Let q(x) be a property provable abou...)
 
m
Line 3: Line 3:
 
:''Let q(x) be a property provable about objects x of type T. Then q(y) should be true for objects y of type S where S is a subtype of T.''
 
:''Let q(x) be a property provable about objects x of type T. Then q(y) should be true for objects y of type S where S is a subtype of T.''
  
In English, this means that if S is a subclass of T, then any objects of type T in a program can be replaced by object of type S, without changing the correctness of the system. Basically, subclasses should behave exactly like super classes, except with a little '''extra''' functionality, but no less.
+
In English, this means that if S is a subclass of T, then any objects of type T in a program can be replaced by object of type S, without changing the correctness of the system. Basically, subclasses should behave exactly like base classes, except with a little '''extra''' functionality, but no less.
  
 
This is closely related to [[Design by contract]], which states that
 
This is closely related to [[Design by contract]], which states that

Revision as of 02:25, 24 September 2008

The Liskov substitution principle (LSP) is a particular definition of subtype that was introduced by Barbara Liskov, in 1987. Succinctly, it states

Let q(x) be a property provable about objects x of type T. Then q(y) should be true for objects y of type S where S is a subtype of T.

In English, this means that if S is a subclass of T, then any objects of type T in a program can be replaced by object of type S, without changing the correctness of the system. Basically, subclasses should behave exactly like base classes, except with a little extra functionality, but no less.

This is closely related to Design by contract, which states that

  • Preconditions cannot be strengthened in a subclass.
  • Postconditions cannot be weakened in a subclass.

A violation of this principle will occur when a class uses a reference to a base class, but has some knowledge of the subclass(s).

See Also

Personal tools