Anwendungsfalldiagramm: Unterschied zwischen den Versionen

Aus FLBK-Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
== Einführung ==
== Einführung ==
Die '''Unified Modeling Language''' (Vereinheitlichte Modellierungssprache), kurz '''UML''', ist eine standardisierte, grafische Modellierungssprache zur Spezifikation, zum Entwurf und zur Dokumentation von Software- und anderen Systemen. Innerhalb der UML gehören '''Anwendungsfalndiagramme''' (auch ''Use-Case-Diagramme'' genannt) zu den Verhaltensdiagrammen. Sie beschreiben das erwartete Verhalten eines Systems aus der Perspektive eines externen Beobachters (Benutzers) heraus, ohne technische Implementierungsdetails offenzulegen.
Die '''Unified Modeling Language''' (Vereinheitlichte Modellierungssprache), kurz '''UML''', ist eine standardisierte grafische Modellierungssprache zur Beschreibung von Anforderungen und Softwarearchitekturen. Das '''Anwendungsfalldiagramm''' ist Teil der UML und wird im englischsprachigen Raum auch als '''Use Case Diagramm''' bezeichnet.  


=== Zielsetzung im Software-Lebenszyklus ===
Ziel des Anwendungsfalldiagramms ist es, in der Analysephase die funktionalen Anforderungen des Auftraggebers aus fachlicher Sicht für alle Beteiligten verständlich, übersichtlich und vollständig zu modellieren. Es dient als zentrales Kommunikationsmittel, um zwischen potenziellen Anwendern, Auftraggebern (Fachseite) und Auftragnehmern (Entwicklerteam) zu vermitteln. Als strukturierte Anforderungsbeschreibung können Anwendungsfalldiagramme direkt in das Lastenheft mit aufgenommen werden.
In der Analysephase eines Softwareprojekts dienen Anwendungsfalldiagramme dazu, die funktionalen Anforderungen des Auftraggebers strukturiert, übersichtlich und vollständig zu erfassen. Sie erfüllen dabei eine essenzielle Brückenfunktion:
* '''Kommunikationsmittel:''' Sie vermitteln barrierefrei zwischen fachlichen Laien (potenziellen Anwendern, Auftraggebern) und dem technischen Entwicklungsteam (Auftragnehmern).
* '''Anforderungsdokumentation:''' Als strukturierte und visuelle Anforderungsbeschreibung sind sie ein fundamentaler Bestandteil des '''Lastenhefts''' (was das System tun soll) und fließen direkt in das '''Pflichtenheft''' ein.


=== Die drei Kernelemente ===
Das Anwendungsfalldiagramm besteht aus drei wesentlichen Elementen:<ref>Heide Balzer: ''Lehrbuch der Objektmodellierung - Analyse und Entwurf'', Spektrum Akademischer Verlag, S. 62 ff.</ref>
Ein Anwendungsfalndiagramm lässt sich auf drei wesentliche Säulen reduzieren:<ref>Heide Balzer: ''Lehrbuch der Objektmodellierung - Analyse und Entwurf'', Spektrum Akademischer Verlag, S. 62 ff.</ref>
# '''Akteure (engl. ''actors''):''' In einem Anwendungsfalldiagramm werden potenzielle Benutzer des Systems identifiziert. Diese Benutzer nennt man Akteure. Jeder Akteur hat gewisse Erwartungen an die Software. Benutzer erwarten, dass das Programm ihnen hilft, ihre Aufgaben schneller und einfacher zu lösen.
# '''Akteure (Actors):''' Wer interagiert mit dem System? (Sowohl Personen als auch externe Systeme).
# '''Anwendungsfälle (engl. ''use cases''):''' Diese Aufgaben der Benutzer nennt man Anwendungsfälle. Sie erzeugen für den Anwender ein Ergebnis von messbarem Wert.
# '''Anwendungsfälle (Use Cases):''' Was kann mit dem System getan werden? Welche Ziele werden erreicht?
# '''Beziehungen (engl. ''relations''):''' Die Verbindung zwischen Akteur und Anwendungsfall (oder zwischen Anwendungsfällen untereinander) nennt man Beziehung oder Relation.
# '''Beziehungen (Relations):''' Wie interagieren Akteure und Anwendungsfälle miteinander oder wie hängen Anwendungsfälle untereinander zusammen?


''Hinweis zur Abgrenzung:'' Ein Use-Case-Diagramm zeigt '''nicht''', in welcher zeitlichen oder logischen Reihenfolge Prozesse ablaufen. Für die Modellierung von detaillierten, prozessualen Abläufen und Kontrollflüssen wird stattdessen das [[Aktivitätendiagramm]] verwendet.
''Hinweis zur Abgrenzung:'' Der detaillierte, prozessuale Ablauf von Anwendungsfällen wird nicht hier, sondern vorzugsweise in einem UML-Aktivitätendiagramm dargestellt.


== Systematische Notation und Aufbau ==
== Notation ==
Die Erstellung eines normkonformen Diagramms folgt einem klaren, dreistufigen iterativen Prozess:
Der Aufbau eines Anwendungsfalldiagramms folgt methodisch folgenden drei Regeln:


