principles:liskov_substitution_principle
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| principles:liskov_substitution_principle [2021-09-02 18:26] – old revision restored (2021-09-02 10:48) 65.21.179.175 | principles:liskov_substitution_principle [2021-10-18 21:50] (current) – +++ restored +++ christian | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Liskov Substitution Principle ====== | + | ====== Liskov Substitution Principle |
| ===== Variants and Alternative Names ===== | ===== Variants and Alternative Names ===== | ||
| Line 6: | Line 6: | ||
| ===== Context ===== | ===== Context ===== | ||
| /* fill in contexts here: */ | /* fill in contexts here: */ | ||
| - | * [[contexts: | + | * [[contexts: |
| + | * [[contexts: | ||
| ===== Principle Statement ===== | ===== Principle Statement ===== | ||
| + | |||
| + | > " | ||
| ===== Description ===== | ===== Description ===== | ||
| + | Object-oriented programming languages permit the derivation of subtypes from base types, and subtype polymorphism allows the passing of an object of a subtype where ever an object of the supertype is specified. Suppose '' | ||
| - | ===== Rationale ===== | + | The programming language does not enforce that the subtype behaves like the supertype. Method '' |
| + | |||
| + | |||
| + | ===== Rationale ===== | ||
| + | |||
| + | Let '' | ||
| ===== Strategies ===== | ===== Strategies ===== | ||
| * Only strengthen invariants in subclasses; never weaken them | * Only strengthen invariants in subclasses; never weaken them | ||
| - | * Only waken preconditions when overriding methods | + | * Only weaken |
| * Only strengthen postconditions when overriding methods | * Only strengthen postconditions when overriding methods | ||
| + | * Use Delegation instead of Inheritance | ||
| + | * Figure out better abstractions | ||
| + | |||
| + | ===== Caveats ===== | ||
| + | |||
| + | See section [[#contrary principles]]. | ||
| + | |||
| + | |||
| ===== Origin ===== | ===== Origin ===== | ||
| + | |||
| + | Barbara Liskov: // | ||
| ===== Evidence ===== | ===== Evidence ===== | ||
| /* Comment out what is not applicable and explain the rest: */ | /* Comment out what is not applicable and explain the rest: */ | ||
| - | /* | + | |
| - | * [[wiki: | + | /* * [[wiki: |
| - | * [[wiki: | + | |
| - | * [[wiki: | + | * [[wiki: |
| - | * [[wiki: | + | * [[wiki: |
| - | */ | + | |
| + | /* * [[wiki: | ||
| ===== Relations to Other Principles ===== | ===== Relations to Other Principles ===== | ||
| Line 47: | Line 67: | ||
| ==== Complementary Principles ==== | ==== Complementary Principles ==== | ||
| - | | + | * [[Model Principle]] (MP): MP demands inheritance relations to resemble an " |
| - | * [[Invariant Avoidance Principle]] FIXME | + | |
| - | | + | |
| * [[Principle of Separate Understandability]] (PSU): When building inheritance hierarchies, | * [[Principle of Separate Understandability]] (PSU): When building inheritance hierarchies, | ||
| Line 57: | Line 75: | ||
| {{page> | {{page> | ||
| - | ===== Example | + | |
| + | ===== Examples | ||
| ===== Description Status ===== | ===== Description Status ===== | ||
| /* Choose one of the following and comment out the rest: */ | /* Choose one of the following and comment out the rest: */ | ||
| - | [[wiki: | + | /*[[wiki: |
| - | /*[[wiki: | + | [[wiki: |
| / | / | ||
| + | |||
| ===== Further Reading ===== | ===== Further Reading ===== | ||
| - | * Robert C. Martin: //Agile Software Development, | + | * Robert C. Martin: //Agile Software Development, |
| * [[http:// | * [[http:// | ||
| + | * [[wiki> | ||
| + | * [[wp> | ||
| + | * Barbara H. Liskov , Jeanette M. Wing: // | ||
| + | * Barbara H. Liskov , Jeanette M. Wing: // | ||
| + | |||
| + | ===== Discussion ===== | ||
| + | |||
| + | Discuss this wiki article and the principle on the corresponding [[talk: | ||
| + | |||
principles/liskov_substitution_principle.1630599986.txt.gz · Last modified: by 65.21.179.175
