[Design Pattern] Strukturelle Muster: Decorator

Hi slowy,
also interessantes Beispiel mit dem Haus und den Räumen. Es verdeutlicht gut was Du meinst.
Also beim lesen was eine Komposition sei, stoße ich auf die generelle Beschreibung, dass ein Teil eines gesammten vergeht so das Gesammte nicht mehr existiere.
Es wird nicht darauf Bezug genommen in wie fern die Klasse selbst, die als Teil verwendet wird, nur in der oder einer Klasse vorkommen darf, die als Gesamtes fungiert.
Es wird auch nichts darüber erzählt, ob das Teilstück nicht auch außerhalb des Gesamtobjekts angesprochen werde darf (pivate/public etc).
In Deinem letzten Beispiel Haus und dem Vermerk, dass die Gabagecollection zuschlägt und in Deine Räume dann natürlich noch stehen bleibt ist tatsächlich erstmal ein Beleg einer implementatorischen Lücke. Sie gilt dann aber nur solange bis die Routine, die sich mal die Liste der Räume gekrallt und aufgehoben hat aufhört, vorausgesetzt, sie egibt die Refferenz auf die Raumliste nicht irgendwie weiter. Ich finde man sollte hier über die Eigenschaft von Java, selbst mit Garbagecolletion aufzuräumen etc. hinwegsehen, oder?
Aus meiner Sicht ist die Intenstion der Modelierung entscheident, nicht unbedingt die Lücke, die innerhalb eines Angebots der spezifischen Sprache übrig bleiben mag.
Wenn man also in dem Haus/Raum Beispiel sicher gehen möchte, dass ja niemals nicht ein Raum außerhalb eines Objektes Haus behalten werden kann, müssen halt alle Manipulationen, die bei einem Raum möglich sind, über (z.B.) Haus delegiert werden, und die Räume selbst dürften dann halt weder einzeln noch als Liste geholt werden können: (also eitwas wie getRaum() oder getRäume() gibt es dann halt nicht).
Ich wage sogar zu meinen, dass Raum nicht unbedingt eine private Klasse sein muss. Kann ja sein dass man Räume auch gerne für sich selbst oder für andere Situatioen verwenden können möchte, was an der "Komposition" Haus dann auch nichts änden würde.

Mit philosophischen Grüßen
Takidoso
 
Zuletzt bearbeitet:
Hallo

Ich finde man sollte hier über die Eigenschaft von Java, selbst mit Garbagecolletion aufzuräumen etc. hinwegsehen, oder?
Hmm,... nein, das denk ich nicht. Ich kann dir auch ein Design machen, in welcher Klasse A von den abstrakten Klasse B und C erbt. In Java geht das nicht, in anderen Sprachen schon.

Es gibt natürlich vieles, was eine Sprache anbietet, was man mit UML Klassendiagrammen auch designen kann: Klassen, Interfaces, Abstraktionen, Beziehungen etc. Aber wenn ich jetzt solche Dinge wie einen XOR-Constraint designe (Klasse A hat entweder Klasse B oder Klasse C, aber weder beide zusammen noch keinen), bietet Java keine Notierung an, die das macht. Dann muss ich halt im Konstruktor schauen, dass mindestens und maximal eines der Übergabeparameter nicht null ist. Genau so wenn ich die Werte über setter neue setze. Setze ich den Wert B, der null ist, auf einen Wert, der nicht null ist, muss ich den Wert C auf null setzen, da ich sonst das Design verletze.

Oder ein WSDL kann auch Multiplizitäten definieren - wie in UML -, welche ich im Code mit Annotations des entsprechenden Frameworks setzen kann. Dann wird so eine "Implementierung eines Designs" (z.B. mindestens ein Artikel muss in einer Bestellung drin sein) vom Framework übernommen. Wäre dem nicht so, müsste den Request vorher manuell validieren und bei Falscheingaben entsprechend reagieren.

Gruss
slowy
 
Ich glaube wir sind nun irgendwie beim abdrifften vom ursprünglicen Thema....
In meinem ersten Post ging es mir doch nur darum zu sagen, das in dem obigem Beispiel einer Komposition nicht die Sonenblume von den Bilddaten, sonder die Bildaten von der Sonnenblume abhängt. Wird also ein objekt Sonnenblume gekillt (Sonenblume als ganzes betrachtet, gehen auch ihre Bilddaten PIage übern Jordan.
Die Aussage von Tom
"Wenn also die Sonnenblume von der existenz eines PImage abhängig ist - ohne PImage gibt es keine Bild-Daten - dann liegt eine Komposition vor." würd aus meinr Sicht die Verhältnisse um drehen. Demnach wären die Bilddaten das Ganze und Sonnenblume ein Teil davon.
Der Code sagt aber irgendwie was anderes, oder?
Wie siehst Du das, slowy?
 
Zurück