=== 1. Akteure identifizieren (Actors) ===
# '''Akteure identifizieren:''' Als erstes sollte man klären, welche unterschiedlichen Akteure die zu erstellende Software benutzen werden. Akteure werden als „Strichmännchen“ dargestellt. Alle notwendigen Benutzer der Software sind darzustellen. Dies sind in der Regel Personen wie Kunden, Mitarbeiter oder Administratoren. Es können aber auch andere Software-Systeme sein, die eine Anwendung benutzen werden. Jeder Akteur sollte einen aussagekräftigen und selbsterklärenden Namen haben. „User“ bzw. „Akteur“ sind keine aussagekräftigen Namen, da sie für jede Software gültig sind.
Akteure stellen Rollen dar, die außerhalb des betrachteten Systems liegen, aber mit diesem interagieren.
# '''Anwendungsfälle definieren:''' Als zweites sollte geklärt werden, welche Anwendungsfälle die Software erfüllen soll. Anwendungsfälle werden in Ellipsen dargestellt. In diese Ellipsen wird die inhaltliche Beschreibung geschrieben. Es wird empfohlen, den Anwendungsfall kurz und aussagekräftig zusammenzufassen. Trotz der Kürze muss er verständlich bleiben! Daher sollte er in einem ganzen, aber möglichst knappen Satz im Sinne von ''Subjekt-Prädikat-Objekt'' (bzw. im Infinitiv) formuliert werden.
* '''Darstellung:''' Grafisch als klassisches Strichmännchen (für menschliche Rollen) oder als Rechteck mit dem Stereotyp <code>«system»</code> (für externe Software/Hardware).
# '''Beziehungen verknüpfen:''' Erst im dritten Schritt werden die Anwendungsfälle und Akteure über Beziehungen miteinander verbunden. Beziehungen zwischen Akteuren und Anwendungsfällen müssen durch Linien gekennzeichnet werden.
* '''Namensgebung:''' Akteure müssen präzise, selbsterklärende Substantive sein (z. B. ''Kunde'', ''Systemadministrator'', ''Buchhaltungssystem''). Generische Bezeichnungen wie „User“, „Benutzer“ oder „Akteur“ sind strikt zu vermeiden, da sie keine differenzierte Rolle beschreiben.


=== 2. Anwendungsfälle definieren (Use Cases) ===
== Beziehungen ==
Ein Anwendungsfall beschreibt eine Sequenz von Interaktionen, die für den Akteur ein Ergebnis von messbarem, fachlichem Wert liefert.
* '''Darstellung:''' Als horizontale Ellipse, in deren Zentrum die Beschreibung steht.
* '''Namensgebung:''' Die Formulierung erfolgt kurz, prägnant, im Infinitiv und folgt der sprachlichen Struktur: '''Subjekt-Objekt-Prädikat''' (z. B. ''Artikel in Warenkorb legen'', ''Passwort zurücksetzen'').


=== 3. Beziehungen verknüpfen (Relations) ===
=== Assoziation ===
Akteure und Anwendungsfälle werden über Beziehungslinien verknüpft, um Interaktionskanäle aufzuzeigen. Das gesamte System wird optional durch einen rechteckigen '''Systemrahmen (System Boundary)''' umschlossen, welcher die Systemgrenze markiert: Akteure stehen außerhalb, Use Cases innerhalb des Rahmens.
Assoziationen verbinden Akteure mit Use Cases. Eine Assoziation bedeutet, dass der User die Aktion ausführen kann und somit mit dem System interagiert, das den Use Case enthält. Dabei darf ein einzelner Use Case mit mehreren Akteuren und ein einzelner Akteur mit mehreren Use Cases verbunden sein. Eine einzelne Assoziation muss immer genau zwei Elemente miteinander verbinden (binäre Assoziation).
 
==== Ungerichtete Assoziation ====
Ungerichtete Assoziationen werden als eine durchgehende Linie dargestellt. Es ist die offenste Form der Darstellung und lässt Spielraum für Interpretation bezüglich des genauen Datenflusses.


<html>
<html>
<svg width="600" height="220" viewBox="0 0 600 220" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
<svg width="450" height="140" viewBox="0 0 450 140" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
  <rect x="180" y="20" width="380" height="180" rx="5" fill="none" stroke="#222222" stroke-width="2" />
   <g transform="translate(30, 10)">
  <text x="190" y="40" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#222222">Systemgrenze (z.B. Webshop)</text>
 
   <g transform="translate(50, 60)">
     <circle cx="30" cy="20" r="15" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <circle cx="30" cy="20" r="15" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="35" x2="30" y2="75" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="35" x2="30" y2="75" stroke="#222222" stroke-width="2"/>
Zeile 42: Zeile 34:
     <line x1="30" y1="75" x2="10" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="10" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="50" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="50" y2="105" stroke="#222222" stroke-width="2"/>
     <text x="30" y="125" font-family="Arial, sans-serif" font-size="14" font-weight="bold" text-anchor="middle" fill="#222222">Kunde</text>
     <text x="30" y="125" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">Akteur</text>
   </g>
   </g>
 
   <line x1="90" y1="65" x2="230" y2="65" stroke="#222222" stroke-width="2" />
   <line x1="110" y1="120" x2="240" y2="120" stroke="#222222" stroke-width="2" />
   <g transform="translate(230, 30)">
  <text x="175" y="110" font-family="Arial, sans-serif" font-size="12" fill="#555555" text-anchor="middle">Assoziation</text>
     <ellipse cx="90" cy="35" rx="85" ry="30" fill="#ffffff" stroke="#222222" stroke-width="2"/>
 
     <text x="90" y="39" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">Anwendungsfall</text>
   <g transform="translate(240, 80)">
     <ellipse cx="140" cy="40" rx="120" ry="35" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <text x="140" y="44" font-family="Arial, sans-serif" font-size="14" text-anchor="middle" font-weight="bold" fill="#222222">Artikel suchen</text>
   </g>
   </g>
</svg>
</svg>
</html>
</html>


== Detaillierte Typisierung von Beziehungen ==
==== Gerichtete Assoziation ====
Pfeile an der Assoziation geben an, wer die Aktion initiieren kann. Hier spricht man von einer gerichteten Assoziation. Ein Pfeil, der auf den Use Case gerichtet ist, besagt, dass nur der Akteur die Aktion initiieren kann, während ein Pfeil, der auf den Akteur zeigt, besagt, dass nur der Use Case die Aktion initiieren kann. Können beide Seiten die Aktion initiieren, werden die Pfeile weggelassen, anstatt zwei Pfeile zu setzen.


