Wie lässt sich die Aggregation in Java über innere Klassen realisieren?

2 Antworten

Aggregation ist der Sonderfall einer Assoziation (s.u.). Sie drückt ein starkes semantisches Verhältnis von zwei an sich selbständigen Objekten aus, von denen eines Teil des anderen ist ('IS-PART-OF').
Beispiel: Der Motor ist Teil eines Autos

Das lässt sich natürlich wunderbar durch innere Klassen in Java modellieren, da es diese "Ist Teil von" Beziehung noch mal strukturell verdeutlicht. Willst du, dass diese Klasse dann auch nicht von extern verwendet werden kann, dann deklarierst du sie als private oder protected, was die innere Klasse noch mal zusätzlich an die Äußere bindet.

Nun musst du nur noch entscheiden, ob deine innere Klasse static sein soll, oder ob du tatsächlich Objekte von ihr benötigst.

Hier mal n paar Beispiele in Englisch.

Woher ich das weiß:Berufserfahrung – Berufserfahrung

KathaHohenfels 
Fragesteller
 30.06.2022, 15:35

Wenn ich aber doch eine innere Klasse nutze, dann kann diese doch nur mithilfe der äußeren Klasse genutzt werden oder nicht? Dann ist es aber keine Aggregation, oder? Sondern eine Komposition...

1
Destranix  30.06.2022, 15:38
@KathaHohenfels

Eine Komposition würde man über eine nicht-statische innere Klasse realisieren.

Dann könnte diese nicht ohne ein Objekt der äußeren Klasse genutzt werden.

1
TheQ86  30.06.2022, 16:05
@Destranix

ob statisch oder nicht spielt mMn untergeordnete Rolle. Ist die innere Klasse private static, kann sie trotzdem nicht von außen angesprochen werden. egal ob ein Objekt der äußeren Klasse existiert, oder nicht.

0
Destranix  30.06.2022, 16:06
@TheQ86

Dann kann sie aber auch existieren, ohne ein zugehöriges äußeres Objekt, dann ist es keine Komposition mehr.

1

Ich verweise auf:

https://www.gutefrage.net/frage/aggregation-und-komposition-code-beispiel-in-java#answer-441799384

Aggregation B->A:

class B{
    public A part;
}
class A{
    //...
}

Quasi wie auch eine Assoziation.

Man könnte auch darüber nachdenken, dass man A als statische lokale Klasse von B definiert, das wird aber dann schwierig, wenn A Teil mehrerer Klassen sein kann.


ZaoDaDong  30.06.2022, 15:25

Bist du sicher, dass das so richtig geklammert ist?

Edit: Habe wahrscheinlich dein Beispiel falsch interpretiert.

1
Destranix  30.06.2022, 15:27
@ZaoDaDong

Ja, das soll so. Enthält hier keine inneren Klassen, auf diese wird aber im Absatz darunter Bezug genommen (und erklärt, wieso diese nicht unbeding sinnvoll sind).

0
KathaHohenfels 
Fragesteller
 30.06.2022, 15:34
@Destranix

aber genau das ist ja meine Frage - gibt es irgendeine sinnvolle Möglichkeit, die AGGREGATION (nicht Assoziation) als innere Klasse umzusetzen?

0
Destranix  30.06.2022, 15:35
@KathaHohenfels

Als statische inner eKlasse könnte man das machen. Solange die innere Klasse nicht Teil mehrere Klassen sein soll macht das Sinn.
Bzw. wenn sie Teil mehrerer Klassen sein soll, dann kann man das evtl. über Superkalssen oder Interfaces regeln, aber das klappt auch nicht unbedingt immer sinnvoll.

1
verreisterNutzer  30.06.2022, 15:47
@KathaHohenfels

Assoziation ist eine Beziehung zwischen Klassen. Komposition und Aggregation ist eine Unterkategorie einer Assoziation.

1