С использованием редактора быстрой последовательности для диаграмм последовательности

У кого-нибудь есть опыт работы с Quick Diagram Editor? Комбинация мгновенного отображения + текстовый исходный код + реализация Java очень привлекательна для меня, но я не могу понять, как заставить синтаксис делать то, что я хочу, а документация не очень ясна. Здесь надуманный пример:

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

al:atm.give me $10
atm:al has $3=bank.check al account balance
al:atm.what time is it
atm:al.it 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 account balance
atm:yes I'm sure, bill has $765=bank.hmm are you sure?
atm:bill.here $20, now go away
atm:great, he a cool dude=bank.I just gave Bill $20
al:atm.what about my $10?
atm:al.read my lips: you only have $3

Здесь результат QSDE в однопоточном режиме:

single-threaded

и в многопоточном режиме:

multi-threaded

Я догадываюсь, что не знаю, что начинает/заканчивает эти вертикальные бары. У меня есть ситуация, которая является однопоточной, но там участвует, и все сообщения асинхронны. Я предполагаю, что это означает, что я должен использовать внешний объект для представления этого состояния и его времени жизни. Я хочу, чтобы одна временная шкала представляла последовательность сообщений

  • al: atm.give me $10
  • atm: bank.check al остаток на счете
  • bank: atm.al имеет $3
  • atm: al.you только $3

и другая временная шкала для представления последовательности сообщений

  • счет: atm.give me $20
  • atm: bank.check счет баланс счета
  • bank: atm.bill имеет $765
  • atm: bank.hmm вы уверены?
  • bank: atm.yes Я уверен, у счета $765
  • atm: bill.here $20, теперь уходи.
  • atm: bank.I только что дал Билл $20
  • банк: atm.great, он классный чувак

с другими "wisecracks", представляющими другие разные сообщения, которые мне сейчас не нужны.

Есть ли способ сделать это с помощью QSDE?

Ответ 1

Когда запускается новый поток (и сообщение от пользователя всегда запускает новый поток), он не останавливается, пока он не будет явно остановлен или пока диаграмма не закончится. Например. atm: stop завершает поток atm

здесь первая попытка  (все в многопоточном режиме):

atmsmall

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

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

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

другая версия с асинхронными сообщениями

(возможно, сообщения должны быть асинхронными, поскольку они передаются по сети. В любом случае все стрелки выглядят одинаково)

" > " в начале сообщения начинается новый поток (все сообщения от пользователей и процессов запускают новый поток по умолчанию.)

"&" в конце означает, что вызов немедленно возвращается, и новый поток не отображается. вы можете использовать это, чтобы имитировать отправку сообщений в существующие потоки. (все сообщения пользователям и процессам всегда возвращаются сразу по умолчанию.)

atmsmallthreads

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

al:atm.give me $10
atm:>bank.check al 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 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 $20, now go away
atm:>bank.I just gave Bill $20
bank:>atm.great, he a cool dude&
bank:stop

Полный пример со всеми wisecracks

неясно, из какого примера следует прекратить поток в банкомате. Банкомат, похоже, действует скорее как пользователь или процесс, а не объект. Таким образом, пример не обязательно имеет смысл

atmbig

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

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

al:atm.what time is it
atm:al.it 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 account balance
atm:yes I'm sure, bill has $765=bank.hmm are you sure?
atm:bill.here $20, now go away
atm:great, he 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

Ответ 2

Аль и Билл - люди. Как человек может быть частью однопоточной ситуации? Люди, в отличие от процедур, не стоят на месте, пока не вернется другая процедура. Они могут инициировать вычислительные действия и получать сигналы с компьютера, но они не попадают в стек потоков.

В документации четко указано (процитировано из справки по многопотоке):

"Недавно созданная нить может отличаться от старых потоков цветом соответствующих ей линий жизнеобеспечения".

"Как правило, сообщение, отправленное субъектом объекту (динамически), порождает новый поток".

Так вот откуда берутся ваши вертикальные полосы.

Если вам нужны одно- или двухпоточные ситуации, вы должны использовать объекты, а не актеры.