Grundlagen der Programmierung: Entwurfsmuster

Prinzip 6: Hollywood-Prinzip

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Nicht ständig von allen Seiten über den aktuellen Stand der Dinge befragt zu werden, sondern zum richtigen Zeitpunkt geschlossen alle zu informieren, die es betrifft, vereinfacht die Kommunikation und macht sie besser überschaubar.
04:22

Transkript

Dieses Prinzip ist auch als das Hollywood-Prinzip bekannt und das besagt, versuche nicht uns anzurufen, wir rufen dich an. In objektorientierten Begriffen bedeutet das, dass die Abhängigkeiten zwischen verschiedenen Komponenten nicht kreuz und quer durchs ganze System verlaufen sollen. Insbesondere sollen die abstrakteren höherliegenden Dienste nicht abhängig sein von den konkreteren weiter unten angeordneten. Ein Beispiel für die Umsetzung dieses Prinzips finden wir im Entwurfsmuster Schablonenmethode. Die Ausgangssituation bei diesem Muster ist folgende. In diesem Beispiel befinden wir uns in einem Framework für grafische Oberflächen. Diese Klasse Komponente stellt eine Basisfunktionalität zur Verfügung, die von anderen Klassen genutzt werden kann, die sich in der grafischen Oberfläche optisch darstellen möchten. Die beiden Basisfunktionalitäten, die hier angeboten werden, sind den Rahmen zeichnen und die Kinder, also die Unterelemente der Komponente darstellen. Das sind zwei Abläufe, die für jede Komponente immer wieder gleich sind und deswegen wurden sie hier in die Basisklasse gepackt. Unterklassen können nun von dieser Klasse erben und diese Methoden benutzen. Beispielsweise haben wir hier eine Klasse Fenster, die zeichnet zuerst den Rahmen, indem sie die geerbte Methode aufruft, dann zeichnet sie ihren eigenen Inhalt. Das ist anders. Das konnte auch vorher noch nicht angeboten werden, weil die Basisklasse noch nicht weiß, wie ein Fenster später auszusehen hat und schließlich wird die geerbte Methode zeichneKinder aufgerufen, die wieder bereits von der Basisklasse angeboten wurde. Jetzt haben wir eine zweite Unterklasse Tabelle. Hier wird auch zuerst der Rahmen gezeichnet und es wird auch am Ende zeichneKinder aufgerufen und dazwischen stellt die Tabelle sich selbst dar. Schließlich, Sie sehen schon worauf das hinausläuft, eine Eingabezeile zeichnet zuerst ihren Rahmen, dann sich selbst, ihren Inhalt und dann die Kinder, was in diesem Fall darauf hinausläuft, da die Eingabezeile keine Unterelemente mehr enthält, dass hier gar nichts passiert. Eigentlich haben wir hier eine ganz normale Vererbungshierarchie. Die Basisklasse stellt Grundfunktionalität zur Verfügung, die von den Unterklassen geerbt und verwendet werden kann. Offensichtlich haben wir hier aber auch ein Problem. In allen drei Klassen steht eigentlich immer wieder das Gleiche drinnen. Das heißt, der Ablauf ist immer wieder derselbe, nur in Details variiert er. Jetzt können wir das Hollywood-Prinzip anwenden aus Sicht der Basisklasse, der Komponente. Also versuche nicht uns anzurufen, wir rufen dich an. Das heißt, die Unterklassen sollen nicht die Methoden aufrufen, die in der Oberklasse definiert wurden, sondern wir drehen das Ganze um und dann kommen wir zur Schablonenmethode. Das heißt, der Algorithmus, der vorher in jeder einzelnen Unterklasse immer wieder auf die gleiche Weise implementiert wurde, wird jetzt in die Basisklasse hochgezogen und wird dort in eine Methode verpackt, die auch dort aufgerufen werden kann. Diese Methode enthält jetzt also den Algorithmus und wenn ich sie aufrufe, dann wird zuerst der Rahmen gezeichnet. Dann wir zeichneInhalt aufgerufen, die in der Basisklasse noch keinen Inhalt hat und schließlich noch zeichneKinder. Die Unterklassen müssen jetzt nur noch die Implementierung für zeichneInhalt liefern und wenn ich nun zur Laufzeit zum Beispiel ein Fenster habe und rufe zeichne auf, dann stammt diese Methode zeichne sozusagen aus der Basisklasse und von dieser Methode aus wird die in der Unterklasse befindliche Methode zeichneInhalt aufgerufen. Es wurde also tatsächlich die Aufrufrichtung umgekehrt. Vorher hat das Fenster von der Komponente die Methoden aufgerufen und jetzt ruft die Komponente vom Fenster diese eine Methode auf. Die Kontrolle über die Reihenfolge der Aufrufe liegt jetzt also bei der Basisklasse, bei der Komponente und die Unterklassen können sich jetzt an den dafür vorgesehenen Stellen in diesen Ablauf einhängen. Die Aufrufrichtung geht jetzt nur noch von der Komponente von der Basisklasse zu ihren Unterklassen. Vorher ging das immer lustig zwischen den beiden Ebenen hin und her. Das Fenster zum Beispiel ruft zuerst von der Komponente zeichneRahmen auf. Dann zeichnet es seinen Inhalt. Dann ruft es von der Komponente zeichneKinder auf. Das zeichneKinder in der Basisklasse geht nun durch alle Kinder der jeweiligen Komponente durch, also in diesem Fall des Fensters und teilt denen mit, dass sie sich darstellen sollen. Ist es jetzt zum Beispiel eine Tabelle, dann geht der Aufruf also von hier oben wieder hier runter. Von dort geht er als erstes da hoch zu zeichneRahmen. Dann geht er wieder runter zeichneInhalt und danach wieder hoch und zeichneKinder. Wir hatten hier also zirkuläre Abläufe ohne Ende und es war nicht einfach zu erkennen, wann was in welcher Reihenfolge passiert. Mit der Anwendung des Hollywood-Prinzips und der Einführung des Entwurfsmusters Schablonenmethode ist der Algorithmus nun an einer zentralen Stelle zusammengefasst hier in der Basisklasse und von dort werden dann die Aufrufe an die jeweiligen Unterkomponenten durchgeführt. Die Abhängigkeiten sind also klar definiert und auch gut erkennbar.

Grundlagen der Programmierung: Entwurfsmuster

Erhalten Sie einen fundierten Einstieg in das Thema Entwurfsmuster (Design Patterns) und erfahren Sie, wie Sie Entwurfsmuster in objektorientierten Programmiersprechen umsetzen.

2 Std. 49 min (33 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!