Ex6 Aufgabe 5

Benutzeravatar
Ultr1
Mausschubser
Mausschubser
Beiträge: 99
Registriert: 13. Okt 2004 17:53
Wohnort: Dreieich
Kontaktdaten:

Ex6 Aufgabe 5

Beitrag von Ultr1 »

Hallo,
mir ist nicht ganz klar, wieso das Design ohne konkrete Klassen für Produkte auskommen soll. Man könnte doch die konkreten produkte HouseBlend, Decaf,... anlegen. Zutaten wie Vanilla und Soy sind dann die Condiments, mit denen das Produkt dekoriert wird. (Natürlich wäre es nun ja auch möglich die Kaffeesorten selbst als Condiments zu betrachten.)
Allerdings ergibt sich nun folgendes Problem. Sowohl die Ojekte die dekoriert werden, als auch die Objekte, mit denen dekoriert wird müssen an irgendeiner Stelle instanziiert werden. Wir brauchn also eine Klasse HouseBlend. So können wir eine HouseBlend Objekt mit einem Milk Condiment dekorieren.
Wieso sollen diese Objekte nun aber keine konkreten Klassen haben dürfen. Der Sinn des Decorater-Patterns ist es doch nur Klassen wie HouseBlendWithMilkAndVanilla zu vermeiden. Dazu dekorieren wir ja die Einzelteile... Wieso sollte man das dann umständlich vermeiden (zB durch Factorys) diese Einzelteile zu erzeugen?
Gruß
Es ist nicht entscheidend, was der Mensch tut, sondern was er ist. (Henry Miller)

Jannik
Mausschubser
Mausschubser
Beiträge: 44
Registriert: 20. Okt 2005 12:01
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Jannik »

Wieso brauchst du eine Klasse HouseBlend um Kaffeeobjekte zu instanziieren? Wenn du eine weniger spezifische Klasse hast kann diese doch genau so instanziiert werden wie HouseBlend.

Aber du hast schon recht: Irgendwie ist bei diesen Starbuzz Aufgaben immer unklar wer wo was warum erzeugt... Haben dafür beim letzten mal auch eine Factory gebaut, ist aber eigentlich ziemlich schwachsinnig weil man die normalerweise aus ner Datenbank laden würde...
RC_KILL_CHILDREN="yes"

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Beitrag von marcel_b »

Hi,

wenn du mit HouseBlend anfängst, brauchst du dann für ein Stück Sachertorte mit Sahne auch eine Klasse SacherCake? Das soll definitv in dieser Übung nicht sein und führt vermutlich zum nicht bestehen.

Wenn dein Problem darin liegt, dass du eine konkrete BasisKlasse für Produkte zum Dekorieren brauchst... ok, dann mach das. Aber deshalb brauchst du noch lange keine Klasse für alle möglichen Produkte. Ansonsten hättest du nichts im Vergleich zur letzten Lösung (alle Produkte und Zusätze als eigene Klassen) gewonnen.

Auch wenn die Aufgabe das Decorator Pattern etwas extrem anwendet, in dieser Aufgabe sollt ihr den Decorator in "Reinform" kennenlernen - "dynamische vs. statische Vererbung" eben...

3 Teams haben die Aufgabe aus Ex 04 genau so gelöst - ohne konkrete Klassen für alle Produkte. In der Studenten-Präsentation wurde auch eine Lösung mittels Decorator skizziert bzw. kurz diskutiert (warst du bei der Übungsbesprechung?).

Viele Grüße
Marcel

ujs
Windoof-User
Windoof-User
Beiträge: 38
Registriert: 13. Jul 2004 14:33

Beitrag von ujs »

Was sind denn jetzt genau die Requirements für das Bestellsystem?
- Muss z.b. verhindert werden, dass man einem "Orange Juice" eine Größe (z.b. Grande) zuordnen kann (Ex4: Fruit juices have a fixed size)?
- Muss das komplette Menü modelliert werden (so wie in Übung 4)?
- Muss jeder Kaffee eine Größe haben (Ex4: Coffees have one of three sizes)?

Es geht also darum ob man verhindert dass die Decorator beliebig miteinander kombiniert werden können; und ob man die Dekorierung von Kaffees mit einer Größe erzwingen muss.

Viele Grüße
Uwe

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Beitrag von marcel_b »

