Anwendungsfalldiagramm: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
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, Spezifikation und Dokumentation von Anforderungen und Softwarearchitekturen. Das '''Anwendungsfalldiagramm''' (engl. '''Use Case Diagramm''') ist ein elementares Verhaltensdiagramm der UML.


=== Zielsetzung im Software-Lebenszyklus ===
Ziel des Anwendungsfalldiagramms ist es, in der Analysephase (Requirements Engineering) 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 barrierefrei zwischen potenziellen Anwendern, Auftraggebern (Fachseite) und Auftragnehmern (Entwicklungsteam) zu vermitteln. Als strukturierte funktionale Anforderungsbeschreibung sind Anwendungsfalldiagramme ein fester Bestandteil des [[Lastenheft]]s und bilden die primäre Grundlage für das [[Pflichtenheft]].
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:
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''):''' Sie identifizieren die externen Benutzer oder Systeme, die mit dem System interagieren. Jeder Akteur repräsentiert eine '''Rolle''' und keine konkrete Person.
# '''Akteure (Actors):''' Wer interagiert mit dem System? (Sowohl Personen als auch externe Systeme).
# '''Anwendungsfälle (engl. ''use cases''):''' Sie beschreiben die vom System angebotenen Funktionalitäten und Aufgaben, die für den Akteur ein Ergebnis von messbarem, fachlichem Wert erzeugen.
# '''Anwendungsfälle (Use Cases):''' Was kann mit dem System getan werden? Welche Ziele werden erreicht?
# '''Beziehungen (engl. ''relations''):''' Sie definieren die Kommunikationspfade zwischen Akteuren und Anwendungsfällen sowie die strukturellen Abhängigkeiten der Anwendungsfälle untereinander.
# '''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:'' Ein Anwendungsfalldiagramm bildet '''keine''' zeitlichen, logischen oder prozessualen Abläufe ab. Für die Modellierung von Kontrollflüssen und sequentiellen Prozessen sind stattdessen UML-Aktivitätendiagramme oder Sequenzdiagramme zu verwenden.


== Systematische Notation und Aufbau ==
== Gesamtbeispiel (Systemkontext) ==
Die Erstellung eines normkonformen Diagramms folgt einem klaren, dreistufigen iterativen Prozess:
Ein vollständiges Anwendungsfalldiagramm führt alle Funktionseinheiten innerhalb eines umschließenden '''Systemrahmens (Systemgrenze / System Boundary)''' zusammen. Der Rahmen grenzt das zu entwickelnde System strikt von seiner Umwelt ab: Akteure stehen als externe Entitäten immer außerhalb des Systems, während die Anwendungsfälle die interne Funktionalität definieren.


=== 1. Akteure identifizieren (Actors) ===
[[Datei:AnwendungsfallSys.png|mini|Gesamtbeispiel eines Use-Case-Diagramms mit Systemgrenze, Akteuren und verknüpften Beziehungen]]
Akteure stellen Rollen dar, die außerhalb des betrachteten Systems liegen, aber mit diesem interagieren.  
* '''Darstellung:''' Grafisch als klassisches Strichmännchen (für menschliche Rollen) oder als Rechteck mit dem Stereotyp <code>«system»</code> (für externe Software/Hardware).
* '''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) ===
== Notation ==
Ein Anwendungsfall beschreibt eine Sequenz von Interaktionen, die für den Akteur ein Ergebnis von messbarem, fachlichem Wert liefert.
Der methodische Aufbau eines standardkonformen Anwendungsfalldiagramms folgt drei sequentiellen Schritten:
* '''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) ===
# '''Akteure identifizieren:''' Es wird festgelegt, welche unterschiedlichen Rollen das System nutzen werden. Menschliche Rollen werden grafisch als Strichmännchen dargestellt, externe Software- oder Hardwaresysteme als Rechtecke mit dem Stereotyp <code>«system»</code>. Jeder Akteur muss einen eindeutigen, selbsterklärenden Namen im Singular erhalten (z. B. ''Kunde'', ''Administrator''). Allgemeine Bezeichnungen wie „User“ oder „Akteur“ sind zu vermeiden, da sie für fast jedes Softwaresystem gültig sind und keine spezifische Rolle beschreiben.
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.
# '''Anwendungsfälle definieren:''' Es wird geklärt, welche fachlichen Ziele das System erfüllen muss. Anwendungsfälle werden als horizontale Ellipsen dargestellt, die eine kurze Inhaltsbeschreibung enthalten. Die Formulierung muss kurz, aussagekräftig und im Infinitiv bzw. im Format ''Subjekt-Prädikat-Objekt'' erfolgen (z. B. ''Artikel suchen'', ''Passwort zurücksetzen'').
# '''Beziehungen verknüpfen:''' Erst im letzten Schritt werden die Akteure und Anwendungsfälle über strukturierte Beziehungslinien miteinander verbunden, um die Interaktionskanäle visuell zu definieren.


