# Seite 12. UML-Anwendungsfalldiagramm-Trainer

**UML-Anwendungsfalldiagramm-Trainer**

Dieser interaktive Trainer gehört zur Theorie-Seite:

```text
UML-Anwendungsfalldiagramm
```

Hier übst du, aus einer Aufgabenbeschreibung ein korrektes UML-Anwendungsfalldiagramm abzuleiten.

Im Fokus stehen:

```text
Akteure
Systemgrenze
Use Cases
Assoziationen
<<include>>
<<extend>>
Pfeilrichtung
Pflichtbestandteil vs. optionale Erweiterung
```

---

**Was wird trainiert?**

| Bereich | Bedeutung |
|---|---|
| **Akteure erkennen** | externe Rollen außerhalb des Systems |
| **Systemgrenze verstehen** | Rechteck um die Use Cases |
| **Use Cases benennen** | Funktionen des Systems als Ellipsen |
| **Assoziationen erkennen** | einfache Linien zwischen Akteur und Use Case |
| **<<include>> erkennen** | Pflichtbestandteil eines Use Cases |
| **<<extend>> erkennen** | optionale Erweiterung eines Use Cases |
| **Pfeilrichtung prüfen** | include und extend zeigen in unterschiedliche fachliche Richtungen |

---

**Interaktiver UML-Anwendungsfalldiagramm-Trainer**

<iframe
  src="https://trainer.ulrich-wiki.com/uml-anwendungsfalldiagramm-trainer.html?v=6"
  width="100%"
  height="1450"
  style="border:1px solid #444; border-radius:12px;">
</iframe>

<div style="margin:16px 0;">
  <a
    href="https://trainer.ulrich-wiki.com/uml-anwendungsfalldiagramm-trainer.html?v=6"
    target="_blank"
    rel="noopener"
    style="
      display:inline-block;
      padding:12px 18px;
      background:#2563eb;
      color:white;
      font-weight:bold;
      text-decoration:none;
      border-radius:10px;
      border:1px solid #1d4ed8;
    ">
    UML-Anwendungsfalldiagramm-Trainer im Vollbild öffnen
  </a>
</div>

---

**Merksatz für den Trainer**

```text
Akteur = externe Rolle außerhalb des Systems
Use Case = Funktion des Systems
Systemgrenze = Rechteck um die Use Cases
Akteur–Use Case = einfache Linie ohne Pfeil
<<include>> = Pflichtbestandteil
<<extend>> = optionale Erweiterung
include zeigt zum eingebundenen Pflicht-Use-Case
extend zeigt zum Basis-Use-Case
```

---

**Beispiel: Shop-System**

Aufgabenstellung:

```text
Ein Kunde kann Artikel suchen und eine Bestellung aufgeben.
Beim Aufgeben einer Bestellung muss eine Zahlung durchgeführt werden.
Vor der Bestellung kann optional ein Rabatt geprüft werden.
Ein Admin kann Artikel verwalten.
```

Mögliche Lösung:

```text
System:
Shop-System

Akteure:
Kunde
Admin

Use Cases:
Artikel suchen
Bestellung aufgeben
Zahlung durchführen
Rabatt prüfen
Artikel verwalten

Beziehungen:
Kunde — Artikel suchen
Kunde — Bestellung aufgeben
Admin — Artikel verwalten

Bestellung aufgeben <<include>> Zahlung durchführen
Rabatt prüfen <<extend>> Bestellung aufgeben
```

---

**Warum ist „Zahlung durchführen“ ein <<include>>?**

```text
Bestellung aufgeben <<include>> Zahlung durchführen
```

Das bedeutet:

```text
Wenn eine Bestellung aufgegeben wird,
muss die Zahlung durchgeführt werden.
```

Also ist die Zahlung ein **Pflichtbestandteil**.

---

**Warum ist „Rabatt prüfen“ ein <<extend>>?**

```text
Rabatt prüfen <<extend>> Bestellung aufgeben
```

Das bedeutet:

```text
Rabatt prüfen erweitert Bestellung aufgeben nur optional.
```

Zum Beispiel:

```text
nur wenn ein Rabattcode vorhanden ist
nur wenn eine Aktion aktiv ist
nur wenn der Kunde berechtigt ist
```

---

**Richtige Pfeilrichtung**

| Beziehung | Richtung |
|---|---|
| **<<include>>** | vom Basis-Use-Case zum eingebundenen Pflicht-Use-Case |
| **<<extend>>** | vom optionalen Erweiterungs-Use-Case zum Basis-Use-Case |

Merksatz:

```text
include zeigt auf das, was immer gebraucht wird.
extend zeigt auf das, was optional erweitert wird.
```

---

**Typische Fehler**

| Fehler | Warum falsch? |
|---|---|
| Akteur innerhalb der Systemgrenze | Akteure stehen außerhalb |
| Use Case außerhalb der Systemgrenze | Use Cases gehören ins System |
| Pfeile bei Akteur-Verbindung | Akteur–Use Case ist normalerweise einfache Linie |
| include und extend vertauscht | Pflicht und Option werden falsch dargestellt |
| include-Pfeil falsch herum | include zeigt auf den Pflicht-Use-Case |
| extend-Pfeil falsch herum | extend zeigt auf den Basis-Use-Case |
| technische Methoden als Use Cases | Use Cases sollen Nutzersicht zeigen |

---

**Mini-Testfragen**

<details>
<summary><strong>1. Wo stehen Akteure im Anwendungsfalldiagramm?</strong></summary>

Akteure stehen außerhalb der Systemgrenze.

</details>

<details>
<summary><strong>2. Wie werden Use Cases dargestellt?</strong></summary>

Use Cases werden als Ellipsen dargestellt.

Beispiel:

```text
( Bestellung aufgeben )
```

</details>

<details>
<summary><strong>3. Wie wird eine Akteur–Use-Case-Beziehung dargestellt?</strong></summary>

Als einfache durchgezogene Linie ohne Pfeilspitze.

Beispiel:

```text
Kunde — Bestellung aufgeben
```

</details>

<details>
<summary><strong>4. Was bedeutet <<include>>?</strong></summary>

`<<include>>` bedeutet Pflichtbestandteil.

Beispiel:

```text
Bestellung aufgeben <<include>> Zahlung durchführen
```

</details>

<details>
<summary><strong>5. Was bedeutet <<extend>>?</strong></summary>

`<<extend>>` bedeutet optionale Erweiterung.

Beispiel:

```text
Rabatt prüfen <<extend>> Bestellung aufgeben
```

</details>

<details>
<summary><strong>6. In welche Richtung zeigt include?</strong></summary>

`<<include>>` zeigt vom Basis-Use-Case zum eingebundenen Pflicht-Use-Case.

```text
Bestellung aufgeben → Zahlung durchführen
```

</details>

<details>
<summary><strong>7. In welche Richtung zeigt extend?</strong></summary>

`<<extend>>` zeigt vom optionalen Erweiterungs-Use-Case zum Basis-Use-Case.

```text
Rabatt prüfen → Bestellung aufgeben
```

</details>

<details>
<summary><strong>8. Warum ist Zahlung durchführen im Shop-Beispiel include?</strong></summary>

Weil die Zahlung ein notwendiger Bestandteil der Bestellung ist.

```text
Ohne Zahlung ist die Bestellung nicht vollständig.
```

</details>

<details>
<summary><strong>9. Warum ist Rabatt prüfen im Shop-Beispiel extend?</strong></summary>

Weil der Rabatt nur optional geprüft wird.

```text
Nur wenn ein Rabattcode oder eine Rabattbedingung vorhanden ist.
```

</details>

<details>
<summary><strong>10. Was zeigt ein Anwendungsfalldiagramm nicht?</strong></summary>

Es zeigt nicht den inneren Programmablauf.

Nicht dargestellt werden:

```text
if-Anweisungen
Schleifen
Methodenaufrufe
Datenbanktabellen
```

Dafür wären andere Diagramme besser geeignet.

</details>

---

**Nächste Seite**

Danach geht es weiter mit:

```text
UML-Sequenzdiagramm
```