=== 1. Assoziationen (Akteur ↔ Use Case) ===
<html>
Assoziationen bilden das Fundament der Kommunikation zwischen Akteur und System. Es handelt sich um eine binäre Beziehung (verbindet genau zwei Elemente).
<svg width="500" height="140" viewBox="0 0 500 140" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
  <g transform="translate(30, 10)">
    <circle cx="30" cy="20" r="15" fill="#ffffff" stroke="#222222" stroke-width="2"/>
    <line x1="30" y1="35" x2="30" y2="75" stroke="#222222" stroke-width="2"/>
    <line x1="10" y1="50" x2="50" y2="50" stroke="#222222" stroke-width="2"/>
    <line x1="30" y1="75" x2="10" y2="105" stroke="#222222" stroke-width="2"/>
    <line x1="30" y1="75" x2="50" y2="105" stroke="#222222" stroke-width="2"/>
    <text x="30" y="125" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">Akteur</text>
  </g>
  <g>
    <line x1="90" y1="65" x2="250" y2="65" stroke="#222222" stroke-width="2" />
    <polygon points="260,65 246,59 246,71" fill="#222222" />
  </g>
  <g transform="translate(260, 30)">
    <ellipse cx="90" cy="35" rx="85" ry="30" fill="#ffffff" stroke="#222222" stroke-width="2"/>
    <text x="90" y="39" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">Anwendungsfall</text>
  </g>
</svg>
</html>


* '''Ungerichtete Assoziation:''' Eine einfache, durchgehende Linie. Sie signalisiert einen bidirektionalen Informationsfluss. Der Akteur interagiert mit dem Use Case, lässt jedoch offen, wer die Interaktion gestartet hat.
=== Multiplizitäten ===
* '''Gerichtete Assoziation:''' Eine Linie mit einer offenen Pfeilspitze. Der Pfeil zeigt auf den Initiator des Datenflusses bzw. der Aktion:
Multiplizitäten geben an, wie viele Akteure mit wie vielen Anwendungsfällen in Beziehung stehen. Sie werden an gerichtete oder ungerichtete Assoziationen modelliert.
** Pfeil zeigt zum ''Use Case'': Der Akteur initiiert den Anwendungsfall aktiv.
** Pfeil zeigt zum ''Akteur'': Der Anwendungsfall stößt eine Aktion beim Akteur an (häufig bei sekundären, externen Systemen wie z. B. Benachrichtigungsdiensten).
 
=== 2. Multiplizitäten ===
Multiplizitäten (Kardinalitäten) geben an, wie viele Instanzen eines Akteurs zeitgleich mit wie vielen Instanzen eines Anwendungsfalls interagieren können. Sie werden direkt an die Enden der Assoziationslinien geschrieben.
 
==== Praxisbeispiel: Das Tischtennis-Rundlaufspiel ====
Um die Logik von Multiplizitäten zu verdeutlichen, betrachten wir das Regelwerk eines Tischtennis-Rundlaufs:
* An einem Rundlauf-Spiel müssen '''mindestens 3 Spielerinnen''' teilnehmen, nach oben hin gibt es keine Grenze (<code>3..*</code>). Jede einzelne Spielerin nimmt jedoch zu einem Zeitpunkt an '''exakt 1''' Rundlauf-Spiel teil (<code>1</code>).
* Ein Spiel kann völlig ohne oder mit unbegrenzt vielen Schiedsrichterinnen stattfinden (<code>0..*</code>). Eine Schiedsrichterin kann maximal '''an höchstens 1''' Spiel gleichzeitig als Offizielle zugewiesen sein (<code>0..1</code>).


<html>
<html>
<svg width="750" height="280" viewBox="0 0 750 280" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
<svg width="720" height="160" viewBox="0 0 720 160" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
   <g transform="translate(265, 100)">
   <g transform="translate(20, 10)">
    <ellipse cx="110" cy="40" rx="100" ry="35" fill="#ffffff" stroke="#222222" stroke-width="2"/>
    <text x="110" y="44" font-family="Arial, sans-serif" font-size="13" font-weight="bold" text-anchor="middle" fill="#222222">Am Rundlauf-Spiel</text>
    <text x="110" y="60" font-family="Arial, sans-serif" font-size="13" font-weight="bold" text-anchor="middle" fill="#222222">teilnehmen</text>
  </g>
 
  <g transform="translate(40, 50)">
     <circle cx="30" cy="20" r="15" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <circle cx="30" cy="20" r="15" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="35" x2="30" y2="75" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="35" x2="30" y2="75" stroke="#222222" stroke-width="2"/>
Zeile 87: Zeile 79:
     <line x1="30" y1="75" x2="10" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="10" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="50" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="50" y2="105" stroke="#222222" stroke-width="2"/>
     <text x="30" y="125" font-family="Arial, sans-serif" font-size="14" font-weight="bold" text-anchor="middle" fill="#222222">Spielerin</text>
     <text x="30" y="125" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">Spielerin</text>
  </g>
 
  <line x1="80" y1="65" x2="240" y2="65" stroke="#222222" stroke-width="2" />
  <text x="95" y="55" font-family="Arial, sans-serif" font-size="13" font-weight="bold" fill="#c00">1</text>
  <text x="215" y="55" font-family="Arial, sans-serif" font-size="13" font-weight="bold" fill="#c00">3..*</text>
 
  <g transform="translate(240, 30)">
    <ellipse cx="110" cy="35" rx="105" ry="30" fill="#ffffff" stroke="#222222" stroke-width="2"/>
    <text x="110" y="39" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">Tischtennis-Rundlauf</text>
   </g>
   </g>
   <line x1="100" y1="130" x2="265" y2="135" stroke="#222222" stroke-width="2" />
 
   <text x="115" y="120" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#b30000">1</text>
   <line x1="460" y1="65" x2="620" y2="65" stroke="#222222" stroke-width="2" />
   <text x="240" y="125" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#b30000">3..*</text>
   <text x="475" y="55" font-family="Arial, sans-serif" font-size="13" font-weight="bold" fill="#c00">0..*</text>
   <text x="595" y="55" font-family="Arial, sans-serif" font-size="13" font-weight="bold" fill="#c00">0..1</text>


   <g transform="translate(640, 50)">
   <g transform="translate(620, 10)">
     <circle cx="30" cy="20" r="15" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <circle cx="30" cy="20" r="15" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="35" x2="30" y2="75" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="35" x2="30" y2="75" stroke="#222222" stroke-width="2"/>