<html>
== Beziehungen ==
<svg width="600" height="220" viewBox="0 0 600 220" 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" />
  <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"/>
    <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="14" font-weight="bold" text-anchor="middle" fill="#222222">Kunde</text>
  </g>
 
  <line x1="110" y1="120" x2="240" y2="120" stroke="#222222" stroke-width="2" />
  <text x="175" y="110" font-family="Arial, sans-serif" font-size="12" fill="#555555" text-anchor="middle">Assoziation</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>
</svg>
</html>


== Detaillierte Typisierung von Beziehungen ==
=== Assoziation ===
Assoziationen bilden die grundlegenden Kommunikationspfade zwischen Akteuren und Use Cases. Eine Assoziation signalisiert, dass der verknüpfte Akteur die Aktion des Use Cases ausführen oder mit diesem interagieren kann. Es handelt sich um eine binäre Beziehung, die exakt zwei Elemente miteinander verbindet. Ein einzelner Use Case darf mit mehreren Akteuren und ein einzelner Akteur mit mehreren Use Cases verbunden sein.


=== 1. Assoziationen (Akteur ↔ Use Case) ===
==== Ungerichtete Assoziation ====
Assoziationen bilden das Fundament der Kommunikation zwischen Akteur und System. Es handelt sich um eine binäre Beziehung (verbindet genau zwei Elemente).
Ungerichtete Assoziationen werden als einfache, durchgehende Linie dargestellt. Sie stellt die offenste Form der Interaktion dar und signalisiert einen bidirektionalen Informationsfluss, lässt jedoch die Richtung der Initiierung (wer die Aktion startet) offen.


