Home > Informatik > Begriffe und Konzepte > Assoziation

Assoziation

Definition

Binäre Assoziation

Eine binäre Assoziation (Binary Association) ist allgemein eine Beziehung zwischen zwei Klassen.

Beschreibung siehe folgenden Text

Ein Schüler besucht eine Schule

Dieses Bild zeigt ein Klassendiagramm in der gängigen UML-Notation. Das Diagramm zeigt zwei Klassen Schüler und Schule. Die Instanzvariablen und Methoden sind nicht weiter aufgeführt, weil diese bei der Besprechung von Assoziationen keine Rolle spielen.

Achten Sie darauf, dass in der UML-Notation bei der Wahl von Bezeichnern wie zum Beispiel Klassennamen keine so strengen Regeln gelten wie bei Bezeichnern einer Programmiersprache. In UML dürfen durchaus Umlaute und Sonderzeichen in Bezeichnern vorkommen, in Java oder C# ist das nicht erlaubt.

Der Pfeil deutet nun an, dass die Objekte der Klasse Schueler (so würde die Klasse in Java heißen) irgendwie mit Objekten der Klasse Schule verbunden sind. Umgangssprachlich könnte man das so ausdrücken: Ein Schüler (oder eine Schülerin) besucht eine Schule.

Der Pfeil zwischen den beiden Klassen deutet die Leserichtung an. Die Schüler-Objekte haben Kenntnis von dem Schule-Objekt, aber das Schule-Objekt hat keine Kenntnis von den Schüler-Objekten.

Realistisch ist das natürlich nicht. Natürlich hat die Schule Kenntnis von jedem einzelnen Schüler, der die Schule besucht. In dem UML-Klassendiagramm könnte man das leicht durch einen Doppelpfeil verdeutlichen.

In der Java-Implementierung müsste die Klasse Schule dann über eine ArrayList (oder einen einfachen Array) mit maximal 1400 Schueler-Objekten verfügen, während jedes Schueler-Objekt eine Instanzvariable hat, welche die besuchte Schule referenziert.

Multiplizität

Assoziationen können eine Multiplizität haben, die durch untere und obere Schranken definiert wird. In unserem Beispiel besucht jeder Schüler und jede Schülerin genau eine Schule, daher wird an das Pfeilende eine 1 geschrieben. Die speziele Schule andererseits muss von mindestens 600 Schüler(innen) besucht werden, sonst wird sie aufgelöst (wie das leider schon mit vielen deutschen Schulen passiert ist). Mehr als 1400 Schüler(innen) können die Schule allerdings nicht besuchen, dann ist ihre Kapazität voll ausgeschöpft.

Bespiele für Multiplizitäten

[1] - genau ein Objekt (in unserem Beispiel)

[0..1] - null oder ein Objekt

[0..*] - beliebig viele (auch kein) Objekte

[1..*] - mindestens ein Objekt

[m..n] - mindestens m, höchstens n Objekte (in unserem Beispiel)

Beschreibung siehe folgenden Text

Beispiel für die Existenz von zwei Assoziationen zwischen zwei Objekten

Dieses Bild zeigt, dass auch zwei veschiedene Assoziationen zwischen den Objekten von zwei Klassen bestehen können. Bei einer Bestellung können sich die Lieferadresse und die Rechnungsadresse unterscheiden, beides sind aber Objekte der Klasse Adresse.

Navigierbarkeit bzw. Leserichtung

Die Navigierbarkeit einer Assoziation legt fest, ob und in welche Richtung Objekte der einen Klasse auf Objekte der anderen Klasse zugreifen können. Sie wird in UML durch einen Pfeil an der Assoziationslinie dargestellt.

Einseitige Navigierbarkeit

In unserem Schüler-Schule-Beispiel in Abb. 1 liegt eine einseitige Navigierbarkeit vor: Die Schüler-Objekte kennen die Schule, aber die Schule kennt die Schüler nicht - wie bereits gesagt, eine sehr unrealistische Vorstellung.

Zweiseitige Naviergierbarkeit

Wenn die Schule alle Schüler und Schülerinnen kennt (was immer der Fall ist), dann handelt es sich um eine zweiseitige Naviergierbarkeit, die durch einen Doppelpfeil oder auch durch eine einfache Linie dargestellt werden kann.

Rolle
Beschreibung siehe folgenden Text

Die Schule spielt gleichzeitig unterschiedliche Rollen

Ein- und dieselbe Klasse kann gleichzeitig an mehreren Assoziationen teilnehmen. In diesem Beispiel spielt die Klasse Schule mehrere Rollen: Für die Schüler ist sie die Ausbildungsstätte, für die Lehrer ist sie der Arbeitgeber, und für die Stadt ist sie eine öffentliche Einrichtung.

In [5] finden Sie viele weitere nützliche Informationen zu diesem Thema, auf die einzugehen hier aber zu weit führen würde.

Spezialfälle der Assoziation

Aggregation

Unter dem Begriff Aggregation (Einzelheiten siehe dort) versteht man eine Assoziation, bei der ein Objekt ein Teil von mehreren zusammengesetzten Objekten sein kann und auch unabhängig von dem zusammengesetzten Objekten existieren kann.

Beispiel: Ein Fußballteam besteht aus 11 Spielern. Ein Spieler kann gleichzeitig in einem oder zwei weiteren Fußballteams mitspielen und auch unabhängig von den Teams existieren.

Die zusammengesetzten Objekte werden als Aggregate bezeichnet.

Komposition

Unter dem Begriff Komposition (siehe dort) versteht man eine Assoziation, bei der ein Objekt x ein Teil von genau einem zusammengesetzten Objekt k ist. Sobald das Objekt k nicht mehr existiert, hört auch das Objekt x auf zu existieren.

Beispiel aus dem Shapes-Projekt: Ein Objekt der Klasse Zeichnung erzeugt zwei Objekte der Klasse Circle (sonne und mond) als Instanzvariablen. Solange das Zeichnungs-Objekt existiert, existieren auch die beiden Circle-Objekte sonne und mond. Wird das Zeichnungs-Objekt beendet, erlischt auch die Lebensdauer der beiden Circle-Objekte.

Das zusammengesetzte Objekt wird hier als Kompositum bezeichnet

Unterschied Aggregation und Komposition

"Bei der Aggregation werden Referenzen auf Objekte als Teile gespeichert. Wird das Ganze gelöscht, gehen nur die Referenzen verloren. Die einzelnen Teile bleiben weiter bestehen.

Bei der Komposition werden die Objekte selbst erschaffen und gespeichert. Wird das Ganze [...] gelöscht, bedeutet dies auch das Ende aller Objekte [...], die [das Ganze] in sich speichert." [5]

  1. Lahres et al.: Objektorientierte Programmierung, Rheinwerk Computing 2021.
  2. Barnes, Kölling: Java lernen mit BlueJ - Objects first. Pearson-Verlag 2019.
  3. Ullenboom: Java ist auch eine Insel, Rheinwerk Computing 2023.
  4. Wikipedia, Artikel "Assoziation"
  5. Kecher et al.: UML 2.5 - Das umfassende Handbuch, Rheinwerk Computing 2021