Zeile 99: Zeile 101:
     <line x1="30" y1="75" x2="10" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="10" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="50" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="50" y2="105" stroke="#222222" stroke-width="2"/>
     <text x="30" y="125" font-family="Arial, sans-serif" font-size="14" font-weight="bold" text-anchor="middle" fill="#222222">Schiedsrichterin</text>
     <text x="30" y="125" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">Schiedsrichterin</text>
   </g>
   </g>
  <line x1="465" y1="135" x2="640" y2="130" stroke="#222222" stroke-width="2" />
  <text x="480" y="125" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#b30000">0..*</text>
  <text x="615" y="120" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#b30000">0..1</text>
</svg>
</svg>
</html>
</html>


''Hinweis für die Praxis:'' Da Multiplizitäten Use-Case-Diagramme schnell visuell überladen und für fachliche Auftraggeber oft sekundär sind, werden sie in dieser Diagrammart selten notiert. Ihre fundamentale Bedeutung entfalten sie im [[Klassendiagramm]].
Die Multiplizitäten sind im obigen Beispiel wie folgt zu lesen:
* An einem Tischtennis-Rundlauf sind mindestens 3 Spielerinnen beteiligt. Die Obergrenze ist als <code>*</code> bzw. beliebig definiert und die Untergrenze ist <code>3</code>. Jede Spielerin jedoch kann an exakt einem Rundlauf-Spiel teilnehmen. Hier sind die Ober- und Untergrenze <code>1</code>.
* An einem Rundlaufspiel können keine oder beliebig viele Schiedsrichterinnen beteiligt sein (<code>0..*</code>). Jede Schiedsrichterin kann an höchstens einem Rundlaufspiel beteiligt sein (<code>0..1</code>).


=== 3. Include-Beziehungen (Abhängigkeiten) ===
Da diese Information jedoch häufig für die Adressaten des Use Case Diagramms keine Rolle spielt, werden Multiplizitäten im Anwendungsfalldiagramm eher selten notiert. Eine elementare Rolle spielen sie hingegen beim [[Klassendiagramm]].
Die <code>«include»</code>-Beziehung beschreibt eine zwingende Abhängigkeit (Einschluss). Wenn ein Basis-Anwendungsfall ausgeführt wird, '''muss''' der inkludierte Anwendungsfall zwingend ebenfalls ausgeführt werden. Sie dient dem Aufbrechen komplexer Use Cases und der Wiederverwendung von Funktionalitäten.


* '''Pfeilrichtung:''' Der gestrichelte Pfeil startet beim ''Basis-Use-Case'' und zeigt '''auf den inkludierten''' Use Case.
=== Includes ===
* '''Stereotyp:''' Die Beziehungslinie muss zwingend mit dem Schlüsselwort <code>«include»</code> gekennzeichnet werden.
<code>include</code>-Beziehungen (dt. beinhalten) werden mittels einer mit <code><<include>></code> gekennzeichneten gestrichelten Linie und einem Pfeil zum inkludierten Anwendungsfall gekennzeichnet. Hierdurch wird abgebildet, dass der inkludierte Anwendungsfall immer zwingend ausgeführt werden muss.
 
Die Include-Anweisung gibt an, dass ein Use Case alle inkludierten Use Cases zwingend mitbenutzt. Die Include-Beziehung wird durch eine gestrichelte Linie dargestellt, die durch das Schlüsselwort <code><<include>></code> gekennzeichnet ist und vom Basis Use Case einen Pfeil in Richtung des zu inkludierenden Use Cases hat.


<html>
<html>
<svg width="650" height="140" viewBox="0 0 650 140" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
<svg width="580" height="110" viewBox="0 0 580 110" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
   <g transform="translate(10, 30)">
   <g transform="translate(10, 20)">
     <ellipse cx="110" cy="40" rx="100" ry="35" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <ellipse cx="95" cy="35" rx="90" ry="30" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <text x="110" y="44" font-family="Arial, sans-serif" font-size="13" font-weight="bold" text-anchor="middle" fill="#222222">Bestellung aufgeben</text>
     <text x="95" y="39" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">Basis Use-Case</text>
   </g>
   </g>
    
    
   <g>
   <g>
     <line x1="210" y1="70" x2="420" y2="70" stroke="#222222" stroke-width="2" stroke-dasharray="6,6" />
     <line x1="200" y1="55" x2="370" y2="55" stroke="#222222" stroke-width="2" stroke-dasharray="6,6" />
     <polygon points="430,70 415,63 415,77" fill="#222222" />
     <polygon points="380,55 366,49 366,61" fill="#222222" />
     <text x="320" y="55" font-family="Arial, sans-serif" font-size="14" font-weight="bold" text-anchor="middle" fill="#222222">«include»</text>
     <text x="290" y="42" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">&lt;&lt;include&gt;&gt;</text>
   </g>
   </g>


   <g transform="translate(430, 30)">
   <g transform="translate(380, 20)">
     <ellipse cx="110" cy="40" rx="100" ry="35" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <ellipse cx="95" cy="35" rx="90" ry="30" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <text x="110" y="44" font-family="Arial, sans-serif" font-size="13" font-weight="bold" text-anchor="middle" fill="#222222">Identität prüfen</text>
     <text x="95" y="39" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">Inkludierter Use-Case</text>
   </g>
   </g>
