|
|
| (8 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 Beschreibung von Anforderungen und Softwarearchitekturen. Das '''Anwendungsfalldiagramm''' ist Teil der UML und wird im englischsprachigen Raum auch als '''Use Case Diagramm''' bezeichnet. | | 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. |
|
| |
|
| 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. | | 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]]. |
|
| |
|
| Das Anwendungsfalldiagramm besteht aus drei wesentlichen Elementen:<ref>Heide Balzer: ''Lehrbuch der Objektmodellierung - Analyse und Entwurf'', Spektrum Akademischer Verlag, S. 62 ff.</ref> | | Das Anwendungsfalldiagramm besteht aus drei wesentlichen Elementen: |
| # '''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 (engl. ''actors''):''' Sie identifizieren die externen Benutzer oder Systeme, die mit dem System interagieren. Jeder Akteur repräsentiert eine '''Rolle''' und keine konkrete Person. |
| # '''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 (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. |
| # '''Beziehungen (engl. ''relations''):''' Die Verbindung zwischen Akteur und Anwendungsfall (oder zwischen Anwendungsfällen untereinander) nennt man Beziehung oder Relation. | | # '''Beziehungen (engl. ''relations''):''' Sie definieren die Kommunikationspfade zwischen Akteuren und Anwendungsfällen sowie die strukturellen Abhängigkeiten der Anwendungsfälle untereinander. |
|
| |
|
| ''Hinweis zur Abgrenzung:'' Der detaillierte, prozessuale Ablauf von Anwendungsfällen wird nicht hier, sondern vorzugsweise in einem UML-Aktivitätendiagramm dargestellt. | | ''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. |
| | |
| | == Gesamtbeispiel (Systemkontext) == |
| | 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. |
| | |
| | [[Datei:AnwendungsfallSys.png|mini|Gesamtbeispiel eines Use-Case-Diagramms mit Systemgrenze, Akteuren und verknüpften Beziehungen]] |
|
| |
|
| == Notation == | | == Notation == |
| Der Aufbau eines Anwendungsfalldiagramms folgt methodisch folgenden drei Regeln: | | Der methodische Aufbau eines standardkonformen Anwendungsfalldiagramms folgt drei sequentiellen Schritten: |
|
| |
|
| # '''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 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. |
| # '''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. | | # '''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 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 verknüpfen:''' Erst im letzten Schritt werden die Akteure und Anwendungsfälle über strukturierte Beziehungslinien miteinander verbunden, um die Interaktionskanäle visuell zu definieren. |
|
| |
|
| == Beziehungen == | | == Beziehungen == |
|
| |
|
| === Assoziation === | | === 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). | | 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. |
|
| |
|
| ==== Ungerichtete 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. | | 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. |
|
| |
|
| <html>
| | [[Datei:AnwendungsfallEinweihungsfeier.png|mini|Ungerichtete Assoziation als einfache Verbindungslinie]] |
| <svg width="450" height="140" viewBox="0 0 450 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>
| |
| <line x1="90" y1="65" x2="230" y2="65" stroke="#222222" stroke-width="2" />
| |
| <g transform="translate(230, 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>
| |
|
| |
|
| ==== Gerichtete Assoziation ==== | | ==== 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.
| | 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. |
|
| |
|
| <html>
| | [[Datei:AnwendungsfallHotelreservierung.png|mini|Gerichtete Assoziation mit Pfeil zur Kennzeichnung des Initiators]] |
| <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>
| |
|
| |
|
| === Multiplizitäten === | | === 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. | | 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. |
| | |
| <html>
| |
| <svg width="720" height="160" viewBox="0 0 720 160" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
| |
| <g transform="translate(20, 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">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>
| |
|
| |
| <line x1="460" y1="65" x2="620" y2="65" stroke="#222222" stroke-width="2" />
| |
| <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(620, 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">Schiedsrichterin</text>
| |
| </g>
| |
| </svg>
| |
| </html>
| |
| | |
| 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>).
| |
| | |
| 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 ===
| | [[Datei:AnwendungsfallTischtennis.png|mini|Modellierung von Multiplizitäten am Beispiel eines Tischtennis-Rundlaufs]] |
| <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. | | Die Multiplizitäten des Beispiels sind gemeldet nach UML-Standard wie folgt zu interpretieren: |
| | * 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>). |
| | * 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>). |
|
| |
|
| <html>
| | ''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]]. |
| <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, 20)">
| |
| <ellipse cx="95" cy="35" rx="90" ry="30" fill="#ffffff" stroke="#222222" stroke-width="2"/>
| |
| <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>
| |
| <line x1="200" y1="55" x2="370" y2="55" stroke="#222222" stroke-width="2" stroke-dasharray="6,6" />
| |
| <polygon points="380,55 366,49 366,61" fill="#222222" />
| |
| <text x="290" y="42" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222"><<include>></text>
| |
| </g>
| |
|
| |
|
| <g transform="translate(380, 20)">
| | === Includes (Inklusion) === |
| <ellipse cx="95" cy="35" rx="90" ry="30" fill="#ffffff" stroke="#222222" stroke-width="2"/>
| | Eine '''Include-Beziehung''' (dt. ''beinhalten'' oder ''einschließen'') beschreibt eine zwingende Abhängigkeit zur Vermeidung von funktionaler Redundanz (Wiederverwendung von Use Cases). |
| <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>
| |
| </svg>
| |
| </html>
| |
|
| |
|
| === Extend ===
| | 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'''. |
| 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. | | * '''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. |
|
| |
|
| 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.
| | [[Datei:AnwendungsfallHotelreservierungKomplex.png|mini|Zwingende Include-Beziehung zur Auslagerung gemeinsamer Funktionalitäten]] |
|
| |
|
| 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.
| | === Extend (Erweiterung) === |
| | Eine '''Extend-Beziehung''' (dt. ''erweitern'') beschreibt ein '''optionales''' Verhalten, das den Basis-Use-Case nur unter ganz bestimmten Bedingungen ergänzt. |
|
| |
|
| <html> | | 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'''. |
| <svg width="620" height="230" viewBox="0 0 620 230" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;"> | |
| <g transform="translate(10, 70)">
| |
| <ellipse cx="100" cy="40" rx="95" ry="38" fill="#ffffff" stroke="#222222" stroke-width="2"/>
| |
| <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="15" y1="42" x2="185" y2="42" stroke="#555555" stroke-width="1" />
| |
| <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="100" y="68" font-family="Arial, sans-serif" font-size="10" text-anchor="middle" fill="#222222">Erweiterungspunkt</text>
| |
| </g>
| |
|
| |
| <g>
| |
| <line x1="410" y1="110" x2="220" y2="110" stroke="#222222" stroke-width="2" stroke-dasharray="6,6" />
| |
| <polygon points="210,110 224,104 224,116" fill="#222222" />
| |
| <text x="315" y="95" font-family="Arial, sans-serif" font-size="12" font-weight="bold" text-anchor="middle" fill="#222222"><<extend>></text>
| |
| </g>
| |
|
| |
|
| <g transform="translate(410, 70)">
| | 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. |
| <ellipse cx="100" cy="40" rx="95" ry="38" fill="#ffffff" stroke="#222222" stroke-width="2"/>
| |
| <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>
| |
| </g>
| |
|
| |
|
| <g transform="translate(220, 10)">
| | 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. |
| <polygon points="0,0 160,0 180,20 180,50 0,50" fill="#ffffff" stroke="#222222" stroke-width="1" />
| | * '''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. |
| <polygon points="160,0 160,20 180,20" fill="#ffffff" stroke="#222222" stroke-width="1" />
| |
| <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="34" font-family="Arial, sans-serif" font-size="10" fill="#555555">Erweiterungspunkt</text>
| |
| </g>
| |
|
| |
| <line x1="310" y1="60" x2="310" y2="110" stroke="#555555" stroke-width="1" stroke-dasharray="3,3" />
| |
| </svg>
| |
| </html>
| |
|
| |
|
| === Generalisierung ===
| | [[Datei:AnwendungsfalldiagrammHotelreservierungKomplexErkl.png|mini|Optionale Extend-Beziehung mit expliziten Extension Points und Notizfeld für die Bedingung (Condition)]] |
| 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.
| |
|
| |
|
| <html>
| | === Generalisierung (Vererbung) === |
| <svg width="360" height="260" viewBox="0 0 360 260" xmlns="http://www.w3.org/2000/svg" style="background-color: transparent;">
| | 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. |
| <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">Anwender</text>
| |
| </g>
| |
|
| |
|
| <g>
| | 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)'''. |
| <line x1="60" y1="165" x2="60" y2="150" stroke="#222222" stroke-width="2" />
| |
| <polygon points="60,135 50,150 70,150" fill="#ffffff" stroke="#222222" stroke-width="2" />
| |
| </g>
| |
|
| |
|
| <g transform="translate(30, 145)">
| | [[Datei:AnwendungsfallCD.png|mini|Strukturelle Generalisierung zwischen Akteuren oder Funktionseinheiten]] |
| <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">Fahrer</text>
| |
| </g>
| |
| </svg>
| |
| </html>
| |
|
| |
|
| 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. | | * '''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. |
| | * '''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. |
|
| |
|
| [[Kategorie:Modellierung]] | | [[Kategorie:Modellierung]] |
| [[Kategorie:FI_I_SDM]] | | [[Kategorie:FI_I_SDM]] |
| [[Kategorie:AHR_I_Informatik LK]] | | [[Kategorie:AHR_I_Informatik LK]] |