So, nachdem wir darüber gesprochen haben,
was Fehler sind und wie wir mit defensiven Programmierstilhäuschen vermeiden können,
in die Anwesenheit von Fehler berücksichtigen können,
lassen Sie uns nun darüber sprechen, wie wir Fehler vermeiden können.
Und das Mittel, was wir da anwenden, ist Design by Contract,
ist das Vertragsmodell ja. Ich bin gleich beim englischen Begriff,
Design bei Contract, dann fahren wir gleich hier an,
ja, bei Tron Meier, ein Informatiker aus der Schweiz,
hat diesen Begriff geprägt im Zusammenhang mit der Programmiersprache Eifel,
die genau dafür gedacht ist, die Book-App,
dieses Vertragsmodell sogar im Laufzeitssystem unterstützt.
Die Metapher, Vertrag, Dienst und dazu die Wechselwirkung zwischen Aufrufer und Programm,
was aufgerufen wird, darzustellen, ganz ähnlich,
wie wir das in menschlichem Leben bei Arbeitsteilung macht.
Der eine sagt, ich gebe dir das und das,
damit du gut arbeiten kannst und der andere sagt, okay,
ich arbeite gut und ich gebe das und das zurück.
Diese Beziehung ist im Kern eine Benutzungsbeziehung zwischen Klient und Dienstleister,
so bezeichne die beiden,
wenn sie in der englischen Literatur sind,
werden sie
client und Supplier finden
Der Vertrag beschreibt, welche Vorleistung bringt der Klient,
der Aufrufer, der Benutzer der Daten, welche Vorleistung bringt der,
damit der Dienstleister, der diese Dienstleistungen anbietet,
also hier haben wir so ein bisschen Aufrufstützstelle dargestellt,
der versichert dann, der sichert dann zu,
dass er eine bestimmte Leistung zurückgibt.
Diese wechselweiseigen Zusicherungen, die sind der Inhalt dieses Vertrages.
Und das ist auch gleich das,
was wir auf der wo wir vier haben,
so die Fragen hier erläutern sie das Prinzip, Design by Confect.
Genau das ist das, was wir hier haben,
also der Vertrag beschreibt, welche Vorleistungen man erbringen muss.
Lassen Sie uns sehen, wie wir das machen können.
Diese Benutztbeziehung zwischen zwei Klassen, die wird ja dadurch gemacht, dass man Aufrufe macht.
Das ist das, was die Programmiersprache ja war,
ermöglicht, damit sich zwei Klassen miteinander zusammenarbeiten.
Und wenn wir jetzt das mal betrachten, und die Klasse B,
da können wir Variablen deklarieren oder Aufrufe herstellen.
Und das Vertragsmodell bezieht sich jetzt vor allem auf das Aufrufen
von Operationen. Und was wir da machen können,
ist, dass wir die Parameter prüfen,
erfüllen die zum Beispiel die Vorbedingungen oder welcher Zustand hat jemand,
der aufgerufen wird.
Der Bestand, die Bestandteile. Wenn wir das auf Java beziehen,
bezieht sich, bespricht das Vertragsmodell,
bezieht sich immer auf eine Methode,
eine Operation,
auf die Operation einer Klasse
Dieser Vertrag wird beiden Dienstleister festgelegt,
also eine Soptierprogramm zum Beispiel, ein Sortieralgorithmus, sagt,
ich werde die Sortierung in der und der Weise durchführen.
Und das kann man als Zusicherung tatsächlich spezifizieren. Sie ändern
sich der Begriff to Specify, war etwas genau beschreiben.
Man kann das sagen, so,
dass man das mit logischen, mypolischen Ausdrucken darstellt,
mit sogenannten Prädikaten und diese Zusicherungen können sich auch Vorbedingungen beziehen auf Nachbedingungen,
auf Innenvariante.
Vorbedingungen, das sind Sachen,
die müssen erfüllt sein,
bevor eine Operation ausgeführt wird
Also zum Beispiel, ich muss Speicher haben, immer ein Sortier bekommen, durchzuführen.
Oder bevor ich in einen Shop, einen Bezahlvorgang einstoßen kann,
muss der Kunde, dass ich ausgewiesen haben als derjenige,
der es wirklich, der wirklich das Konto gehört.
Nachbedingungen sind Sachen, die auserfüllt sein müssen, nachdem eine Operation durchgeführt worden ist.
Also das ist zum Beispiel dieser konsistente Zustand,
den wir herstellen, wie ein Beispiel für eine Nachbedingung,
da eine Überweisung, so hatten wir das letzte Wochenende als Beispiel,
das vor der Überweisung und nach der Überweisung die Summe auf beiden konnten,
gleich groß ist.
Also wenn die 500 Euro von sich auf einen Freund
überweisen oder weil sie eher Waschmaschinenreparatur bezahlen wollen,
dann sollte das nicht irgendeine Fehlschlagen aus irgendwelchen Gründen.
Und wenn es um 500 Euro weg oder durch einen
anderen Fehler sind die 500 Euro beim Empfänger angekommen,
aber bei ihnen sind sie nämlich abgebucht worden.
Das wollen wir irgendwie nicht. Also vielleicht möchte ich das
gerne mehr auf meinem Konto, ist aber nicht,
dass das System so arbeitet.
Also das wäre ein Beispiel für die Nachbedingungen und das
wäre auch gleichzeitig was für Innenvariantenbedingungen,
die immer gelten sollen
Das wären zum Beispiel auch diese Summe, diese etwas,
die bleibt unverändert. Oder wir haben Daten in einer Datenbank,
die bleiben unverändert, während ich sie sortiere.
Gesamtanzahl der Kunden bleibt gleich, werde ich Energylische durchführen.
Sowas kann ich euch ändern, beschreiben. Der Mechanismus,
den wir dabei haben, der bezieht sich darauf,
dass ja Client punft, in der Kleinen sicherstellen mussten,
sich darum kümmern, dass die Vorbedingungen der Operation erfüllt sind.
Und der Dienstleister selber, der muss prüfen,
kann ich denn etwas tun,
um das meine Operation durchzuführen
Ja, und wenn nicht die erfüllt, wenn das diese Prüfung positiv ist,
dann mache ich die Operation und ich garantiere,
dass ich die Leistung auch in entsprechender Form erbringe.
Ja, also das ist sozusagen ganz kurzer Form der Vertrag hier,
und man könne das formulieren in einer klassenen Variante, die immer gelten muss,
also die für die kleinste Klassik gilt für alle Exemplare einer Klasse.
Das wäre durchaus denkbar, dass wir das so machen.
Nehmen wir noch mal das als Rechte und Pflichten separat darstellt,
das Wasser, der Kleinen für Rechte und Pflichten,
und was hat der Dienstleister für Rechte und Pflichten,
Der Klein hat die Pflicht, die Vorbedingungen zu schaffen.
Ja, also die Vorhäuser zu und die Operation zum Beispiel
nur aufzurufen, wenn der Zuständig Dienstleisters ist,
erlaubt oder der Zustand der Ergebnis, das erlaubt.
Das wäre die Vorbedingung, dass wir eine Pflicht,
dass er die sicherstellen muss. Und er hat das Recht,
dass er dann die Naherfüllung der Nachbedingungen erwarten kann.
Beim Dienstleister sind Recht und Pflichten woandersrum zu sehen,
er hat die Pflicht, diese Leistung zu verbringen,
das sind die Nachbedingungen und dabei das Recht,
dass er die Vorbedingungen prüft, beziehungsweise wenn die Vorbedingungen nie erfüllt sind,
dass er seine nicht macht, deine Operation nicht macht.
Das ist so. Und dazu muss man natürlich die prüfen können,
ob ich dann diese Bedingungen an Einhalter, der Klient muss also prüfen können,
ob die Vorbedingungen denn erfüllt sind und die Vorbedingungen muss ja irgendwo härter kommen.
Wir hatten zwei Folien vorher oder ich glaube hier stand das,
genau der Vertrag wird in der Dienstleisterklasse festgelegt. Also die Vorbedingungen stehen deswegen,
alle Sachen zum Vertrag stehen in dieser Dienstleisterklasse, derjenige,
der die Operation wirklich ausführt und Vorbedingungen kann ich,
mir kann sich der Klient hier holen,
der muss die nicht selber wissen,
du musst die nicht irgendwie im Programm hier kriegen,
sondern der Dienstleister informiert über die Vorbedingungen, die erfüllt sind.
Sie sind also an der Schnittstelle sichtbar, er kann selber prüfen,
bevor er den Aufruf durchführt, mache ich das.
Und ja, Dienstleister selber könnte das jetzt, ja,
schauen wir mal. Das ist der, auch die Klassenvariante
machen wir zuerst. Die Klassenvariante gilt eben für die,
für alle, von aller Exemplare, aller Instanzen,
aller Elemente in der Klasse und muss bei einem Operationenbeschreib
berücksichtigt werden
Dann bezieht er sich auf die gesamte Klasse nicht nur auf eine Operation.
Das ist mit vorher und nach der Operation gelte.
Und damit bezieht sich der Beschreib das Vertragsmodell,
ob eine Klasse korrekt arbeitet, nämlich in der Dienstleisterklasse.
Ja, die Korrektheit der Reklasse bezieht sich darauf,
dass Zusicherungen gemacht werden zur Sicherung dieser Hinweise,
dieser drei Arten in Varianten, Vorbringung nach Bedingungen in Neujahrhüb,
ja, und die Korrektheit wird geprüft zu bestimmten Zeitpunkten,
nämlich zu dem Zeitpunkt vor und nach der Operation
Und zwischendurch darf er etwas anderes passieren. Also sie müssen müssten
hier stellen, dass zwischendurch in jeden Zwischenzustand alles ist.
Das ist mir so 500 Euro mal nehmen. Die Summe der Vorbedingungen,
der Kontoinhalte, der Kontenseiten vor der Operation, Nachtoperation,
es muss nicht immer genau stimmen.
Zwischendurch darf es auch spricht, es seien die 500 Eurosten
schon auf die Reise geschickt worden.
Sie fehlen dann, weil sie auch mit dem System unterwegs sind.
Und dann erst zum Zeitpunkt der Erfüllung,
das sind die 500 Euro wieder zum angekommen und dann stimmt,
müssen wir wieder.
Wenn wir mal zu leben. Ich schalte erst mal,
dass wir ein bisschen mit dem Kasten steht
Die Klasse K, wenn wir eine DSK betrachten,
für die das für Partner geben soll,
dann beim Erzeugen müssen Vorbedingungen des Konstruktes erfüllt sein.
Und die Nachbedingungen, die im Morende, wird dann vom Fruchtbar ebenfalls erfüllt.
Bei Operationen ist das Vorbedingungen nach Bedingungen der Gerufenkuration.
Wenn wir noch mal zu den Fragen schauen,
die dafür zutreffen, wir haben ja noch was sicher der Dienstleister,
deren Klienten im Vertragsmedium zu, der Dienstleister sicher zuwider so viel Leistung erbringt.
Und bevor wir jetzt die Fragen treiben,
vier beandeutet und werden dann im nächsten Abschnitt sagen,
wie das im Java ist