Liskovsches Substitutionsprinzip: Unterschied zwischen den Versionen
Kowa (Diskussion | Beiträge) |
Kowa (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
=Definition (von Liskov, 1988)<ref>Barbara Liskov: “Keynote address - data abstraction and hierarchy”, [http://portal.acm.org/citation.cfm?id=62141 Proceeding OOPSLA '87 and ACM SIGPLAN Notices, Volume 23 Issue 5, May 1988]</ref>= | {{Qualität | ||
|correctness = 4 | |||
|extent = 2 | |||
|numberOfReferences = 3 | |||
|qualityOfReferences = 4 | |||
|conformance = 4 | |||
}} | |||
==Definition (von Liskov, 1988)<ref>Barbara Liskov: “Keynote address - data abstraction and hierarchy”, [http://portal.acm.org/citation.cfm?id=62141 Proceeding OOPSLA '87 and ACM SIGPLAN Notices, Volume 23 Issue 5, May 1988]</ref>== | |||
What is wanted here is something like the following substitution property [6]: If for each object o1 of type S there | What is wanted here is something like the following substitution property [6]: 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 | 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. | unchanged when o1 is substituted for o2, then S is a subtype of T. | ||
Übersetzung (von W. Kowarschick):<br/> | '''Übersetzung (von W. Kowarschick)''':<br/> | ||
Was hier benötigt wird, ist etwas wie die folgende Ersetzungseigenschaft [6]: Wenn es für jedes Objekt o1 vom Typ S ein Objekt o2 vom Typ T gibt, so dass für alle Programme, die auf Termen der Art T basieren, sich das Verhalten von P nicht ändert, wenn o2 durch o1 ersetzt wird, dann ist S ein Subtyp von T. | Was hier benötigt wird, ist etwas wie die folgende Ersetzungseigenschaft [6]: Wenn es für jedes Objekt o1 vom Typ S ein Objekt o2 vom Typ T gibt, so dass für alle Programme, die auf Termen der Art T basieren, sich das Verhalten von P nicht ändert, wenn o2 durch o1 ersetzt wird, dann ist S ein Subtyp von T. | ||
'''Anmerkung''':<br/> | |||
Die Quelle [6], auf die Barbara Liskov bei dieser Definition verweist, steht für die Dissertation von G. Leavens „Subtyping and Generic Invocation: Semantics and Language Design“<ref>Leavens, G. „Subtyping and Generic Invocation: Semantics and Language Design“, Ph.D: Th., Massachusetts Institute of Technology, Department of Electrical Engineering and Computer Science</ref>, die zum Zeitpunkt der OOPSLA '87 noch nicht fertiggestellt war. | Die Quelle [6], auf die Barbara Liskov bei dieser Definition verweist, steht für die Dissertation von G. Leavens „Subtyping and Generic Invocation: Semantics and Language Design“<ref>Leavens, G. „Subtyping and Generic Invocation: Semantics and Language Design“, Ph.D: Th., Massachusetts Institute of Technology, Department of Electrical Engineering and Computer Science</ref>, die zum Zeitpunkt der OOPSLA '87 noch nicht fertiggestellt war. | ||
=Definition (von Liskov und Wing, 1994)<ref>Barbara H. Liskov, Jeannette M. Wing: “A Behavioral Notion of Subtyping”, [http://portal.acm.org/citation.cfm?id=197383 ACM Transactions on Programming Languages and Systems (TOPLAS), Vol. 16, No. 6, November 1994, Pages 1811-1841]</ref>= | ==Definition (von Liskov und Wing, 1994)<ref>Barbara H. Liskov, Jeannette M. Wing: “A Behavioral Notion of Subtyping”, [http://portal.acm.org/citation.cfm?id=197383 ACM Transactions on Programming Languages and Systems (TOPLAS), Vol. 16, No. 6, November 1994, Pages 1811-1841]</ref>== | ||
Subtype Requirement: Let Φ(x) be a property provable about objects x | Subtype Requirement: Let Φ(x) be a property provable about objects x | ||
of type T. Then Φ(y) should be true for objects y of type S where S is | of type T. Then Φ(y) should be true for objects y of type S where S is | ||
a subtype of T. | a subtype of T. | ||
Übersetzung (von W. Kowarschick):<br/> | '''Übersetzung (von W. Kowarschick)''':<br/> | ||
Subtyp-Bedingung: Es sei Φ(x) eine Eigenschaft, die für Objekte x vom Typ T beweisbar ist. Dann soll Φ(x) [ebenfalls] für Objekte y von Type S gelten, | Subtyp-Bedingung: Es sei Φ(x) eine Eigenschaft, die für Objekte x vom Typ T beweisbar ist. Dann soll Φ(x) [ebenfalls] für Objekte y von Type S gelten, | ||
wobei S ein Subtyp von T ist. | wobei S ein Subtyp von T ist. | ||
=Definition (von W. Kowarschick)<ref>[[Kowarschick, W.: Multimedia-Programmierung]]</ref>= | ==Definition (von W. Kowarschick)<ref>[[Kowarschick, W.: Multimedia-Programmierung]]</ref>== | ||
Eine [[Methode]] sollte nicht so überschrieben werden, dass sich ein Objekt einer [[Abgeleitete Klasse|abgeleiteten Klasse]] überraschend anders verhält, als man es aufgrund der Definition der Basisklasse erwarten würde. Mit anderen Worten: Methoden, die in abgeleiteten Klassen neu definiert werden, müssen alle [[Integritätsbedingung]]en (d.h. die Spezifikation) der Basisklasse beachten. | Eine [[Methode]] sollte nicht so überschrieben werden, dass sich ein Objekt einer [[Abgeleitete Klasse|abgeleiteten Klasse]] überraschend anders verhält, als man es aufgrund der Definition der Basisklasse erwarten würde. Mit anderen Worten: Methoden, die in abgeleiteten Klassen neu definiert werden, müssen alle [[Integritätsbedingung]]en (d.h. die Spezifikation) der Basisklasse beachten. | ||
=Quellen= | ==Quellen== | ||
<references/> | <references/> | ||
=Siehe auch= | ==Siehe auch== | ||
*[[Programmierprinzipien#Liskovsches_Substitutionsprinzip.5B2.5D.2C_LSP.2C_Ersetzbarkeitsprinzip.2C_Liskov_substitution_principle.5B3.5D|Programmierprinzipien]] | *[[Programmierprinzipien#Liskovsches_Substitutionsprinzip.5B2.5D.2C_LSP.2C_Ersetzbarkeitsprinzip.2C_Liskov_substitution_principle.5B3.5D|Programmierprinzipien]] | ||
[[Kategorie:Programmierprinzip]] | |||
[[Kategorie: | [[Kategorie:HowTo]] | ||
Aktuelle Version vom 3. August 2019, 14:34 Uhr
Dieser Artikel erfüllt die GlossarWiki-Qualitätsanforderungen nur teilweise:
Korrektheit: 4 (großteils überprüft) |
Umfang: 2 (wichtige Fakten fehlen) |
Quellenangaben: 3 (wichtige Quellen vorhanden) |
Quellenarten: 4 (sehr gut) |
Konformität: 4 (sehr gut) |
Definition (von Liskov, 1988)[1]
What is wanted here is something like the following substitution property [6]: 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.
Übersetzung (von W. Kowarschick):
Was hier benötigt wird, ist etwas wie die folgende Ersetzungseigenschaft [6]: Wenn es für jedes Objekt o1 vom Typ S ein Objekt o2 vom Typ T gibt, so dass für alle Programme, die auf Termen der Art T basieren, sich das Verhalten von P nicht ändert, wenn o2 durch o1 ersetzt wird, dann ist S ein Subtyp von T.
Anmerkung:
Die Quelle [6], auf die Barbara Liskov bei dieser Definition verweist, steht für die Dissertation von G. Leavens „Subtyping and Generic Invocation: Semantics and Language Design“[2], die zum Zeitpunkt der OOPSLA '87 noch nicht fertiggestellt war.
Definition (von Liskov und Wing, 1994)[3]
Subtype Requirement: Let Φ(x) be a property provable about objects x of type T. Then Φ(y) should be true for objects y of type S where S is a subtype of T.
Übersetzung (von W. Kowarschick):
Subtyp-Bedingung: Es sei Φ(x) eine Eigenschaft, die für Objekte x vom Typ T beweisbar ist. Dann soll Φ(x) [ebenfalls] für Objekte y von Type S gelten,
wobei S ein Subtyp von T ist.
Definition (von W. Kowarschick)[4]
Eine Methode sollte nicht so überschrieben werden, dass sich ein Objekt einer abgeleiteten Klasse überraschend anders verhält, als man es aufgrund der Definition der Basisklasse erwarten würde. Mit anderen Worten: Methoden, die in abgeleiteten Klassen neu definiert werden, müssen alle Integritätsbedingungen (d.h. die Spezifikation) der Basisklasse beachten.
Quellen
- ↑ Barbara Liskov: “Keynote address - data abstraction and hierarchy”, Proceeding OOPSLA '87 and ACM SIGPLAN Notices, Volume 23 Issue 5, May 1988
- ↑ Leavens, G. „Subtyping and Generic Invocation: Semantics and Language Design“, Ph.D: Th., Massachusetts Institute of Technology, Department of Electrical Engineering and Computer Science
- ↑ Barbara H. Liskov, Jeannette M. Wing: “A Behavioral Notion of Subtyping”, ACM Transactions on Programming Languages and Systems (TOPLAS), Vol. 16, No. 6, November 1994, Pages 1811-1841
- ↑ Kowarschick, W.: Multimedia-Programmierung