Grundlagen der Programmierung: Entwurfsmuster

Erbauer: Ein Lösungsansatz

Testen Sie unsere 1953 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Ein gängiger Lösungsansatz, um Objekte erzeugen und dabei viele verschiedene Parameter angeben zu können, ist der Einsatz unterschiedlicher Konstruktoren. Wie und ob das funktioniert, erfahren Sie in diesem Video.
06:26

Transkript

Ein Client, der selbst komplexe erzeugen möchte, muss dabei darauf achten, dass alle Attribute mit korrekten und zueinander passenden Werten belegt werden. Das ist jetzt natürlich nicht unmöglich und es gibt dafür auch ohne den Erbauer mehrere zumindest theoretisch mögliche Lösungen. Eine solche mögliche Lösung hat den aussagekräftigen Namen Teleskopkonstruktoren. Was damit gemeint ist, schauen wir uns am besten mal direkt im Quelltext an. Ich habe dazu dieses Projekt vorbreitet und wir schauen uns zuerst kurz an, was sich darin so befindet. Wir haben hier die Oberfläche. Die Oberfläche eines Schrankes kann einen von diesen drei Werten haben, nämlich unbehandelt oder gewachst oder lackiert und deswegen bietet es sich natürlich an, dafür einen Aufzählungstyp zu verwenden. Das Gleiche gilt für die Farbe. Hier haben wir zehn verschiedene Möglichkeiten, aus denen der Kunde auswählen kann und auch dafür haben wir hier einen Aufzählungstyp. Damit kommen wir nun auch schon zum eigentlichen Schrank. Wir beginnen hier mit vier Konstanten für die minimale und maximale Anzahl der Türen und der Einlegeböden, also mindestens 2 Türen, höchstens 7 Türen, mindestens gar keine Einlegeböden und höchstens 6. Es folgen dann die Attribute für die einzelnen Wahlmöglichkeiten. Anzahl der Türen ist natürlich ein int. Oberfläche ist vom Aufzählungstyp Oberfläche. Farbe vom Aufzählungstyp Farbe. Für die Schubladen auf Metallschienen gibt es einfach nur ein Ja oder Nein. Das ist also ein boolsches Attribut. Die Anzahl der Einlegeböden ist wieder eine Zahl und schließlich wollen wir eine Kleiderstange oder nicht, ist auch wieder nur Ja oder Nein. Nun folgt auch schon der erste Konstruktor. Die Anzahl der Türen hatten wir gesagt, müssen wir auf jeden Fall angeben. Das heißt, der Konstruktor möchte gerne die Anzahl der Türen haben. Nun initialisiert er aber das Objekt nicht selbst, sondern reicht die Anfrage weiter an einen zweiten Konstruktor, der zwei Argumente nennt, nämlich die Anzahl der Türen und welche Oberfläche der Schrank haben soll. Als Standardwert für die Oberfläche gibt der erste Konstruktor unbehandelt an den zweiten weiter. Diese zweite Konstruktor reicht die Anfrage nun wiederum weiter an den Dritten, der jetzt schon drei Parameter erwartet. Für den dritten Parameter, für die Farbe, übergibt der zweite den Standardwert hellbraun. Aber das Ende ist noch nicht erreicht. Dieser dritte Konstruktor gibt weiter an einen vierten Konstruktor. Ich habe das hier ein bisschen breiter, damit man es sehen kann. Der vierte Konstruktor möchte jetzt vier Argumente haben und das vierte ist, wollen wir die Schubladen auf Metallschienen. Da übergibt der Dritte ein false als Standardwert. Nach dem vierten Konstruktor folgt ein fünfter und ein sechster, jeder immer mit einem Parameter mehr als sein Vorgänger. Der sechste und letzte Konstruktor, der jetzt tatsächlich auch alle sechs Parameter erwartet, übernimmt dann die eigentliche Initialisierung des Objektes. Dazu übernimmt er einfach alle diese Werte in die internen Attribute des Schrankes. Hier könnten nun zum Beispiel auch weitere Validierungen erfolgen. Am Ende kommt hier nur noch eine toString Methode, damit wir später vergleichsweise einfach schnelle, sinnvolle Textausgaben bekommen können. Die macht aus dem Schrank eine kurzen Text, wo dann drinnen steht, dies ist ein 3türer mit einer unbehandelten Oberfläche in keiner Farbe, weil wenn die Oberfläche unbehandelt ist, heißt es unbehandelt, also ohne Farbe. Wenn wir Metallschienen haben, dann kommt noch dazu, wir haben die Schubladen auf Metallschienen und schließlich Einlegeböden in einer bestimmten Anzahl und mit oder ohne Kleiderstange. Das ist also die toString Methode. Aber zurück zu den Konstruktoren. An diesen Konstruktoren, die immer länger werden, können Sie möglicherweise schon sehen, warum das Ganze Teleskopkonstruktoren heißt. Ein Teleskop lässt sich auseinanderziehen, rausfahren, immer länger machen und genau das ist das, was wir hier mit den Konstruktoren auch machen. Wie würde ich jetzt Instanzen einer solchen Klasse erzeugen? Ich habe hier eine Klasse mit einer leeren Main Methode und da zeige ich es kurz. Also wir könnten zum Beispiel uns einen Schank bauen, indem wir sagen, ich hätte einfach gerne einen Schrank und wir geben die minimale Anzahl von Informationen an, nämlich die Anzahl der Türen. Das war einfach. Schauen wir uns an, was dabei rauskommt. Wenn wir das Programm ausführen, dann sehen wir, wir bekommen einen 2türigen Schrank mit unbehandelter Oberfläche, 4 Einlegeböden, ohne Kleiderstange. Das ist doch total komfortabel für den Client. Wenn wir vom Standard abweichen wollen, wird es aber nicht mehr ganz so einfach. Bauen wir einen zweiten Schrank. Das wir dein großer Schrank und da will ich auch alles selbst angeben können. Ich nehme also den letzten Konstruktor. Das sieht dann so aus. Ich muss die Anzahl der Türen angeben. Ich will 5 Türen. Dann will ich die Oberfläche angeben und zwar ich will die Oberfläche nicht gewachst, sondern ich möchte sie gerne lackiert. Als Farbe nehme ich creme. Dann hätte ich gerne Metallschienen. Ich möchte gerne 6 Einlegeböden haben und ich will auch eine Kleiderstange. Ich mache das wieder ein bisschen größer, damit man diesen Bandwurm auch sehen kann. Auch den Schrank konnte ich natürlich erfolgreich bauen und kann ihn mir demzufolge auch ausgeben lassen. Sie sehen, klappt. 5türer, Farbe usw. funktioniert alles. Sie haben es gesehen, beim Schreiben hilft mir die Idee durchaus noch. Beim Lesen wird es aber nicht mehr ganz so einfach. Da fragt man sich dann, was heißt jetzt hier die 5 und was heißt die 6, welches war jetzt gleich welches und hier haben wir zweimal true. Was könnte das gewesen sein? Also besonders gut lesbar sind solche Bandwürmer nicht. Außerdem haben wir natürlich mit unseren 6 Konstruktoren nicht alle möglichen Kombinationen abgedeckt. Beispielsweise gibt es momentan keine Möglichkeit zu sagen, ich hätte gerne einen Schrank mit 2 Türen. Mache bitte alles nach Standard, aber mit Kleiderstange. Die Kleiderstange, das ist hier der letzte Parameter, um den angeben zu können, muss ich auch alle davor angeben. Könnten wir also noch einen zweiten Konstruktor bauen bzw. in diesem Fall einen siebenten. Wenn wir das konsequent durchziehen, dann kommen wir mit einem Pflichtattribut und fünf optionalen Attributen auf insgesamt 32 verschiedene Konstruktoren. Wen auch das noch nicht abschreckt. Sie könnten sich das zum Beispiel von der Idee generieren lassen. Es geht aber gar nicht unbedingt. Zum Beispiel wenn ich sage, ich möchte einen Konstruktor, der mir die Anzahl der Türen und die ja/nein Kleiderstange Option gibt und einen zweiten Konstruktor, mit dem ich die Anzahl der Türen und ja/nein Metallschienen angebe. Dann hieße das, ich hätte zwei Konstruktoren, die ein int und ein boolean haben wollen und da funktioniert natürlich nicht. Als echte Lösung für die Probleme unseres Clients fällt das also aus.

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!