</svg>
</svg>
</html>
</html>


=== 4. Extend-Beziehungen (Erweiterungen) ===
=== Extend ===
Die <code>«extend»</code>-Beziehung modelliert ein '''optionales''' Verhalten. Der erweiternde Use Case wird nur unter präzise definierten Rahmenbedingungen ausgeführt.
Die <code>extend</code>-Beziehung gibt an, dass ein Use Case optional ist und nur unter bestimmten Bedingungen ausgeführt wird. Sie wird durch eine gestrichelte Linie dargestellt, die durch das Schlüsselwort <code><<extend>></code> gekennzeichnet ist und vom Extension Use Case (Erweiterung) einen Pfeil in Richtung des Basis Use Cases hat.
 
Der Basis Use Case bestimmt sogenannte Erweiterungspunkte (''Extension Points''), die den präzisen Ort innerhalb des Use Cases angeben, an dem Extensions hinzugefügt werden dürfen. Erweiterungspunkte werden dargestellt, indem dem Use Case eine horizontale Linie hinzugefügt wird, unter der das Schlüsselwort <code>extension points</code> steht, gefolgt von den Namen der Erweiterungspunkte.


* '''Pfeilrichtung:''' Der gestrichelte Pfeil verhält sich umgekehrt zur Include-Beziehung: Er startet beim ''erweiternden (optionalen) Use Case'' und zeigt '''auf den Basis-Use-Case'''.
Optional kann an eine Extend-Anweisung eine Bedingung (''Condition'') hinzugefügt werden, die beschreibt, unter welchen Voraussetzungen bezogen auf den Erweiterungspunkt der Extend Use Case ausgeführt wird. Die Bedingung wird in der UML als Notizzettel dargestellt, der das Schlüsselwort <code>Condition</code> enthält, gefolgt von der Bedingung in geschweiften Klammern und darunter der Erweiterungspunkt, auf den sich die Bedingung bezieht. Die Bedingung ist mit einer gestrichelten Linie mit der Linie der Extend-Anweisung verbunden.
* '''Stereotyp:''' Kennzeichnung erfolgt über das Schlüsselwort <code>«extend»</code>.
* '''Erweiterungspunkte (Extension Points):''' Im Basis-Use-Case wird unter einer horizontalen Trennlinie via <code>extension points</code> definiert, an welcher Stelle die Erweiterung eingreift.
* '''Bedingung (Condition):''' Ein umschließendes Notizfeld (als Notizzettel dargestellt) definiert die logische Bedingung. Es wird mit einer fein gestrichelten Linie an die Extend-Beziehung geheftet.


<html>
<html>
<svg width="700" height="300" viewBox="0 0 700 300" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
<svg width="620" height="230" viewBox="0 0 620 230" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
   <g transform="translate(20, 100)">
   <g transform="translate(10, 70)">
     <ellipse cx="120" cy="50" rx="110" ry="45" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <ellipse cx="100" cy="40" rx="95" ry="38" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <text x="120" y="40" font-family="Arial, sans-serif" font-size="13" font-weight="bold" text-anchor="middle" fill="#222222">Konto einrichten</text>
     <text x="100" y="32" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">Basis Use-Case</text>
     <line x1="30" y1="52" x2="210" y2="52" stroke="#555555" stroke-width="1" />
     <line x1="15" y1="42" x2="185" y2="42" stroke="#555555" stroke-width="1" />
     <text x="120" y="68" font-family="Arial, sans-serif" font-size="11" font-style="italic" text-anchor="middle" fill="#555555">extension points:</text>
     <text x="100" y="55" font-family="Arial, sans-serif" font-size="10" font-style="italic" text-anchor="middle" fill="#555555">extension points:</text>
     <text x="120" y="82" font-family="Arial, sans-serif" font-size="11" text-anchor="middle" fill="#222222">Premium-Option</text>
     <text x="100" y="68" font-family="Arial, sans-serif" font-size="10" text-anchor="middle" fill="#222222">Erweiterungspunkt</text>
   </g>
   </g>
    
    
   <g>
   <g>
     <line x1="440" y1="150" x2="255" y2="150" stroke="#222222" stroke-width="2" stroke-dasharray="6,6" />
     <line x1="410" y1="110" x2="220" y2="110" stroke="#222222" stroke-width="2" stroke-dasharray="6,6" />
     <polygon points="245,150 260,143 260,157" fill="#222222" />
     <polygon points="210,110 224,104 224,116" fill="#222222" />
     <text x="350" y="135" font-family="Arial, sans-serif" font-size="14" font-weight="bold" text-anchor="middle" fill="#222222">«extend»</text>
     <text x="315" y="95" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">&lt;&lt;extend&gt;&gt;</text>
   </g>
   </g>


   <g transform="translate(450, 100)">
   <g transform="translate(410, 70)">
     <ellipse cx="110" cy="50" rx="100" ry="45" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <ellipse cx="100" cy="40" rx="95" ry="38" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <text x="110" y="48" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">Premium-Features</text>
     <text x="100" y="44" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">Extension Use-Case</text>
    <text x="110" y="64" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">auswählen</text>
   </g>
   </g>


   <g transform="translate(250, 10)">
   <g transform="translate(220, 10)">
     <polygon points="0,0 170,0 190,20 190,60 0,60" fill="#ffffff" stroke="#222222" stroke-width="1" />
     <polygon points="0,0 160,0 180,20 180,50 0,50" fill="#ffffff" stroke="#222222" stroke-width="1" />
     <polygon points="170,0 170,20 190,20" fill="#ffffff" stroke="#222222" stroke-width="1" />
     <polygon points="160,0 160,20 180,20" fill="#ffffff" stroke="#222222" stroke-width="1" />
     <text x="10" y="20" font-family="Arial, sans-serif" font-size="11" font-weight="bold" fill="#222222">Condition: {Nutzer wählt</text>
     <text x="10" y="18" font-family="Arial, sans-serif" font-size="10" font-weight="bold" fill="#222222">Condition: {Bedingung}</text>
     <text x="10" y="35" font-family="Arial, sans-serif" font-size="11" font-weight="bold" fill="#222222">Premium-Abonnement}</text>
     <text x="10" y="34" font-family="Arial, sans-serif" font-size="10" fill="#555555">Erweiterungspunkt</text>
    <text x="10" y="50" font-family="Arial, sans-serif" font-size="11" fill="#555555">Extension Point: Premium-Option</text>
   </g>
   </g>
    
    
   <line x1="345" y1="70" x2="345" y2="150" stroke="#555555" stroke-width="1" stroke-dasharray="3,3" />
   <line x1="310" y1="60" x2="310" y2="110" stroke="#555555" stroke-width="1" stroke-dasharray="3,3" />
