Eine Extend-Beziehung zeigt, dass ein Use Case einen anderen Use Case optional erweitern kann.
Die Erweiterung findet nur unter bestimmten Bedingungen statt.
[Use Case A] ◄────────<<extend>>──────── [Use Case B]
gestrichelte Linie
mit <<extend>>
Pfeilrichtung: Von B nach A = "B erweitert A"
Use Case B ist eine optionale Erweiterung von Use Case A.
Typische Szenarien:
O
/|\
/ \
Kunde
│
│
↓
┌─────────────────┐
│ Bestellen │ ◄─────<<extend>>────── ┌───────────────────┐
└─────────────────┘ │Gutschein einlösen │
└───────────────────┘
[Extension Point:
Wenn Gutschein
vorhanden]
Erklärung:
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 definieren, wo und wann die Erweiterung stattfindet.
┌─────────────────────────────┐
│ Produkt bestellen │
├─────────────────────────────┤
│ Extension Points: │
│ - Nach Warenkorb │
│ - Vor Bezahlung │
└─────────────────────────────┘
△
│ <<extend>>
│
┌─────────────────┐
│ Rabatt gewähren │
└─────────────────┘
[Bedingung:
VIP-Kunde]
┌─────────────────┐
│ Geld abheben │ ◄─────<<extend>>────── ┌───────────────────┐
└─────────────────┘ │ Quittung drucken │
└───────────────────┘
[Extension Point:
Nach Geldausgabe,
wenn Kunde möchte]
Ablauf:
┌─────────────────────────────────────────────────────────┐
│ INCLUDE (IMMER) │
└─────────────────────────────────────────────────────────┘
[Bestellen] ────<<include>>────► [Anmelden]
│
└─► MUSS ausgeführt werden
┌─────────────────────────────────────────────────────────┐
│ EXTEND (OPTIONAL) │
└─────────────────────────────────────────────────────────┘
[Bestellen] ◄────<<extend>>──── [Gutschein einlösen]
│
└─► KANN ausgeführt werden
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!
┌─────────────────────────────┐
│ Online bezahlen │
├─────────────────────────────┤
│ Extension Point: │
│ "Vor Abschluss" │
└─────────────────────────────┘
△
│ <<extend>>
│
┌─────────────────────────────┐
│ Zahlung in Raten aufteilen │
└─────────────────────────────┘
[Bedingung:
Betrag > 100€]
Bedeutung:
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!)
<<extend>>"Extend" = "erweitern" = kann hinzugefügt werden