* '''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.
[[Datei:AnwendungsfallEinweihungsfeier.png|mini|Ungerichtete Assoziation als einfache Verbindungslinie]]
* '''Gerichtete Assoziation:''' Eine Linie mit einer offenen Pfeilspitze. Der Pfeil zeigt auf den Initiator des Datenflusses bzw. der Aktion:
** 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 ===
==== Gerichtete Assoziation ====
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.
Eine gerichtete Assoziation verwendet eine offene Pfeilspitze, um die Navigierbarkeit und den Initiator des Prozesses eindeutig festzulegen.
* Ein Pfeil, der '''auf den Use Case gerichtet''' ist, besagt, dass der Akteur den Anwendungsfall aktiv initiiert.
* Ein Pfeil, der '''auf den Akteur zeigt''', besagt, dass der Use Case (bzw. das System) die Interaktion zum Akteur hin anstößt (häufig bei sekundären Systemen oder Benachrichtigungsdiensten).
* Können beide Seiten die Aktion unabhängig voneinander initiieren, werden die Pfeile weggelassen.


==== Praxisbeispiel: Das Tischtennis-Rundlaufspiel ====
[[Datei:AnwendungsfallHotelreservierung.png|mini|Gerichtete Assoziation mit Pfeil zur Kennzeichnung des Initiators]]
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>
=== Multiplizitäten ===
<svg width="750" height="280" viewBox="0 0 750 280" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
Multiplizitäten (Kardinalitäten) geben an, wie viele Instanzen eines Akteurs mit wie vielen Instanzen eines Anwendungsfalls in einer konkreten Systeminteraktion in Beziehung stehen können. Sie werden direkt an den Enden der Assoziationslinien notiert.
  <g transform="translate(265, 100)">
    <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)">
[[Datei:AnwendungsfallTischtennis.png|mini|Modellierung von Multiplizitäten am Beispiel eines Tischtennis-Rundlaufs]]
    <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="14" font-weight="bold" text-anchor="middle" fill="#222222">Spielerin</text>
  </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>
  <text x="240" y="125" font-family="Arial, sans-serif" font-size="14" font-weight="bold" fill="#b30000">3..*</text>


  <g transform="translate(640, 50)">
Die Multiplizitäten des Beispiels sind gemeldet nach UML-Standard wie folgt zu interpretieren:
    <circle cx="30" cy="20" r="15" fill="#ffffff" stroke="#222222" stroke-width="2"/>
* An einem Tischtennis-Rundlauf (Use Case) sind mindestens 3 Spielerinnen beteiligt. Die Untergrenze ist <code>3</code>, die Obergrenze ist als <code>*</code> (beliebig viele) definiert (Notation: <code>3..*</code>). Jede Spielerin kann jedoch zeitgleich an exakt einem Rundlauf-Spiel teilnehmen (Notation: <code>1</code>).
    <line x1="30" y1="35" x2="30" y2="75" stroke="#222222" stroke-width="2"/>
* An einem Rundlaufspiel können keine oder beliebig viele Schiedsrichterinnen beteiligt sein (Notation: <code>0..*</code>). Jede Schiedsrichterin kann wiederum an höchstens einem Rundlaufspiel aktiv beteiligt sein (Notation: <code>0..1</code>).
    <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="14" font-weight="bold" text-anchor="middle" fill="#222222">Schiedsrichterin</text>
  </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>
</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]].
''Hinweis für die Praxis:'' Da diese Detailinformationen die Adressaten eines Use-Case-Diagramms häufig überfordern, werden Multiplizitäten hier selten notiert. Ihre zentrale und fundamentale Bedeutung entfalten sie im strukturellen [[Klassendiagramm]].


=== 3. Include-Beziehungen (Abhängigkeiten) ===
=== Includes (Inklusion) ===
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.
Eine '''Include-Beziehung''' (dt. ''beinhalten'' oder ''einschließen'') beschreibt eine zwingende Abhängigkeit zur Vermeidung von funktionaler Redundanz (Wiederverwendung von Use Cases).  


* '''Pfeilrichtung:''' Der gestrichelte Pfeil startet beim ''Basis-Use-Case'' und zeigt '''auf den inkludierten''' Use Case.
Die Beziehung wird durch eine gestrichelte Linie mit einer offenen Pfeilspitze dargestellt, die mit dem Stereotyp <code>«include»</code> gekennzeichnet ist. Der Pfeil startet immer beim '''Basis-Use-Case und zeigt in Richtung des zu inkludierenden Use Cases'''.
* '''Stereotyp:''' Die Beziehungslinie muss zwingend mit dem Schlüsselwort <code>«include»</code> gekennzeichnet werden.
* '''Semantik:''' Der inkludierte Anwendungsfall wird '''immer (zu 100 %)''' ausgeführt, sobald der Basis-Anwendungsfall aufgerufen wird. Der Basis-Use-Case ist ohne das Inkludat funktional unvollständig.


<html>
[[Datei:AnwendungsfallHotelreservierungKomplex.png|mini|Zwingende Include-Beziehung zur Auslagerung gemeinsamer Funktionalitäten]]
<svg width="650" height="140" viewBox="0 0 650 140" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
  <g transform="translate(10, 30)">
    <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">Bestellung aufgeben</text>
  </g>
 
  <g>
    <line x1="210" y1="70" x2="420" y2="70" stroke="#222222" stroke-width="2" stroke-dasharray="6,6" />
    <polygon points="430,70 415,63 415,77" 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>
  </g>


  <g transform="translate(430, 30)">
=== Extend (Erweiterung) ===
    <ellipse cx="110" cy="40" rx="100" ry="35" fill="#ffffff" stroke="#222222" stroke-width="2"/>
Eine '''Extend-Beziehung''' (dt. ''erweitern'') beschreibt ein '''optionales''' Verhalten, das den Basis-Use-Case nur unter ganz bestimmten Bedingungen ergänzt.
    <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>
  </g>
</svg>
</html>


=== 4. Extend-Beziehungen (Erweiterungen) ===
Die Beziehung wird durch eine gestrichelte Linie mit einer offenen Pfeilspitze dargestellt, die mit dem Stereotyp <code>«extend»</code> gekennzeichnet ist. Die Pfeilrichtung verhält sich umgekehrt zum Include: Der Pfeil startet beim '''Extension-Use-Case (Erweiterung) und zeigt in Richtung des Basis-Use-Cases'''.
Die <code>«extend»</code>-Beziehung modelliert ein '''optionales''' Verhalten. Der erweiternde Use Case wird nur unter präzise definierten Rahmenbedingungen ausgeführt.


* '''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'''.
Der Basis-Use-Case deklariert sogenannte '''Erweiterungspunkte (Extension Points)''', die den präzisen Ort innerhalb des Ablaufs definieren, an dem die Erweiterung eingreifen darf. Grafisch wird hierzu in der Ellipse des Basis-Use-Cases eine horizontale Trennlinie eingezogen, unter der das Schlüsselwort <code>extension points:</code> gefolgt von den Namen der Punkte steht.
* '''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>
Optional wird an die Extend-Linie über eine fein gestrichelte Linie ein UML-Notizsymbol angeheftet. Dieses enthält das Schlüsselwort <code>Condition:</code> gefolgt von der logischen Bedingung in geschweiften Klammern <code>{...}</code> sowie den Verweis auf den zugehörigen Erweiterungspunkt.
<svg width="700" height="300" viewBox="0 0 700 300" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
* '''Semantik:''' Der Basis-Use-Case ist auch ohne die Erweiterung vollkommen autark lauffähig. Der Extension-Use-Case wird nur dann ausgeführt, wenn die definierte Bedingung am Erweiterungspunkt wahr (true) ist.
  <g transform="translate(20, 100)">
    <ellipse cx="120" cy="50" rx="110" ry="45" 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>
    <line x1="30" y1="52" x2="210" y2="52" 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="120" y="82" font-family="Arial, sans-serif" font-size="11" text-anchor="middle" fill="#222222">Premium-Option</text>
  </g>
 
  <g>
    <line x1="440" y1="150" x2="255" y2="150" stroke="#222222" stroke-width="2" stroke-dasharray="6,6" />
    <polygon points="245,150 260,143 260,157" 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>
  </g>


  <g transform="translate(450, 100)">
