Das Liskov-Substitutions-Prinzip
Um den Begriff „Untertyp“ festzulegen, wird oft das Liskov-Substitutions-Prinzip (LSP ) verwendet.
Das Liskov-Substitutions-Prinzip
“If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T .”
Barbara Liskov, “Data Abstraction and Hierarchy,” SIGPLAN Notices, 23,5 (May, 1988).
Die Formulierung von Liskov lautet auf deutsch also:
„Wenn es für jedes Objekt u vom Typ U ein Objekt o vom Typ O gibt, so daß für alle Programme p, die in Operationen des O definiert wurden, das Verhalten von p unverändert bleibt, wenn o durch u ersetzt wird, dann ist der Typ U ein Untertyp des Typs O.“
Mit Quantoren läßt sich dies auch folgendermaßen schreiben
∀(u∈U) ∃(o∈O) ∀(p∈P) p(o)=p(u)
Wenn man definiert o∼u :⇔ ∀(p∈P) p(o)=p(u), kann man dies folgendermaßen schreiben:
∀(u∈U) ∃(o∈O) o∼u
Wenn „o∼u“ so definiert ist, dann sagen wir „o entspricht u“ und meinen damit, daß o von u ununterscheidbar ist (solange nur Programme verwendet werden, die nur den Typ o kennen). Nun läßt sich LSP einfacher so formulieren: Zu jedem Unterklassenobjekt gibt es ein entsprechendes Oberklassenobjekt.
LSP
.----------------------.
| |
| Alle in Operationen |
| des Obertyps |
| definierten |
| Programme |
| |
'----------------------'
|
|
| definiert in
| Eintraegen von
| V
|
.----------------------. .----------------------.
| | | |
| Obertyp |<- - - - -| o : Obertyp |
| | | ----------- |
'----------------------' '----------------------'
^ |
/_\ |
| V existiert für jedes | kann ersetzt werden durch V
| |
| |
.----------------------. .----------------------.
| | | |
| Untertyp |<- - - - -| u : Untertyp |
| | | ------------ |
'----------------------' '----------------------'
Das LSP wird als genauere Formulierung der Beziehung „ist-ein“ herangezogen, die zwischen Objekten einer Unterklasse und Objekten einer Oberklasse bestehen soll.
Zitat mit Kontext und weiteren Quellenangaben
- Ein Werk von Barbara Liskov von 1987, das vermutlich die Quelle des als „Liskov-Substitutions-Prinzip“ bekannten Prinzip ist, ist:
- http://citeseer.ist.psu.edu/557944.html
- Ein späteres Werk von Frau Liskov zum selben Thema ist
- http://www.cs.cmu.edu/~wing/publications/LiskovWing94.pdf
- http://citeseer.ist.psu.edu/liskov94behavioral.html
Nach dem erstgenannte Werk könnte die Formulierung auf Leavens zurückgehen. Die Quelle [6.] war zum damaligen Zeitpunkt erst geplant („forthcoming “). Es handelt sich um das MIT/LCS/TR-439:
Gary T. Leavens, Verifying Object-Oriented Programs that use Subtypes. Massachusetts Institute of Technology, Laboratory for Computer Science, Technical Report TR-439, February 1989.
Dieses Werk wird auch in dem Text von 1994 und in der folgenden Seite erwähnt.
Demnach soll es inhaltlich ähnlich zu den folgenden beiden Quellen sein