</svg>
</svg>
</html>
</html>


=== 5. Generalisierung (Vererbung / Spezialisierung) ===
=== Generalisierung ===
Eine Generalisierungsbeziehung spiegelt das klassische Konzept der Vererbung (OOP) wider. Sie kann sowohl zwischen zwei Akteuren als auch zwischen zwei Anwendungsfällen existieren. Das spezialisierte Element erbt alle Eigenschaften, Attribute und Verhaltensweisen des allgemeinen Elements und konkretisiert diese.
Zwischen zwei Anwendungsfällen und Akteuren kann eine Generalisierungsbeziehung existieren (Vererbungspfeil). Ausgedrückt wird damit, dass der spezialisierte Anwendungsfall oder Akteur alle Bestandteile des allgemeinen Anwendungsfalls oder Akteurs beinhaltet. Der spezialisierte Anwendungsfall oder Akteur konkretisiert oder erweitert den allgemeinen Anwendungsfall.  
 
* '''Darstellung:''' Eine durchgehende Linie mit einer '''großen, leeren und geschlossenen Pfeilspitze'''.
* '''Pfeilrichtung:''' Der Pfeil zeigt immer '''vom spezifischen (Unterklasse) zum allgemeinen (Oberklasse)''' Element.
 
==== Praxisbeispiel: Nutzerhierarchie ====
Ein ''Fahrer'' ist eine explizite Spezialisierung des allgemeinen ''Anwenders''. Der Fahrer besitzt implizit jede Eigenschaft des Standard-Anwenders (wie Stammdaten: Vorname, Nachname, Username) und erbt dessen Fähigkeit, den Use Case ''Login durchführen'' aufzurufen, ohne dass dies redundant gezeichnet werden muss.


<html>
<html>
<svg width="400" height="320" viewBox="0 0 400 320" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
<svg width="360" height="260" viewBox="0 0 360 260" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
   <g transform="translate(40, 20)">
   <g transform="translate(30, 10)">
     <circle cx="30" cy="20" r="15" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <circle cx="30" cy="20" r="15" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="35" x2="30" y2="75" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="35" x2="30" y2="75" stroke="#222222" stroke-width="2"/>
Zeile 194: Zeile 187:
     <line x1="30" y1="75" x2="10" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="10" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="50" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="50" y2="105" stroke="#222222" stroke-width="2"/>
     <text x="30" y="125" font-family="Arial, sans-serif" font-size="14" font-weight="bold" text-anchor="middle" fill="#222222">Anwender</text>
     <text x="30" y="125" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">Anwender</text>
   </g>
   </g>
  <g transform="translate(200, 45)">
    <ellipse cx="80" cy="35" rx="70" ry="30" fill="#ffffff" stroke="#222222" stroke-width="2"/>
    <text x="80" y="39" font-family="Arial, sans-serif" font-size="13" font-weight="bold" text-anchor="middle" fill="#222222">Login durchführen</text>
  </g>
  <line x1="100" y1="80" x2="200" y2="80" stroke="#222222" stroke-width="2" />


   <g>
   <g>
     <line x1="70" y1="195" x2="70" y2="165" stroke="#222222" stroke-width="2" />
     <line x1="60" y1="165" x2="60" y2="150" stroke="#222222" stroke-width="2" />
     <polygon points="70,150 60,165 80,165" fill="#ffffff" stroke="#222222" stroke-width="2" />
     <polygon points="60,135 50,150 70,150" fill="#ffffff" stroke="#222222" stroke-width="2" />
    <text x="85" y="185" font-family="Arial, sans-serif" font-size="12" font-style="italic" fill="#555555">Generalisierung</text>
   </g>
   </g>


   <g transform="translate(40, 180)">
   <g transform="translate(30, 145)">
     <circle cx="30" cy="20" r="15" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <circle cx="30" cy="20" r="15" fill="#ffffff" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="35" x2="30" y2="75" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="35" x2="30" y2="75" stroke="#222222" stroke-width="2"/>
Zeile 215: Zeile 201:
     <line x1="30" y1="75" x2="10" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="10" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="50" y2="105" stroke="#222222" stroke-width="2"/>
     <line x1="30" y1="75" x2="50" y2="105" stroke="#222222" stroke-width="2"/>
     <text x="30" y="125" font-family="Arial, sans-serif" font-size="14" font-weight="bold" text-anchor="middle" fill="#222222">Fahrer</text>
     <text x="30" y="125" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">Fahrer</text>
   </g>
   </g>
