Forum: PC-Programmierung UML Sequenzdiagramm Frage


von daniel (Gast)


Lesenswert?

Hallo,

http://de.wikipedia.org/wiki/Sequenzdiagramm#Notation_von_Lebenslinien_und_Nachrichten

hier steht unter anderem ..

Synchrone und asynchrone Nachrichten werden in Sequenzdiagrammen mit 
unterschiedlichen Pfeilen dargestellt. Nachrichten, die asynchronen 
Signalen entsprechen, werden gleich dargestellt wie asynchrone 
Operationsaufrufe. Synchrone Nachrichten werden mit einer gefüllten 
Pfeilspitze, asynchrone Nachrichten mit einer offenen Pfeilspitze 
gezeichnet.

Ich hab damit ein kleines Verständnisproblem worauf dort leider
nicht eingegangen wird. Wenn ich einen Thread habe, dann läuft
doch dort sowieso alles synchron ab. Sprich Objekt A ruft
am Objekt B eine Methode, wartet auf deren Return.

Die einzige plausible Erklärung die ich finden konnte ist die,
dass asynchron lediglich dann Sinn macht, wenn es 2 Threads gibt.
Dann gibt es im Thread 1 ein Objekt A und Controlfluss durch
den Thread 1, im Thread 2 gibt es ein Objekt B der auf A eine
Methode aufruft und wiederum auf einen Return wartet.
Der Unterschied ist nur der, dass Code der Methode von B
nicht synchron zum Controllflus durch Thread 1 läuft.

Ist meine Erklärung falsch?

Grüsse, Daniel

von B. G. (alabasterboy)


Lesenswert?

Also ich habe beide Pfeile schon gesehen. Im Zusammenhang der synchronen 
Abfolge sind sie mir jedoch noch nicht begegnet. Bisher hielt ich sie 
für einen Indikator der Zeitkompaktheit.
Zeitliche zügig aufeinander folgende Nachrichten sind ausgefüllt. 
Problematiken die nicht eine sofortige Reaktionen erfordern, werden 
durch einen offenen Pfeil visualisiert.
In den Beispielen meiner Univeranstaltungen wurde kein Unterschied 
zwischen offenen und geschlossenen Pfeilen gemacht, soweit ich das in 
Erinnerung habe.

Das Wikipediabeispiel unterscheidet noch die Empfangszeit. Danach 
erfolgt beim synchronen Senden der Empfang vor dem Senden der zweiten 
Nachricht. Beim asynchronen Versenden ist die Empfangszeit nicht 
spezifiziert. Sofern keine Antwort von B erwartet wird und die 
Empfangszeit von Nachricht A nicht nach der von Nachricht B liegt, ist 
der Fall eigentlich uninteressant.

Nach dem Wikipediabeispiel sind ausgefüllte Pfeile dann wohl die sichere 
Variante.

von daniel (Gast)


Lesenswert?

Ich denke jetzt, dass man die synchronen Nachrichten sich
am besten durch einfache Methodenaufrufe vorstellen kann.
(Je nach ihrer Verschachtelungstiefe wächst der Stack)
Die asynchronen Nachrichten dagegen sind entweder durch
Flags setzen oder durch eine Messagequeue implementiert.

Flags kennt wahrscheinlich jeder Programmierer ..
int durty = 0; //global
...
if(something_changed())
   durty = 1;
...
if(durty)
   flash_to_harddisk();

damit fungiert durty zum Nachrichtenübermittlung,
eben nicht synchron,sofort sondern immer dann
wenn die entsprechende Prüfroutine die Daten anfördert.

würde mich gerne von einem UML Experten korrigieren lassen :)

Grüsse, Daniel

von Wolfram (Gast)


Lesenswert?

>Wenn ich einen Thread habe, dann läuft doch dort sowieso alles synchron ab.
>Die einzige plausible Erklärung die ich finden konnte ist die, dass asynchron 
>lediglich dann Sinn macht, wenn es 2 Threads gibt.
Das stimmt beides, du kannst in einem Thread eine Methode asyncron 
aufrufen,
das wird intern mit einem 2. Thread gelöst, du mußt dich aber um die 
Erstellung dieses Threads nicht mehr kümmern.
Vgl. Linux Syslets Treadlets
Windows irgendwo in der MSDN ;-)

von daniel (Gast)


Lesenswert?

BTW: wer von Euch benutzt denn UML aktiv in der Praxis?

von dieter (Gast)


Lesenswert?

sag ja

ok ich lerne es inner schule... wir machen viel damit .. :(

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.