Wie lässt sich die Aggregation in Java über innere Klassen realisieren?
Könntet ihr mir dafür ein Beispiel geben, wie man die Aggregations-Beziehung zwischen zwei Klassen mithilfe von inneren Klassen realisieren könnte? Ist das überhaupt möglich und wenn ja, mit welcher Art der inneren Klasse? Könnt ihr mir ein Beispiel geben?
LG Kath
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.
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.
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.
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.
Bist du sicher, dass das so richtig geklammert ist?
Edit: Habe wahrscheinlich dein Beispiel falsch interpretiert.
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).
aber genau das ist ja meine Frage - gibt es irgendeine sinnvolle Möglichkeit, die AGGREGATION (nicht Assoziation) als innere Klasse umzusetzen?
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.
Assoziation ist eine Beziehung zwischen Klassen. Komposition und Aggregation ist eine Unterkategorie einer Assoziation.
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...