Laden...

UML komposition oder aggregation?

Erstellt von Olii vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.894 Views
O
Olii Themenstarter:in
76 Beiträge seit 2017
vor 6 Jahren
UML komposition oder aggregation?

Hallo Leute,
Ich arbeite immer noch meine Aufgaben ab und habe noch eine kleine Frage zu Assoziationen.
So wie ich das verstanden habe ist Assoziation ein überbegriff für die komposition und aggregation. Jetzt habe ich hier eine Aufgabe (aufgabe c, bild im anhang) die möchte das ich bestimme was von beiden richtig ist.
Aggregation ist ja eine lose Beziehung Zwischen 2 objekten und eine komposition sagt ja das ein objekt aus mehreren teilen besteht die unabdingbar sind.
Aber die Aufgabestellung sagt mir irgendwie rein garnichts.... Ein Streichholz kann mehrere Streichhölzer anzünden. Wenn ich raten würde würde ich sagen es ist eine aggregation aber ich würde gerne wissen wie Ich das rausfinden kann.
Kann mir jemand bitte helfen? :3
Ich danke schon mal ganz lieb im voraus.

6.911 Beiträge seit 2009
vor 6 Jahren

Hallo Olii,

mit der Aggregation hast du recht.

würde gerne wissen wie Ich das rausfinden kann.

Über die "Lebensdauer" der Objekte.
Bei der Komposition ist alles kaputt / tot wenn die 1-Seite kaputt / tot ist.
Bei der Aggregation kann die n-Seite noch leben, wenn die 1-Seite kaputt ist.

Wenn ein Streichholz viele andere anzünden kann, so können auch noch welche übrig bleiben, daher Aggregation.

Wenn ein Haus gesprengt wird, so sind auch alle Räume kaputt, daher Komposition.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

O
Olii Themenstarter:in
76 Beiträge seit 2017
vor 6 Jahren

Vielen dank das macht das schon viel klarer. Wie müsste ich dann so ein Klassendiagramm zeichnen? Eine Klasse Streichhölzer und eine zweite Klasse "mehrere Streichhölzer" macht ja irgendwie keinen Sin. Zwei Klassen "Streichhölzer"? Ist auch irgendwie nicht richtig. Irgendwie muss ich ja eine Verbindung darstellen können. Oder einfach nur eine Klasse "Streichhölzer" und Aggregation drunter schreiben? Es bringt mich total aus dem Konzept das es irgendwie zweimal das gleiche Objekt ist. Also Streichholz und Streichhölzer. Wäre es etwas wie Produkt benötigt mehrere Produktteile oder so dann könnt ich das noch locker darstellen aber die Streichhölzer hauen mich weg 😄

P
1.090 Beiträge seit 2011
vor 6 Jahren

Eine Klasse Streichhölzer und eine zweite Klasse "mehrere Streichhölzer" macht ja irgendwie keinen Sin.

Naja der Grundansatz ist doch schon mal richtig. Ich kann keine „Menge“ von Objekten haben. Ohne erst mal das Grundlegende Objekt.

Du Brauchst also erst mal eine Klasse „Streichholz“.

Dann brauchst du noch eine Sammlung (Collection) von Streichhölzern. In C# eine Klasse die z.b. IList<Streichholz> hat. In der „Realen „Welt würde man sie dann als z.B. als Streichholzschachtel bezeichnen. Wie gfoidl gut erläutert hat, ich kann mir aus der Schachte ein Streichholz raus nehmen
und mir damit eine Zigarette anzünden und den Rest der Streichhölzer gibt es noch. Also ist es eine … (Erzenge mal den Satz. 😉 .)

Es sind in der Aufgabenstellung auch noch ein paar Hinweise drin welche Eigenschaften und Methoden, das Objekt Streichholz haben sollte (entzünden).

Da es wohl eine Hausaufgabe ist und du wohl darüber die OOP (Objekt Orientierte Programmierung) verstehen sollst. Probiere mal selber das Klassen Diagramm zu erstellen. Hinweise hast du jetzt ja ein Paar. Ich denke wir können dann mal über das Fertige Diagramm drüber schauen.

p.s. Da es Punkt c) von er Aufgabenstellung ist. Kann es sein da uns da wichtige Informationen fehlen.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

6.911 Beiträge seit 2009
vor 6 Jahren

Hallo Olii,

Wie müsste ich dann so ein Klassendiagramm zeichnen?

Siehe angehängtes Bild.

Auf der Streichholz-Seite:* 1 Steichholz kann mehrere anzünden

