Ersatz-Grundsatz von Liskov

Substitutability ist ein Grundsatz in der objektorientierten Programmierung. Es stellt fest, dass, in einem Computerprogramm, wenn S ein Subtyp von T ist, dann können Gegenstände des Typs T durch Gegenstände des Typs S ersetzt werden (d. h. kann gegen Gegenstände des Typs S Gegenstände des Typs T ausgewechselt werden), ohne einigen der wünschenswerten Eigenschaften dieses Programms (Genauigkeit, Aufgabe durchgeführt, usw.) zu verändern. Mehr formell ist der Ersatz-Grundsatz von Liskov (LSP) eine besondere Definition einer subtippenden Beziehung, genannt (das starke) Verhaltenssubschreiben, das von Barbara Liskov in einer 1987-Konferenzgrundsatzrede genannt die Datenabstraktion und Hierarchie am Anfang eingeführt wurde. Es ist eine semantische aber nicht bloß syntaktische Beziehung, weil es vorhat, semantische Zwischenfunktionsfähigkeit von Typen in einer Hierarchie, Objektarten zu versichern insbesondere. Liskov und Jeannette Wing haben den Grundsatz kurz und bündig in einer 1994-Zeitung wie folgt formuliert:

:Let, ein über Gegenstände des Typs nachweisbares Eigentum sein. Dann sollte für Gegenstände des Typs nachweisbar sein, wo ein Subtyp dessen ist.

In derselben Zeitung haben Liskov und Flügel über ihren Begriff des Verhaltenssubschreibens in einer Erweiterung der Logik von Hoare ausführlich berichtet, die eine bestimmte Ähnlichkeit mit dem Design von Bertrand Meyer durch den Vertrag hat, in dem es die Wechselwirkung des Subschreibens mit prä- und Postbedingungen denkt.

Grundsatz

Der Begriff von Liskov eines Verhaltenssubtyps definiert einen Begriff von substitutability für veränderliche Gegenstände; d. h. wenn S ein Subtyp von T ist, dann können Gegenstände des Typs T in einem Programm durch Gegenstände des Typs S ersetzt werden, ohne einigen der wünschenswerten Eigenschaften dieses Programms (z.B, Genauigkeit) zu verändern.

Das Verhaltenssubschreiben ist ein stärkerer Begriff als das typische Subschreiben von Funktionen, die in der Typ-Theorie definiert sind, die sich nur auf die Kontravarianz von Argument-Typen und Kovarianz des Rücktyps verlässt. Das Verhaltenssubschreiben ist im Allgemeinen trivial unentscheidbar: Wenn q das Eigentum "Methode für x ist, immer endet" dann ist es für ein Programm (Bearbeiter) unmöglich nachzuprüfen, dass es für einen Subtyp S T für wahr hält, selbst wenn q wirklich für T hält. Der Grundsatz ist jedoch im Denken über das Design von Klassenhierarchien nützlich.

Der Grundsatz von Liskov erlegt einige Standardvoraussetzungen an Unterschriften auf, die auf neueren objektorientierten Programmiersprachen angenommen worden sind (gewöhnlich am Niveau von Klassen aber nicht Typen; sieh nominell gegen das Struktursubschreiben für die Unterscheidung):

  • Kontravarianz von Methode-Argumenten im Subtyp.
  • Kovarianz von Rücktypen im Subtyp.
  • Keine neuen Ausnahmen sollten durch Methoden des Subtyps geworfen werden, außer, wo jene Ausnahmen selbst Subtypen von durch die Methoden des Supertyps geworfenen Ausnahmen sind.

Zusätzlich zu diesen gibt es mehrere Verhaltensbedingungen, die der Subtyp entsprechen muss. Über diese wird in einer Fachsprache ausführlich berichtet, die diesem des Designs durch die Vertragsmethodik ähnelt, zu einigen Beschränkungen dessen führend, wie Verträge mit Erbe aufeinander wirken können:

  • Vorbedingungen können in einem Subtyp nicht gestärkt werden.
  • Postbedingungen können in einem Subtyp nicht geschwächt werden.
  • Invariants des Supertyps muss in einem Subtyp bewahrt werden.
  • Geschichtseinschränkung (die "Geschichtsregel"). Gegenstände werden betrachtet als, modifizierbar nur durch ihre Methoden (encapsulation) zu sein. Da Subtypen Methoden einführen können, die im Supertyp nicht da sind, kann die Einführung dieser Methoden Zustandsänderungen im Subtyp erlauben, die im Supertyp nicht erlaubt sind. Die Geschichtseinschränkung verbietet das. Es war das neuartige Element, das von Liskov und Flügel eingeführt ist. Eine Übertretung dieser Einschränkung kann durch das Definieren von MutablePoint als ein Subtyp von ImmutablePoint veranschaulicht werden. Das ist eine Übertretung der Geschichtseinschränkung, weil in der Geschichte des Unveränderlichen Punkts der Staat immer dasselbe nach der Entwicklung ist, so kann es nicht die Geschichte von MutablePoint im Allgemeinen einschließen. Zum Subtyp hinzugefügte Felder können jedoch sicher modifiziert werden, weil sie durch die Supertyp-Methoden nicht erkennbar sind. Man kann CircleWithFixedCenterButMutableRadius von ImmutablePoint ableiten, ohne LSP zu verletzen.

