Assoziation, Aggregation und Komposition
-
@ CStoll:
Ok. Stimmt da gib ich dir recht.
Sagen wir ein Blatt kann nicht ohne Baum leben. Theoretisch sollte das so sein
-
CStoll schrieb:
lucky_tux schrieb:
Ein Blatt existiert nicht ohne Baum.
Bist du sicher
Meine Erinnerungen an den letzten Herbst sagen das Gegenteil.
Das Blatt wartet nur auf den Garbage Collector
-
Hey, wir reden hier von C++, da gibt es keinen Garbage Collector
-
Darum liegt das Laub noch im Frühling im Wald am Boden
-
Muss bei diesen alten Thread nochmal nachhaken sorry.
Also nochmal:
Komposition: das assoziierte Objekt ist an das Objekt gebunden, und sirbt mit ihm.
Aggregation: das assoziierte Objekt ist auch ohne das Objekt lebensfähig.Ok im UML Klassendiagramm kann man die entsprechenden Pfeilchen mit schwarzen oder weissen Viereck an der Spitze nehmen usw.
Meine Frage: Wie ist das in der Implementierung gedacht. Sagen wir in C++:
gilt dann folgendes:
Komposition: Vererbung? (Da sterben ja die abgeleiteten Klassen auch wenn die Basisklasse stirbt.) Nur für Vererbung gibt es ja das "realize"-Pfeilchen, das ist es also nicht. Bei welcher Beziehung stirbt denn sonst das andere Objekt mit?Aggregation: Zeiger auf ein Obj einer anderen Klasse? Dann kann ja das andere Objekt immer noch weiterleben auch wenn die eine stirbt.
Kann das jemand erklären bitte
-
JDHawk schrieb:
Komposition: Vererbung? (Da sterben ja die abgeleiteten Klassen auch wenn die Basisklasse stirbt.) Nur für Vererbung gibt es ja das "realize"-Pfeilchen, das ist es also nicht. Bei welcher Beziehung stirbt denn sonst das andere Objekt mit?
Element-Beziehung:
[cpp]class komposition
{
string element;
};Aggregation: Zeiger auf ein Obj einer anderen Klasse? Dann kann ja das andere Objekt immer noch weiterleben auch wenn die eine stirbt.
Entweder Zeiger oder auch Referenzen.
-
Stimmt das Objekt string würde ja mitsterben, danke.
Wenn wir schon beim Thema UML sind, hab ich eine Frage, wenn ich darf:Ich schreibe eine C++ Anwendung, die Daten mit einer C Anwendung austauscht.
Kann ich irgendwie meine C Funktionen auch ins Klassendiagramm miteinmodellieren?
Beide Anwenungen tauschen ja miteinenader Daten aus.Ich weis sehr dumme Frage aber ist halt blöd wenn ich nur die C++ Seite im Klassendiagramm vorstellen kann. :p
-
Das wird schwierig - UML ist für die Darstellung von objektorientierten Strukturen vorgesehen. Du könntest den Anteil "C Anwendung" eventuell als eigenständige Klasse darstellen und die C Funktionen als Member dieser Klasse.
(btw, ist es überhaupt nötig, jeden sch*** in UML zu quetschen?)
-
Danke für den Tip.
Eine Frage noch:
Wenn ich über einen Zeiger ein Objekt dyn mit "new" erzeuge und es im Destruktor mit "delete" explizit sterben lasse, habe ich eine Komposition erzwungen oder?
-
Einfach gesagt ja.
Es ist nicht so ganz einfach in C++ Assoziation, Aggregation und Komposition auseinander zu halten, weil C++ diese Beziehungsarten in der Form nicht kennt und man die Eigenschaften selbst nachprogrammieren muss.
So kann eine Assoziation, eine Aggregation als auch eine Komposition mit Hilfe eines Zeigers abgebildet sein. Erst die Art wie der Pointer verwaltet wird definiert um welche Beziehung es sich handelt.