2017-11-24 3 views
3

In seinem paper über LSP, Onkel Bob erwähnt: wenn die Voraussetzungen/Nachbedingungen eines Subtyps Instanz-Objekt-MethodeDie Regel für Vorbedingungen/Nachbedingungen von Derivaten

Now the rule for the preconditions and postconditions for derivatives, as stated by Meyer, is: 
...when redefining a routine [in a derivative], you may only replace its 
precondition by a weaker one, and its postcondition by a stronger one. 

Wie könnte ich sagen, sind jeweils schwächer/stärker als die der Methode des Supertyps?

Antwort

1

Um es ohne strenge Definitionen zu formulieren:

Wenn Ihre Elternklasse etwas erfordert, muss das Kind die gleiche Funktionalität bieten - zumindest. Wenn Ihre Routine verspricht, alle Eingaben zu verarbeiten, die größer als Null sind, muss Ihre abgeleitete Routine auch all diese oder mehr Eingaben akzeptieren. Das bedeutet, dass die Voraussetzung nur schwächer sein kann.

In ähnlicher Weise muss die Nachbedingung stärker sein. Das bedeutet, dass Sie in Ihrer abgeleiteten Routine keine negative Zahl zurückgeben dürfen, wenn die ursprüngliche Routine versprochen hat, dass sie immer eine positive Zahl zurückgibt.

Wenn Sie mehr benötigen als das, was der Elternteil benötigt (d. H. Wenn Sie eine stärkere Voraussetzung hatten), dann könnten Sie nicht sicher sein, dass Sie diese Routine immer aufrufen könnten. Angenommen, B und C sind Unterklassen von A. Manchmal haben Sie möglicherweise ein Objekt vom Typ A, das auch ein B oder ein C sein könnte. Wenn C stärkere Voraussetzungen als A hätte, könnten beim Aufruf der Routine Probleme auftreten auf diesem Objekt.

Es tut mir leid, wenn ich nicht die übliche Terminologie verwendet habe, kann ich nicht wirklich daran erinnern, also habe ich nur versucht, bei dem zu bleiben, was für mich Sinn macht. (Es ist zwei Jahre her, dass ich zuletzt an einem Vortrag von Bertrand Meyer teilgenommen habe)