Auf der Streichhölzer-Seite:* mehrere Streichhölzer können von einem angezündet werden -> 1-Ende

  • ein od. mehrere Streichhölzer können auch nicht angezündet werden -> 0-Ende

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

49.485 Beiträge seit 2005
vor 6 Jahren

Hallo zusammen,

also ich sehe hier ehrlich gesagt nichts von beidem. Aggregation und Komposition bedeutet ja in der Regel beides, dass die Klasse ein Member enthält, das auf die assoziierten Objekte verweist (Aggregation) oder diese enthält (Komposition) (*).

Klar könnte man sagen, dass das Streichholz wissen soll, welche anderen Streichhölzer es anzündet bzw. angezündet hat. Dann wäre es Aggregation und die Klasse Streichholz hätte ein Member angezuendeteStreichhoezer oder anzuzuendendeStreichhoezer.

Aber ist das hier wirklich das Gewünschte? Eigentlich würde man doch eher erwarten, dass es eine Methode ZuendeAn gibt, und die bekommt als Parameter, welche Streichhölzer angezündet werden sollen. Dann läuft die Beziehung (also allenfalls einfache Assoziation, aber weder Aggregation und erst recht nicht Komposition) locker über die Parameter der Methode, ganz ohne Member.

Bin ich gerade neben der Spur?

herbivore

(*) Auch wenn das beides technisch üblicherweise über eine normale Referenzvariable realisiert wird und der Unterschied nur darin liegt, wie die Variable im Code behandelt wird. Zum Beispiel dass bei Komposition Destroy für die Variable aufgerufen wird, wenn das umgebende Objekt destroyed wird und bei Aggregation nicht.

6.911 Beiträge seit 2009
vor 6 Jahren

Hallo herbivore,

Bin ich gerade neben der Spur?

Ganz und gar nicht. Eine Umsetzung per Methode wäre das natürlichste für Zündhölzer. Zuerst eine Eigenschaft setzten (Aggregation) und dann die Methode ZuendeAn ausführen ist wohl etwas umständlich, wenn es direkt auch ginge.

Die Aufgabenstellung (oben) ist aber schon sehr abstrakt und lässt den Methodenaufruf außen vor (sehe ich so und wohl der OT auch).

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

P
1.090 Beiträge seit 2011
vor 6 Jahren

Hi herbivore,

ich denke hier gibt es viele Lösungen. Mir gefällt die von gfoidl eigendlich recht gut, da siet einfach ist (KISS).

Wie oben erwähnt hätte ich es wohl komplizierter gemacht. Streichholz hätte bei mir vielleicht die Property "Zustand" die Angibt was mit dem Streichholz ist z.B. Anzündbar, Brennend , Verbrand.
Dann hätte ich vielleicht noch eine Klasse Streichholz schachte, welche die Streichhöler enthält. Und dann vielleicht noch eine Klasse "Mensch" der die Streichhölzer anzündet.

Ich denke das würde auch klappen. Ist aber deutlich komplexer als gfoidls Lösung.

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

49.485 Beiträge seit 2005
vor 6 Jahren

Hallo zusammen,

klar hängt es letztlich von der konkreten Aufgabenstellung ab. Und wenn ich es mir jetzt nochmal genauer überlege, sind sicher sind Fälle denkbar, in denen genau das Sinn macht:

Zuerst eine Eigenschaft setzten (Aggregation) und dann die Methode ZuendeAn ausführen ist wohl etwas umständlich ...

Nämlich wenn man so ein Art Streichholz-Domino-Day spielen will, also Streichhölzer erst lustig aneinander legt (ZuendetAn-Property) und dann erst später das Startstreichholz anzündet (ZuendeAn-Methode), so dass (möglichst) alle abbrennen. (*)

Dann wäre es Aggregation. Wenn man das Gebilde als Gesamtkunstwerk sieht, könnte es sogar Komposition sein.

Auch wenn das bedeutet, dass es keine einzige eindeutig richtige Lösung gibt, und dadurch kurzfristig vielleicht verwirrt, könnte mein Einwurf doch langfristig hilfreich sein, weil es auch im späteren Informatikerleben immer genau die verschiedenen Möglichkeiten und deren Vor- und Nachteile gegeneinander abzuwägen gilt.

herbivore

(*) Man könnte vielleicht noch eine Zündwahrscheinlichkeit setzen und dann mehrere Durchläufe spielen, um zu prognostizieren, wie viele Streichhölzer wohl abbrennen werden und wie viele nicht.