Zum Abschluss dieses Teils mit den Folien möchte ich noch die Typ-Hierarchien und dieser Subtyping,
Subtyping-Konzepte in Bezug mit dem Vertragsmodell stehen, stellen.
Das sind die Fragen 7 und 8, die wir dabei besprechen und
das Ganze geht los bei der Folie mit der Ordnungsnummer 45.
Wir hatten eben schon damit beendet, dass wir gesagt haben,
ja, diese Ersetzbarkeit ist total wichtig. Ja,
die Unterklassen, die Subtypen müssen immer ersetzbar sein, Nein,
die Supertypen müssen immer ersetzbar sein durch die spezielleren Klassen.
Und das soll im Vertragsmodell auch ein wichtiges Prinzip sein.
Hier schon mal als kleinen Vorgriff in Vorlesung 10,
also in sieben Wochen von heute,
werden wir uns mit dem Liskovschen Substitutionsprinzip beschäftigen, das genauer erklären.
Das ist eins der Entwurfsprinzipien. Damit wir diese Ersetzbarkeit erreichen,
da können wir erst mal sagen,
Subtypen dürfen den Vertrag zwischen Vertrags,
zwischen Klienten und Dienstleister
nicht verschärfen
Das ist, klingt erstmal ein bisschen vielleicht unlogisch,
weil wir wollen ja eine Spezialisierung haben und Spezialisierung kann auch mit spezielleren Bedingungen einhergehen.
Das ist gleich die Frage, die Antwort auf die erste
Frage oder ein Teil der Antwort auf die Frage 7,
deswegen springe ich mal kurz vor,
wir kommen gleich wieder hier zurück.
Frage 7, was sind denn Regeln für das Subtyping in
Bezug auf Verträge zwischen Klienten und Dienstleistern und hier sagten wir schon mal,
ja,
wir müssen eine Ersetzbarkeit haben und
den Vertrag dürfen wir nicht verschärfen
Lassen Sie mir kurz sagen, worum es dabei geht.
Erstmal kommen hier ein paar Folien,
die durch den Keks gekennzeichnet sind, als weiterführendes,
die überspringe ich jetzt mal einfach mal kurz.
Ich komme gleich dazu, wie gesagt, lesen Sie gern dazu weiter.
Ich komme gleich zu diesem Vertragsmodell. Das Vertragsmodell sagt ja,
ja, wenn der Klient eine Umgebung schafft,
die Voraussetzung schafft für geordnete Arbeit des Dienstleisters,
dann wird der Dienstleister
sein Teil des Vertrags erfüllen
Die Dienst, die Verträge können einen Dienstleister,
einen Zulieferer weitergegeben werden, das wäre dieser Fall der Spezialisierung.
Ja, also wir haben jemanden, der macht das speziell,
ja, wir verarbeiten Blech und wir haben dann jemanden,
der macht daraus Dach hin und jemand,
der macht daraus Briefkästen und jemand ausmacht daraus Stoßstangen.
So, und dass diese Spezialisierung sollte aber trotzdem Vertrag,
den Vertrag erfüllen, das weiß ich,
wie die Oberfläche des Blechs ist, der allgemeine Form Sollte es sein,
auch wenn das was Spezielleres ist.
Das heißt, damit das klappt,
damit diese Ersetzung des Zulieferers durch das die Dienstleistung durch einen Zulieferer,
durch einen verfeinerten, spezialisierten Dienstleister klappt,
darf der Zulieferer höchstens tiefe Voraussetzungen fordern, die für alle gelten.
Ja, und der Zulieferer muss dafür mindestens die Leistung bringen,
die ich versprochen habe und eigentlich noch ein bisschen was Spezielleres.
So, wenn wir jetzt mal das so sehen,
die Operation und die Vererbung davon,
also das wäre die Operation auf der Ohne Vererbung.
Also wir haben eine Vorbedingung und eine Nachbedingung.
Und dann haben wir eine spezialisierte Operation mit Vorbedingungen und Nachbedingungen.
Ich hoffe, das ist Ihnen nicht so kompliziert hier.
Also das ist das, wo wir bisher beim Vertragsmodell gesprochen haben.
Und jetzt, wir geben es weiter an eine Spezialisierung,
diese Spezialisierung bezeichnen wir jetzt mal hier als Zulieferer.
Ja, wie sieht denn das jetzt? Die Vorbedingungen verhältnis zu
der Vorbedingung, die Nachbedingungen verhältnis zu der Nachbedingung aus.
Hier steht es schon als Text. Und hier sagen wir es nochmal,
was die Vorbedingungen Nachbedingungen sind, Bedingungen von hier unten,
muss schwächer sein, als die Vorbedingungen hier oben.
Ja, also höchstens die Voraussetzungen fordern und so weiter.
Und die Nachbedingungen muss stärker sein. Er muss also
mindestens das liefern, was der geliefert hat.
Wie viel er mehr liefert, ist erstmal unerheblich oder es
ist noch dahingestellt, aber das muss er erstmal erreichen.
Beispiel, wir haben also den Klienten,
den Kunden und den Anbieter,
den Dienstleister und der hat ein Stück weitergegeben an den Zulieferer
Ja, also der Zulieferer soll zum Beispiel hier etwas ein Bohrstück liefern.
Etwas, wo ein paar Löcher drin sind.
Und wir haben, der Preis soll über 500 sein.
Ja, das ist eine Vorbedingung und die Nachbedingung,
die Toleranz sollte kleiner als 20 sein.
Das ist hier das, was der Anbieter will.
Der Anbieter will also mindestens 500 Euro hier verdienen. Ja,
und er kann maximal eine Ob das jetzt Millimeter oder ein Mikrometer sind,
sei mal dahingestellt, maximal eine Toleranz von 20 Mikrometern da erreichen.
So ergibt diese Leistung weiter einen Zulieferer. Und der Zulieferer
hat eine schwächere Vorbedingung. Der ist schon zufrieden,
wenn der Preis über 400 Euro liegt, damit er die Leistung vollbringen kann.
Und er kann aber sicherstellen, ja,
die Toleranz ist kleiner, zehn Mikrometer.
Und damit passt das hier für den Voranbieter auch.
Der kann diese Leistung weiterreichen. Der Kunde wird auf
jeden Fall das bekommen, was zwischen den beiden abgesprochen ist
So, wir können das miteinander, durch das, durch Miteinander verknüpfen,
können wir das verschärfen, von Vorbedingungen, das Aufweichen von Nachbedingungen verhindern. Ja,
also wenn wir hier entsprechend etwas weitergeben,
dass es für uns eine Möglichkeit ist, diese Dings,
erklärt das nochmal und das wäre jetzt die weitere Antwort auf die Frage 7. Ich springe nochmal zurück dahin zu der Folie hier,
also Regeln für das Subtiming in Bezug auf Verträge von Dienstleistern zwischen Klienten und Dienstleistern,
die Folie mit der Nummer 50, Uwe Kart hergekommen waren,
erklärt das, beziehungsweise die 49 mit als Satz vor.
So, wie sieht das in verschiedenen Programmiersprachen aus?
In Java ist es so, der Compiler kann das nicht prüfen. Ob diese Regeln eingehalten werden sollen,
aber es gibt andere Sprachen, wo es diese Prüfung gibt,
die Sprache Eifel zum Beispiel,
die legt solche Regeln für das Vertragsmodell fest, die Sprache Eifel,
vielleicht haben sie schon davon gehört oder erinnern sich an die Worte,
die ich Ihnen gesagt hatte, die definiert Vor- und Nachbedingungen,
lässt die prüfen durch ihr Laufzeitsystem und da kann ich das aber entsprechend behandeln.
Ja, und kann das entsprechendes Laufzeitsystem prüfen lassen.
In Varianten ganz genauso. Eifel ist nun schon etwas älter,
es wird meines Wissens nicht irgendwie ganz groß mehr angewendet.
Es gab schon ein paar Eifelprojekte in der Industrie,
aber heute gibt es noch weitere Programmiersprachen, die das Vertragsmodell unterstützen.
Die Sprache D, Fortwiss und Ada 202
, unterstützen das beispielsweise
So, ein weiteres Beispiel, wo wir in Varianten,
wo wir Subtyping haben und jetzt mit Innenvarianten in Varianten waren ja,
anders als Vor- und Nachbedingungen, etwas, was der Klient,
der böser Dienstleister verspricht, einzuhalten, unangetastet zu lassen.
Und hier ist es etwas garantiertes für einen,
nehmen wir mal ein Schriftstück, ein Report vom Fachbereich Informatik.
Generell ist ein Report etwas, wo es mindestens einen Autor
dazu gibt. Hier haben wir nochmal eine speziellere Form,
an der Uni Hamburg ist etwas als Report nur akzeptabel,
was mindestens einen Autor hat und mehr als 50 Seiten.
Und der Fachbereich Informatik hat eine Forderung, nicht nur mindestens
ein Autor und mindestens 50 Seiten, sondern auch mindestens 50 Referenzen.
Was wir sehen, ist hier, jeweils wird es verschärft,
die vorgehenden Sachen werden weitergegeben und es wird noch etwas hinzugefügt.
Und die Randbedingungen werden damit anspruchsvoll. Was auch noch passieren kann,
und damit ist das schon das letzte Beispiel, ja,
wir könnten auch noch das Subtyping mit Verallgemeinung zusammenfassen,
ja, die Anpassung können wir in der Vererbung weiterreichen.
Das ist aber schon etwas, was ein bisschen an die
Grenzen geht dessen, was wir in dieser Lehrveranstaltung behandeln.
Ja, also wir können zum Beispiel ein Objekt,
Objektlister erzeugen und wenn das eine Stringliste ist,
könnten wir sagen, ja, wir weisen,
dass dem zu, ja,
also das ist ja nur eine variable zur Laufzeit,
können wir
diese Zuweisung denn machen
Ja, die Frage,
hier steht jetzt schon die Antwort, aber die Frage,
um die Frage zu beantworten, müsste man jetzt überlegen,
ja, ist denn das strenger als das?
Ja, nein, es ist nicht zulässig, weil wir hier
eine Verschärfung haben. Und deswegen ist das nicht hier richtig.
Wir hatten dieses Beispiel mit Informatiker und Nahrung schon.
Es gibt hier einen Fehler und das ist nicht zulässig.
Und deswegen können wir das nicht so tun. So,
Ja, wäre es, wenn es noch nicht besprochen haben,
jetzt haben wir hier die Zusammenfassung noch mal kurz dargestellt.
Wir haben noch nicht die Frage 8 so richtig besprochen.
Das war die Frage, ich gehe noch mal zurück.
Das war die Frage mit der Ersetzbarkeit. Warum sollten Exemplare
für einen Supertypen grundsätzlich ersetzbar sein? Dieses Warum hatten wir
noch nicht besprochen. Dazu gehe ich mal zu der Folie
mit der Nummer 49. Hier hatten wir schon gesagt,
ja, wir möchten das gerne weitergeben,
in dem Fall hier ein Zulieferer.
Und damit wir das weitergeben können,
muss es
diese Ersetzbarkeit geben
Ersetzbarkeit, dass ich den Allgemeineren durch den spezielleren Fall ersetzen kann.
Damit ich diese, zum Beispiel, damit ich den Zulieferer weitergeben kann,
zum Beispiel, dass ich flexibel eine Ersetzung vornehmen kann.
Für diese Flexibilität braucht wir diese Regeln und diese Regeln,
wie wir sie hier gerade sehen, helfen uns ja,
sie sind einfach, sie sind klar prüfbar,
die helfen uns dafür, dass wir allgemeine Regeln aufstellen,
die auch bei der Arbeitsteilung zwischen Entwicklern,
bei großen Projekten funktionieren.
Damit sind wir soweit am Ende,
haben eine Fragen beantwortet und haben jetzt noch den Hands-Onteil mit Detlef,
der uns die ein paar Tage davon noch im Detail erklärt