Assoziation, Komposititon

O2016

Bekanntes Mitglied
Seien Klasse A und Klasse B gegeben.

Assoziation Bsp: PKW hat Räder , Räder können auch alleine stehen
Kombosition: Buch hat Buchseiten, Bücher können NICHT alleine stehen

Nun: Habe ich Klasse A -> (Raute, ausgefüllt -> Kombosition) auf Klasse B
dazu steht noch auf dem Pfeil (- Peter 1), ich denke das heisst private Peter??? und die1?

Was sagt mir das nun? Wie programmiere ich sowas?

Vielen Dank
 

httpdigest

Top Contributor
Also, erstmal heißt das nicht Kombosition (oder Kombosititon) sondern Komposition.
In Java gibt es konzeptuell keinen Unterschied zwischen einer Assoziation und einer Komposition. Beides kannst du einfach mit einem Feld in einer Klasse vom Typ der anderen Klasse realisieren. Auf welcher Seite nun das Feld deklariert werden muss, hängt wiederum von der "Navigierbarkeit" (gekennzeichnet durch Pfeilspitzen) an der Assoziation bzw. Komposition ab. Und, ob es als skalares Feld oder als Liste/Set deklariert werden soll, hängt von der "Multiplizität" (oder auch "Kardinalität") der Assoziation ab (0..1, 1, 0..* oder 1..*).
 

O2016

Bekanntes Mitglied
Hallo und vielen Dank. Könntest du mir ggf. den Unterschied der beiden rot markierten Stellen erklären? Pfeilspitzen sehe ich hier keine.

Vielen Dank
B.jpg A.jpg
 
X

Xyz1

Gast
Deine Applikation kann nicht ohne DataStore bestehen und jedes Subject was auch immer gemeint sei:confused: issen Observer - also beobachtet irgendwas.... steht dort:)
 

mrBrown

Super-Moderator
Mitarbeiter
Bei Aggregation bzw Komposition kannst du meist davon ausgehen, dass es vom "Elternteil" zum "Kind" zeigt.

MyApplication - DataStore:
Ein DataStore ist Teil einer MyApplication und kann damit immer nur zu genau einer gehören.

Subject - Observer:
Observer ist nicht Teil eines Subjects, ein Observer kann beliebig viele Subjects observieren (edit: und Subject wird von MAX_OBSERVERS Observern observiert).


Assoziation Bsp: PKW hat Räder , Räder können auch alleine stehen
Kombosition: Buch hat Buchseiten, Bücher können NICHT alleine stehen
Wenn: Buch hat Buchseiten, Buchseiten können NICHT alleine stehen.

Das "nicht allein stehen" ist nicht immer so streng zu sehen. Auto und Räder zB könnte man auch als Komposition modellieren (Rad ist Teil genau eines Autos, kann zwar alleine stehen, ist dann aber erst Unnütz, genauso wie das Auto ohne Räder.)
 
Zuletzt bearbeitet:
X

Xyz1

Gast
MyApplication - DataStore:
Ein DataStore ist Teil einer MyApplication und kann damit immer nur zu genau einer gehören.

Subject - Observer:
Observer ist nicht Teil eines Subjects, ein Observer kann beliebig viele Subjects observieren.
Das steht dort nicht.... Sach mal ließt Du überhaupt???? Das ist ja eine gezielte Fehlinformation verbreiten....:confused:
 

mrBrown

Super-Moderator
Mitarbeiter
X

Xyz1

Gast
Ich gehe nur nach den rot hervorgehobenen Assoziationspfeilen, und die nicht gefüllte Raute unten rechts ist entweder richtig dann iss Deines und der Rest des Diagramms falsch oder falsch

Du solltest nicht davon ausgehen.... dass dieses Diagramm richtig wäre....
 

mrBrown

Super-Moderator
Mitarbeiter
Ich gehe nur nach den rot hervorgehobenen Assoziationspfeilen, und die nicht gefüllte Raute unten rechts ist entweder richtig dann iss Deines und der Rest des Diagramms falsch oder falsch

Die Beziehung zwischen Subjekt und Observer ("die nicht gefüllte Raute unten rechts") ist eine Aggregation (und an der stelle sowohl syntaktisch als auch semantisch richtig).
Eine Aggregation ist keine "Ist ein"-Beziehung (also kein "jedes Subject [...] issen Observer" wie du meinst).

Die Aggregation passt auch zum Rest des Diagramms, wäre es keine Aggregation, wäre da etwas falsch.
 
X

Xyz1

Gast
Die Direktion der rot hervorgehobenen nicht gefüllten Raute unten rechts ist und bleibt falsch. Siehs ein.
 
X

Xyz1

Gast
Müssen wir uns jetzt streiten dass die Pfeilrichtung falsch ist? ....

Die das Interface implementierende Klasse bekommt übrigens ein schlichtes, von ihr wegzeigendes Dreieck spendiert....
 
X

Xyz1

Gast
Observer ist ein Interface, ja. Implementierende Beziehung kenne ich im Sprachgebrauch der UML nicht.... o_O
 

mrBrown

Super-Moderator
Mitarbeiter
Observer ist ein Interface, ja. Implementierende Beziehung kenne ich im Sprachgebrauch der UML nicht.... o_O
Dann nenn es eben Generalisierung...


Deine Änderungen kann man durchaus machen. Ist dann aber völliger Unsinn und hat mit dem dort gezeigten Observer-Pattern nichts mehr zu tun.

Subjekt ist das beobachtetet Objekt, Observer das beobachtende. Zwischen denen herrscht ganz offensichtlich keine Generalisierungs-Beziehung ("Ein Beobachteter ist ein Beobachter"), sondern eben die dort zu sehenden Aggregation ("Ein Beobachteter hat mehrere Beobachter").
 
X

Xyz1

Gast
Subjekt ist das beobachtetet Objekt, Observer das beobachtende.
Nonsense.

Observer ist ein das Subjekt zu observierender Observierer.

Observer kennzeichnet eine von bis zu 10 Observable zu observierende Klasse aus.

Das Observable bestimmt wer es observieren darf. Das ist doch eigentlich ganz einfach?
 

mrBrown

Super-Moderator
Mitarbeiter
Observer ist ein das Subjekt zu observierender Observierer.
Richtig - Observer soll Subjekt observieren. Genau das ist vollkommen richtig in dem Klassendiagramm dargestellt.

Observer kennzeichnet eine von bis zu 10 Observable zu observierende Klasse aus.
WTF?
Das Observable bestimmt wer es observieren darf. Das ist doch eigentlich ganz einfach?
Joa, einfach irgendwelchen Unsinn sagen, ist immer leicht ;)
 

O2016

Bekanntes Mitglied
Ok und was muss ich in welche Klasse jetzt genau rein tun, damit das schwarze und nicht schwarze Raute korrekt im Code vorhanden ist?
 

O2016

Bekanntes Mitglied
Ich beschreibe es mal in eigenen Worten,
in MyApplication schreibe ich genau die Variable(wenn man es so nennen kann), welche auf der anderen Seite steht.
Bei mehr als 1,aslo z.B. 0 bis MAX_Observers verwende ich ein Array
 

Ähnliche Java Themen

Neue Themen


Oben