Eine Include-Beziehung zeigt, dass ein Use Case einen anderen Use Case immer einschließt und benötigt.
Der eingefügte Use Case ist notwendig und wird jedes Mal ausgeführt.
[Use Case A] ────────<<include>>────────► [Use Case B]
gestrichelte Linie
mit <<include>>
Pfeilrichtung: Von A nach B = "A inkludiert B"
Use Case A benötigt immer die Funktionalität von Use Case B.
Typische Szenarien:
O
/|\
/ \
Kunde
│
│
↓
┌─────────────────┐
│ Bestellen │
└─────────────────┘
│
│ <<include>>
↓
┌─────────────────┐
│ Anmelden │ ← IMMER nötig!
└─────────────────┘
│
│ <<include>>
↓
┌─────────────────┐
│ Bezahlen │ ← IMMER nötig!
└─────────────────┘
Erklärung:
Include-Beziehung = Funktionsaufruf:
public void bestellen() {
anmelden(); // <<include>> - wird IMMER aufgerufen
bezahlen(); // <<include>> - wird IMMER aufgerufen
bestaetigen();
}
┌─────────────────┐
│ Buch ausleihen │
└─────────────────┘
│
│ <<include>>
↓
┌─────────────────┐
│ Benutzer prüfen │ ← Muss IMMER geprüft werden
└─────────────────┘
│
│ <<include>>
↓
┌─────────────────┐
│ Verfügbarkeit │ ← Muss IMMER geprüft werden
│ prüfen │
└─────────────────┘
Ablauf:
Visualisierung:
Include (IMMER):
[Bestellen] ──<<include>>──► [Anmelden]
└─► "Bestellen" braucht "Anmelden" IMMER
Extend (OPTIONAL):
[Bestellen] ◄──<<extend>>── [Gutschein einlösen]
└─► "Gutschein" ist optional bei "Bestellen"
O
/|\
/ \
Kunde
│
├──────────────────────────┐
│ │
↓ ↓
┌─────────────┐ ┌─────────────┐
│Geld abheben │ │ Überweisen │
└─────────────┘ └─────────────┘
│ │
│ <<include>> │ <<include>>
↓ ↓
┌─────────────────────────────────┐
│ PIN eingeben & verifizieren │ ← Für BEIDE nötig!
└─────────────────────────────────┘
Vorteil:
Gute Verwendung:
✅ [Bestellen] ──<<include>>──► [Bezahlen]
✅ [Artikel kaufen] ──<<include>>──► [Anmelden]
✅ [Dokument drucken] ──<<include>>──► [Drucker wählen]
Schlechte Verwendung:
❌ [Bestellen] ──<<include>>──► [Newsletter abonnieren] (optional!)
❌ [Suchen] ──<<include>>──► [Favorit hinzufügen] (optional!)
<<include>>"Include" = "einschließen" = muss dabei sein