UML-Assoziation
Eine Assoziation ist eine Beziehung zwischen zwei Klassen, die anzeigt, dass Objekte der einen Klasse mit Objekten der anderen Klasse in Verbindung stehen.
Zwei Klassen werden mit einer einfachen Linie verbunden. Eine Klasse kann eine Referenz auf eine Instanz der anderen Klasse enthalten.
Kernpunkte
Assoziation ist die allgemeinste Form einer Beziehung in UML:
- Darstellung: Einfache Linie zwischen Klassen
- Bedeutung: "kennt" oder "hat Referenz auf"
- Keine Besitzbeziehung (im Gegensatz zu UML-Komposition)
- Objekte können unabhängig voneinander existieren
- Bidirektional oder unidirektional
ASCII-Diagramm: UML-Assoziation
ASSOZIATION (EINFACHE BEZIEHUNG)
┌────────────────┐ ┌────────────────┐
│ STUDENT │───────────│ KURS │
├────────────────┤ ├────────────────┤
│ - name: String │ │ - titel: String│
│ - matrikel: int│ │ - credits: int │
├────────────────┤ ├────────────────┤
│ + belegen() │ │ + starten() │
└────────────────┘ └────────────────┘
BEDEUTUNG:
→ Student "kennt" Kurs
→ Einfache Linie = Assoziation
→ Keine Besitzbeziehung
→ Beide können unabhängig existieren
Unidirektionale vs. Bidirektionale Assoziation
UNIDIREKTIONAL (Pfeil zeigt Navigationsrichtung)
┌────────────┐ ┌────────────┐
│ PERSON │────────>│ ADRESSE │
└────────────┘ └────────────┘
→ Person kennt Adresse
→ Adresse kennt Person NICHT
BIDIREKTIONAL (keine Pfeile oder Pfeile in beide Richtungen)
┌────────────┐ ┌────────────┐
│ KUNDE │─────────│ BESTELLUNG │
└────────────┘ └────────────┘
→ Kunde kennt Bestellung
→ Bestellung kennt Kunde
Multiplizität (Kardinalität)
MULTIPLIZITÄT BEI ASSOZIATIONEN
1 *
┌─────────┐ ┌─────────┐
│ PERSON │─────│ AUTO │
└─────────┘ └─────────┘
Bedeutung:
1 = genau eine
* = beliebig viele (0..*)
0..1 = optional (0 oder 1)
1..* = mindestens eine
Beispiel:
→ Eine Person (1) besitzt mehrere (*) Autos
→ Ein Auto (*) gehört zu einer (1) Person
Java-Code-Beispiel
// ASSOZIATION: Student kennt Kurs
public class Student {
private String name;
private Kurs[] kurse; // ← Assoziation (Referenz auf Kurs)
public Student(String name) {
this.name = name;
this.kurse = new Kurs[10];
}
public void kursBesuchen(Kurs kurs) {
// Student nimmt Kurs auf
// Kurs existiert unabhängig vom Student
}
}
public class Kurs {
private String titel;
public Kurs(String titel) {
this.titel = titel;
}
}
// VERWENDUNG
Kurs mathe = new Kurs("Mathematik");
Student anna = new Student("Anna");
anna.kursBesuchen(mathe); // Assoziation
// Wenn anna gelöscht wird, existiert mathe weiter!
anna = null;
// mathe existiert noch
Wichtig für AP2
Assoziation Merkmale:
- Notation: Einfache Linie (───) zwischen Klassen
- Bedeutung: "kennt" / "hat Referenz auf"
- Unabhängigkeit: Beide Objekte existieren unabhängig
- Keine Besitzbeziehung (im Gegensatz zu UML-Komposition oder UML-Aggregation)
Unterschiede:
- Assoziation: ─── (einfache Linie)
- Aggregation: ◇─── (leere Raute)
- Komposition: ◆─── (gefüllte Raute)
- Vererbung: ───▷ (leerer Pfeil)
Praxis-Beispiel
BEISPIEL: BANK-SYSTEM
┌─────────────┐ ┌─────────────┐
│ KUNDE │─────────│ KONTO │
├─────────────┤ 1 * ├─────────────┤
│ - name │ │ - kontonr │
│ - id │ │ - saldo │
└─────────────┘ └─────────────┘
→ Ein Kunde kann mehrere Konten haben
→ Wenn Kunde gelöscht wird, bleiben Konten bestehen
(können anderen Kunden zugeordnet werden)
→ ASSOZIATION (keine Besitzbeziehung)
Praxis-Tipps für AP2
- Assoziation = einfachste Beziehung (nur Linie, keine Raute)
- Test: "Wenn A gelöscht wird, kann B weiter existieren?" → Ja = Assoziation
- Typische Prüfungsfrage: "Was ist der Unterschied zwischen Assoziation und Komposition?"
→ Antwort: Bei Assoziation keine Besitzbeziehung, bei Komposition stirbt Teil mit Ganzem
Verwandte Konzepte
- UML-Aggregation - Schwache Besitzbeziehung
- UML-Komposition - Starke Besitzbeziehung
- Vererbung - IS-A Beziehung
- Relationship - ER-Modell Beziehung
- UML-Klassendiagramm - Übergeordnetes Konzept