Commit d1603281 authored by Claudia Kaar's avatar Claudia Kaar
Browse files

Merge branch 'master' into 'master'

Abgabe Almahrous/Ilhan

See merge request !29
parents 3090e416 ed845d30
# UML Sequenzdigramm
# Inhaltsverzeichnis
[Sequenzdiagramm](#Sequenzdiagramm)
[Konzepte eines Sequenzdiagramms](#Konzepte-eines-Sequenzdiagramms)
* [Objekt](#Objekt)
* [Zeitlinie](#Zeitlinie)
* [Aktivitätsbalken](#Aktivitätsbalken)
* [Nachricht](#Nachricht)
* [Synchrone Nachricht](#Synchrone-Nachricht)
* [Asynchrone Nachricht](#Asynchrone-Nachricht)
* [Interaktion](#Interaktiont)
[Beispielmodellierung](#Beispielmodellierung)
[Kombinierte Fragmente](#kombinierte-Fragmente)
* [Interaktionsoperatoren](#Interaktionsoperatoren)
* [Interaktionsoperanden](#Interaktionsoperanden)
* [Verzweigungen und Schleifen](#Verzweigungen-und-Schleifen)
* [Nebenläufigkeit und Ordnung](#Nebenläufigkeit-und-Ordnung)
* [Filterung und Zusicherung](#Filterung-und-Zusicherung)
* [Beispiele](#Beispiele)
# Sequenzdiagramm
Sequenzdiagramme (auch als Ereignisdiagramme oder Ereignisszenarien bezeichnet) sind Verhaltensdiagramme und sind im Rahmen der
UML eine von vier Interaktionsdiagrammen.
Es beschreibt Abläufe bzw. Kommunikationsaustausch zwischen Objekten und stellt dabei den zeitlichen Ablauf in den Vordergrund.
Software-Entwickler und Unternehmen greifen auf diese Diagramme zurück, um zu verstehen, welche Anforderungen ein neues System
stellt oder um bereits bestehende Prozesse grafisch festzuhalten.
In einem Sequenzdiagramm wird beschrieben welche Objekte an einer Kommunikation beteiligt sind und welche Informationen sie
untereinander austauschen und in welcher zeitlichen Reihenfolge dies geschieht.
Objekte tragen optional einen Namen und einen Typ. Die Interaktion ist dabei in zwei Richtungen lesbar. Von links nach rechts
sind die Kommunikationspartner in Form von Lebenslinien aufgereiht.
An einem Objekt ankommende und abgehende Interaktionen sind in zeitlicher Reihenfolge durch das Auftreffen auf der Zeitlinie dargestellt.
# Konzepte eines Sequenzdiagramms:
*Objekt*
Objekte werden mit Namen dargestellt. Mehrere Objekte desselben Typs sind dabei erlaubt. Typ ist dabei optional. Ein Objekt-Bezeichner muss mindestens aus einem Doppelpunkt gefolgt von einem Klassennamen bestehen, um das Objekt eindeutig als Instanz dieser Klasse zu kennzeichnen. Optional ist die Vergabe eines Variablennamens für diese Instanz. Diese Möglichkeit ist insbesondere nützlich, wenn mehrere Instanzen derselben Klasse in einem Sequenzdiagramm verwendet werden.
*Zeitlinie*
Neben den Objekten existieren auch Zeitlinien, die von oben nach unten verlaufen.
Auf dieser ist die zeitliche Abfolge von Kommunikationsschritten erkennbar.
Jedes Objekt hat solch eine Zeitlinie.
Die Zeit dabei ist allerdings nicht maßstabsgetreu und selbst die Reihenfolge der dargestellten Ereignisauftritte von
Nachrichten bezieht sich ausschließlich auf die jeweilige Lebenslinie,
nicht jedoch auf die anderen. Die Zeitlinie dient daher nur zur Darstellung zeitlicher Reihenfolgen von Interaktionen.
*Aktivitätsbalken*
Zusätzlich besitzen Objekte Aktivitätsbalken.
Da Objekte Nachrichten senden und empfangen, müssen sie dafür jeweils aktiv sein.
Dies wird durch Aktivitätsbalken modelliert. Zur Bearbeitung eines Methodenaufrufs ist ein Objekt eine gewisse Zeit aktiv.
Aktivitätsbalken beginnen und enden im Normalfall bei ein- beziehungsweise ausgehenden Pfeilen.
Sie können aber auch weggelassen werden, was eine Mehrdeutigkeit entstehen lässt.
Bei einem rekursiven Aufruf werden Aktivitätsbalken geschachtelt dargestellt werden.
Da ein Return-Pfeil ebenfalls ausgelassen werden kann, darf ein Aktivitätsbalken in diesem Fall ohne ausgehenden Pfeil enden.
*Nachricht*
Eine Nachricht kennzeichnet eine Kommunikation zwischen zwei Lebenslinien. Diese Nachrichten können Operationen aufrufen,
Daten transportieren oder andere Objekte erzeugen. Dargestellt werden Nachrichten durch Pfeile. Es gibt zwei Arten von Nachrichten:
* Synchrone Nachricht:
Eine synchrone Nachricht wird durch eine ausgefüllte Pfeilspitze gekennzeichnet.
Bei einer synchronen Nachricht muss der Sender auf eine Antwort vom Empfänger warten.
Die Antwort wird strich-liniert gekennzeichnet.
* Asynchrone Nachricht
Eine asynchrone Nachricht wird durch eine offene Pfeilspitze gekennzeichnet.
Nach dem Senden einer asynchronen Nachricht kann der Sender sofort eine neue Nachricht senden,
ohne auf eine Rückantwort vom Empfänger warten zu müssen.
*Interaktion*
Interaktionen sind in zeitlicher Reihenfolge durch das Auftreffen auf der Zeitlinie dargestellt.
Wenn ein Objekt aktiv ist kann es in Interaktion mit anderen Objekten treten, in dem es eine Nachricht sendet.
Nachrichten werden durch Pfeile dargestellt. Das können Methodenaufrufe, Returns, Exceptiones oder auch asynchrone Nachrichten sein.
Asynchrone Nachrichten können jedoch nur eingeschränkt dargestellt werden.
So wird vereinfachend angenommen, dass eine gleichzeitige oder überkreuzende Versendung von Nachrichten nicht auftritt.
Diese Vereinfachung ist motiviert aus dem Einsatz von Sequenzdiagrammen für Testzwecke, in denen Nebenläufigkeit explizit kontrolliert wird,
um determinierte Testergebnisse zu erhalten. Dadurch wird die Modellierung mit Sequenzdiagrammen wesentlich vereinfacht,
es sind aber unter Umständen bestimmte, in einer Implementierung mögliche Sachverhalte nicht durch Sequenzdiagramme darstellbar.
Im Sequenzdiagramm können die Parameter von Interaktionen angegeben oder ausgelassen werden.
Die folgende Abbildung soll Objekt, Lebenslinie und Aktivitätsbalken veranschaulichen.
![Getting Started](Grafiken/object.png)
Nachrichtentypen
![Getting Started](Grafiken/Pfeiltypen.png)
Die folgende Abbildung stellt einen Nachrichtenaustausch zwischen zwei Kommunikationspartnern dar.
![Getting Started](Grafiken/uml.png)
Neues Objekt erzeugen:
![Getting Started](Grafiken/ObjektErzeugen.png)
Objekt zerstören:
![Getting Started](Grafiken/ObjektZerstören.png)
# Beispielmodellierung:
1. Ein Kunde geht zum Fast-Food-Mitarbeiter und bestellt einen Burger.
![Getting Started](Grafiken/requestBurger.png)
2. Der Mitarbeiter fragt den Kunden, ob der Kunde ein Getränk dazu haben will.
![Getting Started](Grafiken/getreankAsk.png)
3. Der Kunde bestätigt dies.
![Getting Started](Grafiken/true.png)
4. Dann fängt der Mitarbeiter an, die Bestellung vorzubereiten
und nach einiger Zeit liefert er dem Kunden die Bestellung.
![Getting Started](Grafiken/burger.png)
5. Der Kunde ist sehr hungrig und isst seinen Burger schnell auf.
![Getting Started](Grafiken/vernichte.png)
# Kombinierte Fragmente:
Bei komplexen Systemen, ist es schwer Sequenzdiagramme zu modellieren. Die entsprechenden graphischen Darstellungen sind unübersichtlich und schwer zu verstehen. Deshalb hat UML2 aus den Message Sequence Chart deren Konzept der inline expressions unter dem Namen „kombinierte Fragmente“ übernommen. Kombinierte Fragmente sind logische Gruppierungen dargestellt durch ein Rechteck, die die bedingten Strukturen enthalten, die sich auf den Nachrichtenfluss auswirken. Durch diese ist es möglich, bedingte Anweisungen und Verzweigungen, Schleifen und bestimmte Ausführungsarten zu modellieren. Der Ablauf wird dazu in ein oder mehrere Fragmente unterteilt. Der Interaktionsoperator gibt dabei den Typ der logischen oder bedingten Anweisung an, die das Verhalten des kombinierten Fragments definiert, während die Interaktionsoperanden für die Interaktionsfragmente in diesem kombinierten Fragment stehen. Ein kombiniertes Fragment wird als Rahmen dargestellt, der Lebenslinien abdeckt und Interaktionsoperanden enthält. Die enthaltenen Interaktionsoperanden werden jeweils mit einer strichlinierten und horizontalen Linie getrennt.
*Interaktionsoperatoren*
Wie schon bereits erwähnt, definiert ein Interaktionsoperator die Semantik eines kombinierten Fragments und bestimmt, wie die Interaktionsoperanden in dem kombinierten Fragment verwendet werden sollen. Der Operator definiert den Typ der logischen Bedingung, die auf die Operanden angewendet werden sollen.
Bsp.: ein kombiniertes Fragment mit dem Interaktionsoperator alternative (alt) verhält sich wie eine If-then-else-Anweisung.
*Interaktionsoperanden*
Ein Interaktionsoperand ist wie ein Container, der die Interaktionsfragmente und Nachrichten gruppiert, die bei Erfüllung der Bedingung ausgeführt werden. Der Operand wird also dann ausgeführt, wenn die Bedingung „true“ zurückgibt.
*Verzweigungen und Schleifen*
Bei den folgenden Interaktionsoperatoren wird eine vorher angegebene Bedingung benötigt, die über den weiteren Ablauf der Interaktion entscheidet.
* alt : Durch die angegebene Bedingung wird ein Fragment aus beliebig vielen ausgewählt.
* opt : Dieser Operator ist dem alt-Operator sehr ähnlich. Anders zum alt-Operator beschränkt sich die Auswahl jedoch auf ein einzelnes Fragment,
welche je nach Bedingung ausgeführt wird.
* break : Der Ablauf wird unterbrochen, wenn die vorherige Bedingung erfüllt wird.
* loop : Der Ablauf im Fragment wird beliebig oft wiederholt, solange die vorher angegebene Bedingung erfüllt ist.
*Nebenläufigkeit und Ordnung*
* seq : Dieser Operator legt die Ablaufreihenfolge der Aktionen einer Lebenslinie fest.
* strict : Dieser Operator ist mit dem seq-Operator vergleichbar. Er gilt jedoch für alle Lebenslinien.
* par : Die Fragmente werden parallel zu einander ausgeführt.
*Filterung und Zusicherung*
* critical : Falls ein Fragment betreten wird, werden alle Aktionen ohne Unterbrechung durchgeführt.
* neg : Durch diesen Operator werden unzulässige Abläufe gekapselt.
* assert : Dieser Operator kann eine feste Ablaufreihenfolge für eine Nachrichtenmenge angegeben werden.
* consider : Mit Hilfe dieses Operators werden nur die angegebenen Aktionen ausgeführt, der Rest wird ignoriert.
* ignore : Bestimmte Aktionen können mit Hilfe dieses Operators an der Ausführung gehindert werden.
*Beispiele*
1. Alternativer Ablauf : Mitarbeiter fragt den Kunden, ob er ein Gertänk dazu möchte. Wenn der Kunde ein Getränk dazu haben will, bestellt er eins (k.wantsGetreank()) sonst wird er kein Getränk bekommen (else).
![Getting Started](Grafiken/squenzdiagram.png)
2. Parallelität : "Burger essen" und "Cola trinken" passieren parallel zueinander. Die beiden Nachrichten können auch in beliebige Reihenfolge erfolgen. // vlt anders formulieren
![Getting Started](Grafiken/paralität.png)
3. Schleifen : Minimale Anzahl der Wiederholungen und die Abbruchbedingungen werden hier noch angegeben. Also die Bestellung vom Burger kann n-mals wiederholt werden (n = maxAnzahlBurger).
![Getting Started](Grafiken/schleifen.png)
Quellen:
* https://de.wikipedia.org/wiki/Sequenzdiagramm
* http://www.mathematik.uni-marburg.de/~hesse/uml/HintergrundInfosSequenzdiagramme.html
*
https://www.der-wirtschaftsingenieur.de/index.php/sequenzdiagramm/
* http://mbse.se-rwth.de/book1/index.php?c=chapter6-1
* https://wiki.thm.de/Sequenzdiagramm
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment