UML-Use-Case-Extend

Eine Extend-Beziehung zeigt, dass ein Use Case einen anderen Use Case optional erweitern kann.

Die Erweiterung findet nur unter bestimmten Bedingungen statt.


Symbol

[Use Case A] ◄────────<<extend>>──────── [Use Case B]
              gestrichelte Linie
              mit <<extend>>

Pfeilrichtung: Von B nach A = "B erweitert A"


Wann verwendet man Extend?

Use Case B ist eine optionale Erweiterung von Use Case A.

Typische Szenarien:


Visuelles Beispiel: Online-Shopping

     O
    /|\
    / \
   Kunde
     │
     │
     ↓
┌─────────────────┐
│   Bestellen     │ ◄─────<<extend>>────── ┌───────────────────┐
└─────────────────┘                         │Gutschein einlösen │
                                            └───────────────────┘
                                            [Extension Point:
                                             Wenn Gutschein
                                             vorhanden]

Erklärung:


Code-Analogie

Extend-Beziehung = Optionaler Code:

public void bestellen() {
    warenkorb_pruefen();

    // EXTEND: Optional, nur wenn Bedingung erfüllt
    if (kunde.hatGutschein()) {
        gutschein_einloesen();  // <<extend>>
    }

    bezahlen();
    bestaetigen();
}

Extension Points

Extension Points definieren, wo und wann die Erweiterung stattfindet.

┌─────────────────────────────┐
│      Produkt bestellen      │
├─────────────────────────────┤
│ Extension Points:           │
│ - Nach Warenkorb            │
│ - Vor Bezahlung             │
└─────────────────────────────┘
         △
         │ <<extend>>
         │
┌─────────────────┐
│ Rabatt gewähren │
└─────────────────┘
    [Bedingung:
     VIP-Kunde]

Beispiel: ATM (Geldautomat)

┌─────────────────┐
│  Geld abheben   │ ◄─────<<extend>>────── ┌───────────────────┐
└─────────────────┘                         │ Quittung drucken  │
                                            └───────────────────┘
                                            [Extension Point:
                                             Nach Geldausgabe,
                                             wenn Kunde möchte]

Ablauf:

  1. Kunde hebt Geld ab (Basis-Use-Case)
  2. Optional: Kunde kann Quittung drucken
  3. Wenn Kunde "Ja" wählt → Quittung wird gedruckt
  4. Wenn Kunde "Nein" wählt → Keine Quittung

Include vs. Extend (Vergleich)

┌─────────────────────────────────────────────────────────┐
│                  INCLUDE (IMMER)                        │
└─────────────────────────────────────────────────────────┘

[Bestellen] ────<<include>>────► [Anmelden]
                                    │
                                    └─► MUSS ausgeführt werden


┌─────────────────────────────────────────────────────────┐
│                  EXTEND (OPTIONAL)                      │
└─────────────────────────────────────────────────────────┘

[Bestellen] ◄────<<extend>>──── [Gutschein einlösen]
                                        │
                                        └─► KANN ausgeführt werden
Merkmal <> <> Häufigkeit IMMER OPTIONAL Pfeilrichtung A → B (A inkludiert B) B → A (B erweitert A) Kontrolle Base-Use-Case entscheidet Extension entscheidet Bedingung Keine Extension Point + Bedingung Beispiel Login ist Pflicht Gutschein ist optional

Praktisches Beispiel: Restaurant-System

     O
    /|\
    / \
   Kunde
     │
     ↓
┌─────────────────┐
│ Essen bestellen │
└─────────────────┘
         △
         │
    ┌────┴────┬────────────┬────────────┐
    │         │            │            │
    │         │            │            │
<<extend>>  <<extend>>   <<extend>>   <<extend>>
    │         │            │            │
┌─────┐  ┌──────┐   ┌──────────┐  ┌─────────┐
│Vorspeise│Dessert│ │Extra-Beilage│Getränk│
│hinzu-│ │hinzu-│   │ hinzufügen │ │hinzu-│
│fügen │ │fügen │   └──────────┘  │fügen │
└─────┘  └──────┘                 └─────────┘

Alle Erweiterungen sind optional!


Extend mit Bedingung

┌─────────────────────────────┐
│    Online bezahlen          │
├─────────────────────────────┤
│ Extension Point:            │
│ "Vor Abschluss"             │
└─────────────────────────────┘
         △
         │ <<extend>>
         │
┌─────────────────────────────┐
│ Zahlung in Raten aufteilen  │
└─────────────────────────────┘
    [Bedingung:
     Betrag > 100€]

Bedeutung:


Regeln für Extend

Wichtige Regeln

  1. Extend ist optional: Basis-Use-Case funktioniert auch ohne Erweiterung
  2. Pfeilrichtung: Von erweiterndem zu Basis-Use-Case (rückwärts!)
  3. Extension Points: Definieren, wo Erweiterung stattfindet
  4. Bedingungen: Wann die Erweiterung aktiv wird

Gute Verwendung:

✅ [Bestellen] ◄──<<extend>>── [Gutschein einlösen]
✅ [Suchen] ◄──<<extend>>── [Filter anwenden]
✅ [Zahlen] ◄──<<extend>>── [Rechnung ausdrucken]

Schlechte Verwendung:

❌ [Bestellen] ◄──<<extend>>── [Bezahlen] (Pflicht, nicht optional!)
❌ [Anmelden] ◄──<<extend>>── [Passwort eingeben] (Pflicht!)

Zusammenfassung

Extend-Beziehung

Merkhilfe

"Extend" = "erweitern" = kann hinzugefügt werden


Verwandte Konzepte