</svg>
</svg>
</html>
</html>


== Zusammenfassende Gegenüberstellung für die Klausur / Praxis ==
Im obigen Beispiel ist der Akteur '''Fahrer''' eine Spezialisierung von '''Anwender'''. Ein Fahrer besitzt alle Fähigkeiten, Use Cases und Eigenschaften eines allgemeinen Anwenders, wie z.B. Vorname, Nachname, Benutzername und dass er sich mit dem Benutzernamen und Passwort anmelden kann (login), fügt jedoch spezifische Eigenschaften oder Rollen hinzu.
 
{| class="wikitable" style="width:100%; border:1px solid #aaa;"
|- style="background:#eeeeee;"
! Beziehungstyp !! Notation im Diagramm !! Semantik (Bedeutung) !! Typischer Anwendungsfall
|-
| '''Assoziation''' || Durchgehende Linie || Kommunikationspfad || Verknüpft primäre Akteure mit Kernfunktionen.
|-
| '''Include''' || Gestrichelte Linie + Pfeil zum Ziel + <code>«include»</code> || Zwingende Ausführung (100% Pflicht) || Auslagerung von wiederkehrenden Funktionen wie Login oder Validierung.
|-
| '''Extend''' || Gestrichelte Linie + Pfeil zur Basis + <code>«extend»</code> || Optionale Ausführung (0-100% je nach Bedingung) || Modellierung von Ausnahmefällen, Fehlermeldungen oder optionalen Zusatzfunktionen.
|-
| '''Generalisierung''' || Linie + geschlossene, leere Pfeilspitze || "Ist-ein"-Beziehung (Vererbung) || Abbildung von Benutzer-Rollenstrukturen (Rechtehierarchien).
|}


[[Kategorie:Modellierung]]
[[Kategorie:Modellierung]]
[[Kategorie:FI_I_SDM]]
[[Kategorie:FI_I_SDM]]
[[Kategorie:AHR_I_Informatik LK]]
[[Kategorie:AHR_I_Informatik LK]]

Version vom 22. Mai 2026, 08:19 Uhr

Einführung

Die Unified Modeling Language (Vereinheitlichte Modellierungssprache), kurz UML, ist eine standardisierte grafische Modellierungssprache zur Beschreibung von Anforderungen und Softwarearchitekturen. Das Anwendungsfalldiagramm ist Teil der UML und wird im englischsprachigen Raum auch als Use Case Diagramm bezeichnet.

Ziel des Anwendungsfalldiagramms ist es, in der Analysephase die funktionalen Anforderungen des Auftraggebers aus fachlicher Sicht für alle Beteiligten verständlich, übersichtlich und vollständig zu modellieren. Es dient als zentrales Kommunikationsmittel, um zwischen potenziellen Anwendern, Auftraggebern (Fachseite) und Auftragnehmern (Entwicklerteam) zu vermitteln. Als strukturierte Anforderungsbeschreibung können Anwendungsfalldiagramme direkt in das Lastenheft mit aufgenommen werden.

Das Anwendungsfalldiagramm besteht aus drei wesentlichen Elementen:<ref>Heide Balzer: Lehrbuch der Objektmodellierung - Analyse und Entwurf, Spektrum Akademischer Verlag, S. 62 ff.</ref>

  1. Akteure (engl. actors): In einem Anwendungsfalldiagramm werden potenzielle Benutzer des Systems identifiziert. Diese Benutzer nennt man Akteure. Jeder Akteur hat gewisse Erwartungen an die Software. Benutzer erwarten, dass das Programm ihnen hilft, ihre Aufgaben schneller und einfacher zu lösen.
  2. Anwendungsfälle (engl. use cases): Diese Aufgaben der Benutzer nennt man Anwendungsfälle. Sie erzeugen für den Anwender ein Ergebnis von messbarem Wert.
  3. Beziehungen (engl. relations): Die Verbindung zwischen Akteur und Anwendungsfall (oder zwischen Anwendungsfällen untereinander) nennt man Beziehung oder Relation.

Hinweis zur Abgrenzung: Der detaillierte, prozessuale Ablauf von Anwendungsfällen wird nicht hier, sondern vorzugsweise in einem UML-Aktivitätendiagramm dargestellt.

Notation

Der Aufbau eines Anwendungsfalldiagramms folgt methodisch folgenden drei Regeln:

  1. Akteure identifizieren: Als erstes sollte man klären, welche unterschiedlichen Akteure die zu erstellende Software benutzen werden. Akteure werden als „Strichmännchen“ dargestellt. Alle notwendigen Benutzer der Software sind darzustellen. Dies sind in der Regel Personen wie Kunden, Mitarbeiter oder Administratoren. Es können aber auch andere Software-Systeme sein, die eine Anwendung benutzen werden. Jeder Akteur sollte einen aussagekräftigen und selbsterklärenden Namen haben. „User“ bzw. „Akteur“ sind keine aussagekräftigen Namen, da sie für jede Software gültig sind.
  2. Anwendungsfälle definieren: Als zweites sollte geklärt werden, welche Anwendungsfälle die Software erfüllen soll. Anwendungsfälle werden in Ellipsen dargestellt. In diese Ellipsen wird die inhaltliche Beschreibung geschrieben. Es wird empfohlen, den Anwendungsfall kurz und aussagekräftig zusammenzufassen. Trotz der Kürze muss er verständlich bleiben! Daher sollte er in einem ganzen, aber möglichst knappen Satz im Sinne von Subjekt-Prädikat-Objekt (bzw. im Infinitiv) formuliert werden.
  3. Beziehungen verknüpfen: Erst im dritten Schritt werden die Anwendungsfälle und Akteure über Beziehungen miteinander verbunden. Beziehungen zwischen Akteuren und Anwendungsfällen müssen durch Linien gekennzeichnet werden.

