12 Stimmen

Verwendung des Quick Sequence Diagram Editor für Sequenzdiagramme

Hat jemand Erfahrung mit Quick Sequence Diagram Editor ? Die Kombination aus sofortiger Anzeige + Text-Quellcode + Java-Implementierung ist für mich sehr attraktiv, aber ich kann nicht ganz herausfinden, wie ich die Syntax dazu bringe, das zu tun, was ich will, und die Dokumentation ist nicht sehr klar. Hier ist ein erfundenes Beispiel:

al:Actor
bill:Actor
atm:ATM[a]
bank:Bank[a]

al:atm.give me $10
atm:al has $3=bank.check al's account balance
al:atm.what time is it
atm:al.it's now
atm:al.stop bugging me
atm:al.you only have $3
atm:bill.and don't you open your mouth
bill:atm.who asked you?
bill:atm.give me $20
al:atm.hey, I'm not finished!
atm:bill has $765=bank.check bill's account balance
atm:yes I'm sure, bill has $765=bank.hmm are you sure?
atm:bill.here's $20, now go away
atm:great, he's a cool dude=bank.I just gave Bill $20
al:atm.what about my $10?
atm:al.read my lips: you only have $3

Hier ist das Ergebnis von QSDE im Single-Thread-Modus:

single-threaded

und im Multithreading-Modus:

multi-threaded

Mir ist wohl nicht klar, wo diese vertikalen Balken beginnen und enden. Ich habe eine Situation, die single-threaded ist, aber es gibt Zustand beteiligt, und alle Nachrichten sind asynchron. Ich schätze, das bedeutet, dass ich ein externes Objekt verwenden sollte, um diesen Zustand und seine Lebensdauer darzustellen. Was ich möchte, ist, dass eine Zeitleiste die Nachrichtensequenz darstellt

  1. al:atm.give me $10
  2. atm:bank.check al's kontostand
  3. bank:atm.al hat $3
  4. atm:al. Sie haben nur 3 Dollar

und eine weitere Zeitleiste zur Darstellung der Nachrichtenfolge

  1. Rechnung:atm.gib mir $20
  2. atm:bank.check bill's Kontostand
  3. Bank:atm.bill hat $765
  4. atm:bank.hmm sind Sie sicher?
  5. bank:atm.yes I'm sure, Rechnung hat 765 $
  6. atm:bill.hier sind $20, jetzt geh weg
  7. atm:bank.I just gave Bill $20
  8. bank:atm.great, er ist ein cooler Kerl

mit den anderen "Witzeleien", die für andere verschiedene Nachrichten stehen, die mich im Moment nicht interessieren.

Gibt es eine Möglichkeit, dies mit QSDE zu tun?

0 Stimmen

Danke, ich wusste nichts von QSDE, ich mag es viel mehr als diese Wysiwyg-Editoren...

14voto

HugoRune Punkte 12240

Wenn ein neuer Thread gestartet wird (und eine Nachricht von einem Benutzer startet immer einen neuen Thread), wird er nicht gestoppt, bis er explizit gestoppt wird oder bis das Diagramm endet. Zum Beispiel beendet atm:stop den atm-Thread

hier ein erster Versuch (alles im Multithreading-Modus):

atmsmall

al:Actor
bill:Actor
atm:ATM[a]
bank:Bank[a]

al:atm.give me $10
atm:al has $3=bank.check al's account balance
atm:al.you only have $3
atm:stop

bill:atm.give me $20
atm:bill has $765=bank.check bill's account balance
atm:yes I'm sure, bill has $765=bank.hmm are you sure?
atm:bill.here's $20, now go away
atm:great, he's a cool dude=bank.I just gave Bill $20

eine weitere Version mit asynchronen Nachrichten

(Die Nachrichten sollten wohl asynchron sein, da sie über das Netz übertragen werden. Jedenfalls sehen jetzt alle Pfeile gleich aus)

">" am Anfang einer Nachricht startet einen neuen Thread (alle Nachrichten von Benutzern und Prozessen starten standardmäßig einen neuen Thread).

"&" am Ende bedeutet, dass der Aufruf sofort zurückkehrt und der neue Thread nicht angezeigt wird. Sie können dies verwenden, um das Senden von Nachrichten an bestehende Threads zu simulieren. (alle Nachrichten an Benutzer und Prozesse kehren standardmäßig immer sofort zurück).

atmsmallthreads

al:Actor
bill:Actor
atm:ATM[a]
bank:Bank[a]

al:atm.give me $10
atm:>bank.check al's account balance
bank:>atm.al has $3&
bank:stop
atm:al.you only have $3
atm:stop

bill:atm.give me $20
atm:>bank.check bill's account balance
bank:>atm.bill has $765&
bank:stop

atm:>bank.hmm are you sure?
bank:>atm.yes I'm sure, bill has $765&
bank:stop

atm:bill.here's $20, now go away
atm:>bank.I just gave Bill $20
bank:>atm.great, he's a cool dude&
bank:stop

Das vollständige Beispiel mit allen Witzeleien

Aus dem Beispiel geht nicht hervor, wann genau ein Thread im ATM aufhören sollte. ATM scheint sich eher wie ein Benutzer oder Prozess zu verhalten, nicht wie ein Objekt. Daher macht das Beispiel nicht unbedingt Sinn

atmbig

al:Actor
bill:Actor
atm:ATM[a]
bank:Bank[a]

al:atm[a].give me $10
atm:al has $3=bank.check al's account balance

al:atm.what time is it
atm:al.it's now
atm:stop

atm:al.stop bugging me
atm:al.you only have $3

atm:bill.and don't you open your mouth
bill:atm.who asked you?&
atm:stop

bill:atm.give me $20
al:atm.hey, I'm not finished!&
atm:bill has $765=bank.check bill's account balance
atm:yes I'm sure, bill has $765=bank.hmm are you sure?
atm:bill.here's $20, now go away
atm:great, he's a cool dude=bank.I just gave Bill $20
atm:_
atm:stop

al:atm.what about my $10?
atm:al.read my lips: you only have $3

0voto

Markus Strauch Punkte 1

Al und Bill sind Menschen. Wie kann ein menschliches Wesen Teil einer einfädigen Situation sein? Im Gegensatz zu Prozeduren stehen Menschen nicht still, bis eine andere Prozedur zurückkehrt. Sie können Rechenaktivitäten auslösen und Signale von einem Computer empfangen, aber sie gehen nicht auf den Stapel eines Threads hinunter.

In der Dokumentation steht eindeutig (zitiert aus der Multithreading-Hilfe):

"Ein neu erzeugter Thread kann von älteren Threads durch die Farbe der entsprechenden Lebenslinien unterschieden werden."

"Eine Nachricht, die von einem Akteur an ein Objekt (dynamisch) gesendet wird, erzeugt in der Regel einen neuen Thread."

Daher kommen also die vertikalen Balken.

Wenn Sie Single- oder Dual-Thread-Situationen wünschen, sollten Sie Objekte und keine Akteure verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X