Es gelten weiterhin die gleichen Anforderungen wie in Ex 4.4.2 + die Einschränkungen/Verallgemeinerungen in Ex 6. Unerlaubte oder falsche Kombinationen müssen jedoch nicht abgefangen werden. Das sicherzustellen ist Job der Clients der ProductFactory.

ujs
Windoof-User
Windoof-User
Beiträge: 38
Registriert: 13. Jul 2004 14:33

Beitrag von ujs »

marcel_b hat geschrieben:... Das sicherzustellen ist Job der Clients der ProductFactory.
Sollen wir dann auch eine ProductFactory implementieren?

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Beitrag von marcel_b »

Wie in der Übung gesagt. Kein muss aber es bietet sich an entsprechende Methoden zur Verfügung zu stellen, damit man seine Tests einfach schreiben kann.

Benutzeravatar
Ultr1
Mausschubser
Mausschubser
Beiträge: 99
Registriert: 13. Okt 2004 17:53
Wohnort: Dreieich
Kontaktdaten:

Beitrag von Ultr1 »

Ich denke nun die Factory ist schon Pflicht... Man darf wie oben ja gefragt keine eigenen Klassen haben. Mein Problem war, dass das nichts mit dem Decorator zu tun hat. Aber Sinn macht es sicherlich.
Es ist nicht entscheidend, was der Mensch tut, sondern was er ist. (Henry Miller)

Benutzeravatar
General_Hate
Neuling
Neuling
Beiträge: 5
Registriert: 5. Dez 2007 16:14

Beitrag von General_Hate »

Eine Factory ist meiner Meinung nach angebracht. In der Testklasse private Klassen zu erstellen macht genausowenig Sinn wie eine Klasse für jedes einzelne Produkt.

Mit einer Klasse für konkrete Produkte sieht es genauso aus. Diese kann die Factory dann benutzen um ihren Dienst zu tun.

Generell lässt sich das Decorator Pattern hier sehr schön anwenden, es wäre damit aber ekelhaft (wenn gefordert) unerlaubte Kombinationen zu verhindern. Dies liess sich mit einzelnen Klassen für die Produkte und dem Prototype Pattern gut machen.

Es gibt wie gefordert zwar wenige Klassen für das Erstellen von Produkten, jedoch bläht sich die Factory Klasse mit entsprechenden Creator Funktionen nach und nach auf, sie ist demnach auch im Sinne von OCP nicht gegen Einführung neuer Produkte etc abgeschlossen. Dies liess sich mit einzelnen Klassen problemlos erreichen.

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Beitrag von marcel_b »

Laß uns mal den Gedanken weiter durchspielen:

Heißt das, dass du den Supermarkt mit um die Ecke mit 2000 Produkten oder die McDonalds Speisekarte mit 40 Produkten modellieren würdest, indem du für jedes Produkt eine eigene Klasse schreibst?

Benutzeravatar
General_Hate
Neuling
Neuling
Beiträge: 5
Registriert: 5. Dez 2007 16:14

Beitrag von General_Hate »

Dann natürlich nicht.

Wenn es aber um eine Speisekarte mit verschränkten Kombinationen geht und die Karte mit Sicherheit keine 2000 Produkte enthalten wird, kann man die Kombinationen mit einzelnen Klassen besser kontrollieren. Im Supermarkt ist es völlig egal, in welchen Kombinationen man kauft... denkt man aber weiter, so könnte es ja auch Rabatte geben auf einen grossen Espresso mit Sahne usw. dann funktioniert das einfache addieren der Preise natürlich nicht mehr und man müsste die Decorator kompliziert traversieren.

Bei McDonalds gibt es alle Jahr mal ne extra Wurst und insgesamt schätzungsweise 50 verschiedene Posten. Wenn man domänenbeschränkt denkt finde ich es prinzipiell nicht wirklich verwerflich 50 Produktklassen zu haben (um unterschiedliche MenüPreise zu behandeln usw.) anstatt eine Factory mit 50 Methoden. Diese wäre dann wie gesagt nicht mehr OCP konform. Eine neue eingefügte Klasse würde den bestehenden Code in keiner Weise ändern.

Und wie gesagt, wir behandeln eine übersichtliche Speisekarte und kein Mega-Sortiment...

p.s. Ich will mich ja gar nicht weigern, das Decorator Pattern zu verwenden. Aber ihr habt uns beigebracht sich nur um die momentanen Anforderungen zu kümmern. Und diesmal ist es halt nicht OCP sondern Decorator

Antworten

Zurück zu „Archiv“