Beziehungen

Assoziation

Assoziationen verbinden Akteure mit Use Cases. Eine Assoziation bedeutet, dass der User die Aktion ausführen kann und somit mit dem System interagiert, das den Use Case enthält. Dabei darf ein einzelner Use Case mit mehreren Akteuren und ein einzelner Akteur mit mehreren Use Cases verbunden sein. Eine einzelne Assoziation muss immer genau zwei Elemente miteinander verbinden (binäre Assoziation).

Ungerichtete Assoziation

Ungerichtete Assoziationen werden als eine durchgehende Linie dargestellt. Es ist die offenste Form der Darstellung und lässt Spielraum für Interpretation bezüglich des genauen Datenflusses.

Akteur Anwendungsfall

Gerichtete Assoziation

Pfeile an der Assoziation geben an, wer die Aktion initiieren kann. Hier spricht man von einer gerichteten Assoziation. Ein Pfeil, der auf den Use Case gerichtet ist, besagt, dass nur der Akteur die Aktion initiieren kann, während ein Pfeil, der auf den Akteur zeigt, besagt, dass nur der Use Case die Aktion initiieren kann. Können beide Seiten die Aktion initiieren, werden die Pfeile weggelassen, anstatt zwei Pfeile zu setzen.

Akteur Anwendungsfall

Multiplizitäten

Multiplizitäten geben an, wie viele Akteure mit wie vielen Anwendungsfällen in Beziehung stehen. Sie werden an gerichtete oder ungerichtete Assoziationen modelliert.

Spielerin 1 3..* Tischtennis-Rundlauf 0..* 0..1 Schiedsrichterin

Die Multiplizitäten sind im obigen Beispiel wie folgt zu lesen:

  • An einem Tischtennis-Rundlauf sind mindestens 3 Spielerinnen beteiligt. Die Obergrenze ist als * bzw. beliebig definiert und die Untergrenze ist 3. Jede Spielerin jedoch kann an exakt einem Rundlauf-Spiel teilnehmen. Hier sind die Ober- und Untergrenze 1.
  • An einem Rundlaufspiel können keine oder beliebig viele Schiedsrichterinnen beteiligt sein (0..*). Jede Schiedsrichterin kann an höchstens einem Rundlaufspiel beteiligt sein (0..1).

Da diese Information jedoch häufig für die Adressaten des Use Case Diagramms keine Rolle spielt, werden Multiplizitäten im Anwendungsfalldiagramm eher selten notiert. Eine elementare Rolle spielen sie hingegen beim Klassendiagramm.

Includes

include-Beziehungen (dt. beinhalten) werden mittels einer mit <<include>> gekennzeichneten gestrichelten Linie und einem Pfeil zum inkludierten Anwendungsfall gekennzeichnet. Hierdurch wird abgebildet, dass der inkludierte Anwendungsfall immer zwingend ausgeführt werden muss.

Die Include-Anweisung gibt an, dass ein Use Case alle inkludierten Use Cases zwingend mitbenutzt. Die Include-Beziehung wird durch eine gestrichelte Linie dargestellt, die durch das Schlüsselwort <<include>> gekennzeichnet ist und vom Basis Use Case einen Pfeil in Richtung des zu inkludierenden Use Cases hat.

Basis Use-Case <<include>> Inkludierter Use-Case

Extend

Die extend-Beziehung gibt an, dass ein Use Case optional ist und nur unter bestimmten Bedingungen ausgeführt wird. Sie wird durch eine gestrichelte Linie dargestellt, die durch das Schlüsselwort <<extend>> gekennzeichnet ist und vom Extension Use Case (Erweiterung) einen Pfeil in Richtung des Basis Use Cases hat.

Der Basis Use Case bestimmt sogenannte Erweiterungspunkte (Extension Points), die den präzisen Ort innerhalb des Use Cases angeben, an dem Extensions hinzugefügt werden dürfen. Erweiterungspunkte werden dargestellt, indem dem Use Case eine horizontale Linie hinzugefügt wird, unter der das Schlüsselwort extension points steht, gefolgt von den Namen der Erweiterungspunkte.

Optional kann an eine Extend-Anweisung eine Bedingung (Condition) hinzugefügt werden, die beschreibt, unter welchen Voraussetzungen bezogen auf den Erweiterungspunkt der Extend Use Case ausgeführt wird. Die Bedingung wird in der UML als Notizzettel dargestellt, der das Schlüsselwort Condition enthält, gefolgt von der Bedingung in geschweiften Klammern und darunter der Erweiterungspunkt, auf den sich die Bedingung bezieht. Die Bedingung ist mit einer gestrichelten Linie mit der Linie der Extend-Anweisung verbunden.

Basis Use-Case extension points: Erweiterungspunkt <<extend>> Extension Use-Case Condition: {Bedingung} Erweiterungspunkt

Generalisierung

Zwischen zwei Anwendungsfällen und Akteuren kann eine Generalisierungsbeziehung existieren (Vererbungspfeil). Ausgedrückt wird damit, dass der spezialisierte Anwendungsfall oder Akteur alle Bestandteile des allgemeinen Anwendungsfalls oder Akteurs beinhaltet. Der spezialisierte Anwendungsfall oder Akteur konkretisiert oder erweitert den allgemeinen Anwendungsfall.

Anwender Fahrer

Im obigen Beispiel ist der Akteur Fahrer eine Spezialisierung von Anwender. Ein Fahrer besitzt alle Fähigkeiten, Use Cases und Eigenschaften eines allgemeinen Anwenders, wie z.B. Vorname, Nachname, Benutzername und dass er sich mit dem Benutzernamen und Passwort anmelden kann (login), fügt jedoch spezifische Eigenschaften oder Rollen hinzu.