[[Datei:AnwendungsfalldiagrammHotelreservierungKomplexErkl.png|mini|Optionale Extend-Beziehung mit expliziten Extension Points und Notizfeld für die Bedingung (Condition)]]
    <ellipse cx="110" cy="50" rx="100" ry="45" 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="110" y="64" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222">auswählen</text>
  </g>


  <g transform="translate(250, 10)">
=== Generalisierung (Vererbung) ===
    <polygon points="0,0 170,0 190,20 190,60 0,60" fill="#ffffff" stroke="#222222" stroke-width="1" />
Zwischen Akteuren untereinander sowie zwischen Anwendungsfällen untereinander kann eine Generalisierungsbeziehung existieren. Sie modelliert eine klassische '''"Ist-ein"-Beziehung''', analog zur Vererbung in der objektorientierten Programmierung.
    <polygon points="170,0 170,20 190,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="35" font-family="Arial, sans-serif" font-size="11" font-weight="bold" fill="#222222">Premium-Abonnement}</text>
    <text x="10" y="50" font-family="Arial, sans-serif" font-size="11" fill="#555555">Extension Point: Premium-Option</text>
  </g>
 
  <line x1="345" y1="70" x2="345" y2="150" stroke="#555555" stroke-width="1" stroke-dasharray="3,3" />
</svg>
</html>


=== 5. Generalisierung (Vererbung / Spezialisierung) ===
Die Generalisierung wird grafisch durch eine durchgehende Linie mit einer '''geschlossenen, hohlen Dreieckspfeilspitze''' dargestellt. Der Pfeil zeigt immer '''vom spezialisierten Element (Unterklasse) zum allgemeinen Element (Oberklasse)'''.
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.


* '''Darstellung:''' Eine durchgehende Linie mit einer '''großen, leeren und geschlossenen Pfeilspitze'''.
[[Datei:AnwendungsfallCD.png|mini|Strukturelle Generalisierung zwischen Akteuren oder Funktionseinheiten]]
* '''Pfeilrichtung:''' Der Pfeil zeigt immer '''vom spezifischen (Unterklasse) zum allgemeinen (Oberklasse)''' Element.


==== Praxisbeispiel: Nutzerhierarchie ====
* '''Generalisierung von Akteuren:''' Im Beispiel ist der Akteur ''Fahrer'' eine Spezialisierung von ''Anwender''. Der Fahrer erbt bedingungslos alle Fähigkeiten, Use Cases und Attribute des allgemeinen Anwenders (z. B. Stammdaten und die Interaktion mit dem Use Case ''Login durchführen''), konkretisiert oder erweitert diese Rolle jedoch um spezifische Eigenschaften.
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.
* '''Generalisierung von Anwendungsfällen:''' Ein abstrakter Anwendungsfall wie ''„Medium brennen“'' kann durch spezialisierte Anwendungsfälle wie ''„CD brennen“'' oder ''„DVD brennen“'' geerbt und ausdifferenziert werden.
 
<html>
<svg width="400" height="320" viewBox="0 0 400 320" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
  <g transform="translate(40, 20)">
    <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="14" font-weight="bold" text-anchor="middle" fill="#222222">Anwender</text>
  </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>
    <line x1="70" y1="195" x2="70" y2="165" stroke="#222222" stroke-width="2" />
    <polygon points="70,150 60,165 80,165" 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 transform="translate(40, 180)">
    <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="14" font-weight="bold" text-anchor="middle" fill="#222222">Fahrer</text>
  </g>
</svg>
</html>
 
== Zusammenfassende Gegenüberstellung für die Klausur / Praxis ==
 
{| 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]]