Beziehungen zwischen Klassen und Objekten
In der Informatik gibt es viele verschiedene Beziehungen zwischen Klassen bzw. zwischen Objekten verschiedener Klassen, allgemein werden solche Beziehungen als Assoziationen bezeichnet.
Machen wir uns die verschiedenen Typen dieser Beziehungen an ein paar Java-Beispielen klar. Es ist oft sehr schwer, die verschiedenen Bezeichnungen wie Aggregation, Komposition, HAT-Beziehung, KENNT-Beziehung und IST-Beziehung auseinander zu halten. Relativ eindeutig ist nur die IST-Beziehung, mit der man das Vererben von Instanzvariablen und Methoden von einer Oberklasse an eine Unterklasse bezeichnet.
Starke Komposition
Beispiel 1
public class Verwaltung { Person pers; public Verwaltung() { pers = new Person("Mustermann"); // weiterer Code ... } }
Beispiel 2
public class Held { Waffe schwert = new Waffe(2); Waffe dolch = new Waffe(3); // weitere Attribute und Methoden ... }
Eine solche starke Komposition wird in der Didaktik auch als HAT-Beziehung bezeichnet.
Die Hauptklassen (Verwaltung, Held) besitzen eigene Objekte anderer Klassen (Person, Waffe). Diese Objekte werden als Instanzvariablen von der Hauptklasse erzeugt. Außerhalb der Klasse existieren diese Objekte nicht, und wenn die Hauptklasse bzw. deren Objekte aufhören zu existieren, erlöschen auch die in der Hauptklasse erzeugten Objekte pers, schwert und dolch.
In der Fachliteratur spricht man nicht von einer HAT-Beziehung, sondern von einer starken oder dauerhaften Komposition. Manchmal spricht man auch von einer stark gekoppelten Teil-Ganzes-Beziehung: Das Teil (pers, schwert, dolch) ist an die Existenz des Ganzen (Verwaltung, Held) gekoppelt.
Schwache Komposition
Beispiel
public class Hauptklasse { public eineMethode() { Person pers = new Person("Karl"); // weiterer Code ... } }
Das Objekt pers der Klasse Person wird in einer Methode der Hauptklasse erzeugt und ist auch nur dieser Methode zugänglich. Die anderen Methoden der Hauptklasse haben keinen Zugriff auf das Objekt, und Methoden anderer Klassen natürlich erst recht nicht.
Diese Art der Komposition wird auch als temporäre, schwache oder lokale Komposition bezeichnet (je nach Quelle).
In der Didaktik wird eine solche schwache Komposition auch als KENNT-Beziehung bezeichnet. Die Hauptklasse KENNT Objekte der Klasse Person, HAT sie aber nicht dauerhaft in Form von Instanzvariablen.
Aggretation
Beispiel
public class Hauptklasse { Person pers; public Hauptklasse(Person karl) { pers = karl; // weiterer Code ... } }
Auch hier enthält die Hauptklasse Objekte einer anderen Klasse als Instanzvariablen - ähnlich wie bei der starken Komposition. Allerdings werden diese Objekte nicht in der Hauptklasse erzeugt, sondern außerhalb der Hauptklasse. In diesem Beispiel ist das Objekt pers lediglich eine zweite Referenzvariable, die auf den selben Speicherbereich zeigt wie das Objekt karl.
Das Objekt karl kann unabhängig von der Hauptklasse existieren und gleichzeitig auch Objekt anderer Klassen sein. Die Hauptklasse ist zwar weiterhin aus Objekten wie karl komponiert (zusammengesetzt), aber die Komposition wird als schwach bezeichnet.
Man könnte hier von einer schwachen HAT-Beziehung sprechen, manche Autoren bezeichnen diese Art der Komposition aber auch als KENNT-Beziehung, was dann in Konflikt mit der KENNT-Beziehung steht, die eine schwache Komposition meint. Am besten verzichtet man auf diesen Begriff, sondern spricht von starker und schwacher Komposition sowie von Aggregation.
Merke:
Starke Komposition (HAT-Beziehung)
Eine Klasse A besitzt Objekte x,y,z anderer Klassen dauerhaft als Instanzvariablen. Die Objekte hören auf zu existieren, wenn das Objekt der Klasse A gelöscht wird.
Schwache Komposition (KENNT-Beziehung ?)
Eine Klasse A besitzt Objekte x,y,z anderer Klassen vorübergehend als lokale Varibalen von Methoden. Die Objekte hören auf zu existieren, wenn die Methode der Klasse A beendet wird.
Aggregation (KENNT-Beziehung ?)
Eine Klasse A hat Zugriff auf Objekte x,y,z anderer Klassen, die auch unabhängig von A existieren können und auch gleichzeitig Bestandteile anderer Klassen sein können.
Der Begriff KENNT-Beziehung ist umstritten und sollte am besten gar nicht verwendet werden.
Quellen:
Fachliteratur (Auswahl)
- Balzert: Java: Der Einstieg in die Programmierung, 5. Auflage 2022
- Balzert, Arinir: Objektorientiert Programmieren, 4. Auflage, Springer-Verlag Berlin 2025.
- Barnes, Kölling. Java Lernen mit BlueJ - Objects first - Eine Einführung in Java. Pearson Education 2017.
- Lahres et al.: Objektorientierte Programmierung, Rheinwerk Computing 2021.
- Martin. Clean Code - A Handbook of Agile Software Craftmanship. Pearson Education 2009.
- Pohl, McDowell: Java by Disscetion, University of California, Santa Cruz 2006.
- Ullenboom: Java ist auch eine Insel - Einführung, Ausbildung, Praxis, Rheinwerk Computing 2024.
Internet-Quellen: