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
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.
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
>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 ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.