Ja, bis jetzt haben wir über eine ganze Menge Möglichkeiten gesprochen,
wie wir durch Vererbung, Spezialisierung erreichen können,
wie wir es erreichen können,
die vorher zusammengefassten Teile einer Lösung ohne Redundanz zu spezialisieren,
um das für eine konkrete Situation passend zu machen.
Ganz verschiedene Möglichkeiten gibt es da, ganze Methoden überschreiben,
Kombinationen können wir machen oder wie auch immer oder einfach
nur erben
Wenn wir das ein bisschen mehr steuern wollen.
Und wir haben ganz häufig die Situation, dass die Oberklasse,
die allgemeinere Klasse von jemand anders geschrieben wird,
als die konkreten Ableitungen, die spezialisierten Klassen davon,
wenn wir das konkreter steuern werden, was darf überschrieben werden,
was soll überschrieben werden.
Für diese Möglichkeit können wir den Compiler,
das Laufzeitsystem nutzen, um Fehler zu vermeiden.
Und diesen Einsatz bezeichnen wir als Entwurfsmuster,
in den Entwurfsmusters immer etwas,
was wir als eine wiederkehrende Lösung für wiederkehrende Probleme
bezeichnen können
So ist jedenfalls die Definition. Ich möchte Ihnen jetzt,
schaut die Schablon-Methode vorstellen, Template, Method, Pattern auf Englisch.
Und dazu haben wir auf die Frage hier, Frage 5,
erläutern Sie das. Richtig, los geht's auf Folie 32,
da springen wir jetzt hin, kurz zur Erklärung,
oben haben wir das, was in der Oberklasse passiert unten,
das, was in der Unterklasse passiert.
Und gleich sehen wir es, wie sehen Java aussieht.
In der Oberklasse Wollen wir das allgemeine Verhalten kennen, festlegen?
Zum Beispiel könnte es ein allgemeiner Ablauf sein und ein allgemeiner Algorithmus.
Und das können wir gut machen mit einer abstrakten Klasse.
In der Unterklasse wird dann das spezielle Verhalten implementiert.
Das heißt, die Dinge in der,
die wir abweichend oder die wir genauer noch beschreiben können,
als sie dafür, dass sie für den allgemeinen Fall gelten.
Und da können wir dafür sorgen, dass diese Template-Messe diese Schablonen-Methode,
die das vorgibt, was ist, Schablone sagt ja schon,
es gibt Teile, die konstant bleiben,
die immer gleich bleiben,
dass diese gleichbleibenden Teile
nicht überschrieben werden
Ja, und wir sehen gleich auf der nächsten Folie,
das passiert mit Feinde.
Zusätzlich haben wir die Möglichkeit als Programmierer der Oberklasse zu sagen,
an diese Stelle bitte was einfügen oder diese Stelle was einfügen.
Das ist möglich, man ist nicht dazu gezwungen,
das so zu machen, wenn man das nutzt,
das heißt Hook Method oder auf Deutsch Einschubmethode.
Also wir haken dort etwas ein, dass wir sagen,
an die Stelle bitte das spezielle Einfügen.
Und das macht man in der Oberklasse ganz häufig gar nicht.
Da gibt es nur die Bezeichnung der Methode,
das haben wir gerade gesehen,
wie sowas machen kann,
nämlich mit abstrakten Methoden können wir
das wunderbar machen
Also oben sind die meistens leer,
die haben keine Implementierung und in der Unterklasse können wir die
dann überschreiben und da ist dann wirklich eine Implementierung,
da ist dann wirklich Quelltext dabei, der sagt, was passiert.
Ja, ganz häufig kommt dieser Fall vor für den sogenannten Frameworks,
Frameworks sind Sammlungen wiederverwendbarer Klassen, die jemand geschrieben hat,
damit sie für viele Fälle Unterstützung leisten.
Und das ist genau so eine Situation, wo ich das brauche,
weil im allgemeinen Fall kann ich das noch nicht genau sagen,
was da passiert, aber ich kann sicher sagen,
es darf bitte nicht überschrieben werden.
Und da hilft mir
diese Schablonen-Methoden, Muster
Wir schauen uns, dass sie einem Beispiele anhören.
Als Beispiel habe ich was mitgebracht, wo es um Spiele geht.
Das allgemeine Spiel hat, natürlich jetzt hier sehr vereinfacht,
ein ganz einfacher Fall, immer was so auf so eine Folie halt passt.
Die Allgemeine, das allgemeine Spiel hat einen Ablauf.
Dieser Ablauf ist jetzt wirklich sehr simpel, aber sie hat einen Ablauf aus,
ich in der Saisiere, ich starte mit dem Spiel,
ich endete mit dem Spiel und ich habe Spielzüge.
So, und hier können wir nicht wirklich sagen,
was da passiert, weil das allgemeine Spiel,
da gibt es nichts. Wir wissen nur, initialisieren,
also Spielaufbauen zum Beispiel starten, enden und es gibt Spielzüge.
Ja? Und das würden wir machen mit einen Schubmethoden.
Und diese Einschubmethoden sind abstrakte Methoden. Die haben kein Buddy
. Also wir sehen es wieder daran,
haben wir eben schon gesehen auf Folien,
dass ihr keine geschweifte Klammer aufgeschweifte Klammer zu ist, also abstrakte Methoden.
Diese abstrakte Methoden sind leer, das sind diese Hook Methods.
Aber eigentlich wollen wir ja drüber sprechen, Schablonenmethode,
ich verhindere das Überschreiben und das Überschreiben verhindere ich,
indem ich hier Final nehme
Meine ist das Schlüsselwort in Java, was etwas endgültig macht,
endgültig im Sinne, wir können es nicht überschreiben, in Unterklassen.
Ja, und natürlich gibt es hier, initialisieren, statten, enden.
Das gibt es hier als in dieser, zum Beispiel in
dieser Spielmethode drin. Ja, das ist wirklich diese Schablonen-Methode,
wo wir Spielzüge mit oder Spielablauf festschreiben.
Diesen Spielablauf werde ich dann in allen Unterklassen haben und
den kann ich dann auch nicht mehr durch,
als kann der Autor der Unterklasse nicht mehr verändern
Auf den Folgenfolien schauen wir uns den fehlenden Quelltext von diesen beiden Schach- und Monopoly-Klassen an,
wo sich das nämlich genau hier zeigen wird,
wie wir die Einschubmethoden durch echte Methoden ersetzen,
die nicht abstrakt sind, sondern die einen Buddy haben.
Ja, also hier für die Schach-Klasse, ja,
wir haben hier das Endplay, wir haben jetzt hier nur ein Beispiel,
als Beispiel nur eine Textausgabe, initialisieren nur die Textausgabe,
Startplay, nur eine Textausgabe.
Das Gleiche für Monopoly, auch nur hier Textausgaben,
weiter nichts, aber was wir sehen ist,
ich gehe wieder eins zurück,
wir haben die nicht mehr abstrakt,
sondern wir haben jetzt
konkrete Klassen
Von denen hier unten, dessen keine abstrakten Klassen,
von denen können wir Instanzen erzeugen.
Und diese Instanzen können dann Exemplare erzeugen, ja,
und die können dann auch ausgeführt werden.
Hier oben könnten wir das nicht. Diese Methode ist nur dazu da,
um das Ganze aufzurufen, die sehen wir noch eine Folie weiter,
sehen wir hier, das ist sozusagen nur die Umgebung zum Staat.
Da haben wir nur so eine Main-Methode drin, die das aufruft.
Und zwar können wir, machen wir es einmal fürs Schachspiel,
dann rufen wir die Schablonen-Methode auf.
Das macht nur eine Leerzeile in der Konsole.
Und dann erzeugen wir ein Monopoly-Spiel und rufen davon die Schablonen-Methode
Und der Aufruf der Schablonen-Methode ruft jeweils, führt dazu,
dass die konkreten Methoden gemacht werden.
Ich gehe mal zwei zurück. Was wir jetzt haben,
ist genau der Mechanismus. Wir rufen hier von Play aus,
rufen wir diese leeren Methoden auf, die hier oben gar nicht existieren.
Trotzdem dürfen wir sie aufrufen. Das hatten wir
gerade im letzten Abschnitt besprochen. Und hier haben wir
diese Methoden dann mit Leben gefüllt, mit Implementierung gefüllt.
Und wenn wir hier die Schablonen-Methode aufrufen,
werden diese tatsächlich gefüllten Methoden aufgerufen
Wir haben den Beweis gesehen, zwei weiter, hier,
indem der Text, den wir da eben gesehen hatten,
dass da wirklich erscheint.
Soweit zum Champlonmuster, zur Schablonenmethode,
dass sie die Bitte erklären können.
Das wäre ganz gut