Ursprünge

Die Regeln auf prä- und Postbedingungen sind zu denjenigen identisch, die von Bertrand Meyer in seinem 1988-Buch eingeführt sind. Sowohl Meyer, als auch später Pierre America, der erst war, um den Begriff das Verhaltenssubschreiben zu gebrauchen, haben probetheoretische Definitionen von einigen subtippenden Verhaltensbegriffen gegeben, aber ihre Definitionen haben aliasing nicht in Betracht gezogen, der auf der Programmiersprache vorkommen kann, die Verweisungen oder Zeigestöcke unterstützt. In Betracht ziehender aliasing war die Hauptverbesserung, die von Liskov und Flügel (1994) gebildet ist, und eine Schlüsselzutat ist die Geschichtseinschränkung. Laut der Definitionen von Meyer und America würde MutablePoint ein Verhaltenssubtyp von ImmutablePoint sein, wohingegen LSP das verbietet.

Eine typische Übertretung

Ein typisches Beispiel, das LSP verletzt, ist eine Quadratklasse, die auf eine Rechteck-Klasse zurückzuführen ist, Hauer annehmend, und Setter-Methoden sowohl für die Breite als auch für Höhe bestehen. Die Quadratklasse nimmt immer an, dass die Breite mit der Höhe gleich ist. Wenn ein Quadratgegenstand in einem Zusammenhang verwendet wird, wo ein Rechteck erwartet wird, kann unerwartetes Verhalten vorkommen, weil die Dimensionen eines Quadrats können nicht (oder eher soll nicht), unabhängig modifiziert werden. Dieses Problem kann nicht leicht befestigt werden: Wenn wir die Setter-Methoden in der Quadratklasse modifizieren können, so dass sie das Quadrat invariant bewahren (d. h., halten Sie die Dimensionen gleich), dann werden diese Methoden schwach werden (verletzen) die Postbedingungen für die Rechteck-Setter, die feststellen, dass Dimensionen unabhängig modifiziert werden können. Übertretungen von LSP, wie dieser, können oder können kein Problem in der Praxis, abhängig von den Postbedingungen oder invariants sein, die wirklich durch den Code erwartet werden, der Klassen verwendet, die LSP verletzen. Veränderlichkeit ist ein Schlüsselproblem hier. Wenn Quadrat und Rechteck nur Hauer-Methoden hatten (d. h. sie waren unveränderliche Gegenstände), dann konnte keine Übertretung von LSP vorkommen.

Siehe auch

  • Verbesserung
  • FEST: der L in FESTEN Standplätzen für den Ersatz-Grundsatz von Liskov
  • Typ-Unterschrift
  • Zusammensetzung über das Erbe

Allgemeine Verweisungen

  • Gary T. Leavens und Krishna K. Dhara, Konzepte des Verhaltenssubschreibens und eine Skizze Ihrer Erweiterung auf Teilbasis-Systeme in Gary T. Leavens, Murali Sitaraman, (Hrsg.). Fundamente von teilbasierten Systemen, Universität von Cambridge Presse, 2000 internationale Standardbuchnummer 0-521-77164-1. Dieses Papier überblickt verschiedene Begriffe des Verhaltenssubschreibens, einschließlich Liskovs und Flügel.
  • Barbara Liskov, Jeannette Wing, Ein Verhaltensbegriff von Subschreiben, ACM Transaktionen Auf Programmiersprachen Und Systemen (TOPLAS), Band 16, Ausgabe 6 (November 1994), Seiten 1811 - 1841. Eine aktualisierte Version ist als CMU technischer Bericht erschienen: Die Formalisierung des Grundsatzes durch seine Autoren.
  • Reinhold Plösch, Verträge, Drehbücher und Prototypen: eine einheitliche Annäherung an die hohe Qualitätssoftware, Springer, 2004, internationale Standardbuchnummer 3-540-43486-0. Enthält eine sanftere Einführung ins Verhaltenssubschreiben in seinen verschiedenen Formen im Kapitel 2.
  • Robert C. Martin, Der Ersatz-Grundsatz von Liskov, C ++ Bericht, März 1996. Ein Artikel, der in der objektorientierten Programmiergemeinschaft populär ist, die mehrere Beispiele von LSP Übertretungen anführt.
  • Kazimir Majorinc, Dilemma des Ellipse-Kreises und Umgekehrtes Erbe, ITI 98, Verhandlungen der 20. Internationalen Konferenz von Informationstechnologieschnittstellen, Pula, 1998, ISSN 1330-1012. Dieses Papier bespricht LSP im erwähnten Zusammenhang.
  • Ashley McNeile, Ein Fachwerk für die Semantik von Verhaltensverträgen. Verhandlungen der Zweiten Internationalen Werkstatt auf dem Verhaltensmodellieren: Fundament und Anwendungen (BM-FA '10). ACM, New York, New York, die USA, 2010. Dieses Papier bespricht verallgemeinerte Begriffe von Contract und Substitutability.

Spezifische Verweisungen

  • . Eine Grundsatzrede, in der Liskov zuerst den Grundsatz formuliert hat.
  • Meyer B., Objektorientierter Softwareaufbau, Prentice Hall, New York, 1988, internationale Standardbuchnummer 0-13-629031-0

Außenverbindungen


Verborgene Kamera / Ohrekreis
Impressum & Datenschutz