# Frage zu Beziehungen zwischen Klassen und UML



## Leeprasteen (13. Aug 2004)

wenn eine Klasse eine andere Klasse instantiiert und diese Instanz benötigt um (sinnvoll) Ihre aufgabe zu erfüllen, handelt es sich dabei um eine Aggregation!?

hintergrund der frage:
ich habe eine java-anwendung und wollte mit einem tool (jumli) aus dem sourcecode klassendiagramme erzeugen. in manchen klassen kommt es aber vor, dass instanzen von anderen klassen zwar für den sinn der klasse wichtig sind, aber nur in einer methode benötigt werden. deswegen sind sie auch nur in dieser methode deklariert. in diesen fällen erstellt das uml-tool im klassendiagramm aber keine aggregation zwischen den beiden klassen. aggregationen werden nur erstellt, wenn die instanz global in der klasse deklariert ist.
liegt das nun einfach an dem tool, dass es nicht alles aggregationen erkennt oder handelt es sich bei in methoden deklarierten instanzen nicht um aggregationen???


----------



## Isaac (13. Aug 2004)

Dein Tool macht das schon ganz richtig.


----------



## bygones (13. Aug 2004)

In UML gibt es unterschiedl. Arten von Relationen von Klassen:
*Assoziation, Aggregation und Composition*

Eine Assoziation ist das einfache Verhältnis zweier Klassen, d.h. wenn eine Klasse z.b. eine Instanz der andere Klasse beinhaltet (allg. wenn die eine Klasse die Möglichkeit hat Nachrichten an die andere Klasse zu schicken).

Eine Aggregation ist ein SpezialFall einer Assoziation - sie entspricht der Teil / Ganzen Beziehung. 


> This is exactly the same as an association with the exception that instances cannot have cyclic aggregation relationships


----------



## Leeprasteen (13. Aug 2004)

@deathbyaclown - also handelt es sich bei der Beziehung zwischen den beiden Klassen "nur" um eine Assoziation, auch wenn innerhalb der Anwendung eine Klasse ohne die andere keinen funktionalen Sinn ergibt?

@Isaac aber ist es von dem tool richtig gar keine Beziehung zwischen den Klassen zu erstellen, wenn eine Instanz der einen innerhalb einer Methode der anderen angelegt wird?


----------



## Leeprasteen (13. Aug 2004)

und noch ne frage - worin besteht der unterschied zwischen einer Assoziation und einer Abhängigkeit/Dependency bzw wann verwendet ich was!?


----------



## bygones (13. Aug 2004)

Assoziation:
Assoziation stellen Beziehungen zwischen Klassen dar. Sie werden in Programmiersprachen meistens durch entsprechende Referenzattribute in den beteiligten Klassen realisiert, bei höherer Multiplizität mit einem Sammlungsobjekt (Collection)

Abhängigkeit:
Eine Abhängigkeit ist eine Beziehung zwischen zwei Modellelementen, die zeigt, daß eine Änderung in dem einen (unabhängigen) Element eine Änderung in dem anderen (abhängigen) Element notwendig macht


----------



## Leeprasteen (13. Aug 2004)

das heisst, wenn eine Klassen eine andere Instantiiert und dann beide miteinander kommunizieren, sind sie von einander abhängig, denn wenn ich den Konstruktor oder die Kommunikationsschnittstelle der einen Klasse verändere muss ich die instantiierende Klasse auch anpassen!?


----------



## bygones (13. Aug 2004)

ja - eine Assoziation ist zugleich auch eine Abhängigkeit - eine Abhängigkeit aber keine Assoziation


----------



## Leeprasteen (13. Aug 2004)

das hab ich ja soweit auch verstanden, aber warum ist jetzt wieder von Assoziation die Rede - ich denke es handelt sich bei dem Beispiel nur um eine Abhängigkeit?


----------



## bygones (13. Aug 2004)

wie du selbst sagst es wird nur eine Assoziation erstellt wenn eine Klasse eine Instanz einer anderen hält... ansonsten (im Falle eines Parameters) handelt es sich nur um eine Abhängigkeit


----------



## Leeprasteen (13. Aug 2004)

also das ganze wird mir eher undurchsichtiger als klarer - was hat das jetzt mit parametern zu tun!?

einfach das ganze nochmal direkt an einem beispiel:
angenommen es gibt eine klasse TEST und eine klasse PING.
die klasse PING ist von Thread abgeleitet. sie bekommt als übergabewert ein Array mit IP-Adressen, versucht die alle anzupingen und liefert jedes Ergebnis einzeln direkt beim eintreffen an, die aufrufende Klasse zurück.
in einer Methode der klasse TEST wird ein PING-Objekt deklariert und eine neue Instanz angelegt und dann auf die Ergebniswerte gewartet.
handelt es sich bei dieser beziehung nun um eine Assoziation oder um eine Aggregation?
meiner meinung nach um eine Aggregation, doch das UML-tool erkennt sie nicht als solche. es würde nur eine Aggregation erkennen, wenn die Deklaration nicht in der methode sondern bereits im konstruktor von TEST-klasse erfolgen würde!?


----------

