# Aggregation und Komposition umsetzen



## raynic (29. Sep 2007)

Hi,
wie wird Aggregation und Komposition in Java programmiert? Oder muss man es überhaupt selbst programmieren?
Wird es vieleicht durch die JVM geregelt? Vielleicht gibt es ja bestimmte Pattern dafür?

Ich habe das Problem, dass ich nicht genau weiss wie ich es umsetzen soll. Eine Aggregation ist einfach, da Objekte ja Teil von mehreren anderen Objekten sein können und nicht mit gelöscht werden. Aber wie kann ich eine Komposition programmieren?

Danke...
Gruss raynic


----------



## Wildcard (29. Sep 2007)

Ein Container ist beispielsweise eine Komposition wenn gewährleistet ist, das jedes der Kinder nur in diesem einen Container liegt. Der Container definiert sich dabei als Summe seiner Teile. Eher ein Modellierungskonzept als ein programmatisches Problem.


----------



## Guest (2. Okt 2007)

Hallo

Kurz Definition damit wir vom selben reden

Komposition:

- Exakt ein "Vater" Object
- Vater hat n Exemplare, wobei n >= 1
- Loeschen des Vaters loescht alle Kinder, was durch Punkt eins automatisch Gewaehrleistet ist, da das "Kindelement" nicht referenziert wird !!

Also:

Der zweite Teil ist relativ einfach durch die Verwendung eines Konstruktors zu erfuellen.

Sprich das Problem beschraenkt sich auf die Sicherstellung, dass jedes Object exakt einmal referenziert wird. Dies ist vermutlich nicht moeglich. Es helfen keine Entwurfsmuster noch sonstige Konstrukte, denn sobald du das Object nach aussen gibst. Kann es von einem anderen "Missbraucht" werden. Selbst wenn du es nicht nach aussen gibst. Kann es in der Klasse selbst "Missbraucht" werden. Allerdings ist dies wohl eher zu vernachlaessigen. Daraus folgt-->

Erstellung des Objectes im Konsturktor des VaterObjectes und keine Weitergabe nach aussen.


----------



## Wildcard (2. Okt 2007)

Anonymous hat gesagt.:
			
		

> Sprich das Problem beschraenkt sich auf die Sicherstellung, dass jedes Object exakt einmal referenziert wird.


Es spricht nichts gegen Referenzen, das Objekt darf allerdings nur einen (logischen) Vater besitzen.
Man sieht zum Beispiel an EMF. dort können Kompositionen modelliert werden, indem man das Containment Feature einer Referenz auf true setzt. Der Container ist dann der Vater des Objekts und alleine für dessen Persistierung verantwortlich. Setzt man dem Kind einen neuen Container, so wird es aus dem alten entfernt. 
Das gleiche lässt sich auch bei Swing Components beobachten. Sie haben zu jeder Zeit nur einen Parent.


----------



## maki (2. Okt 2007)

http://faq.javaranch.com/view?AssociationVsAggregationVsComposition


----------

