Pregunta

Alguien tiene experiencia con rápida Diagrama de secuencia Editor ? La combinación de pantalla instantánea de código fuente + texto + aplicación Java es muy atractivo para mí, pero no puedo encontrar la manera de hacer la sintaxis haga lo que yo quiero, y la documentación no está muy claro. He aquí un ejemplo artificioso:

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

Aquí está el resultado de QSDE en el modo de un solo subproceso:

single-roscado

y en modo multi-hilo:

multi-hilo

supongo que no me queda claro lo que comienza / termina las barras verticales. Tengo una situación que es de un solo subproceso, pero no hay estado involucrado, y todos los mensajes son asíncronas. Supongo que eso significa que debería utilizar un objeto externo para representar ese estado y su vida útil. Lo que yo quiero es que una línea de tiempo para representar la secuencia de mensajes

  1. AL: Me atm.give $ 10
  2. atm: bank.check saldo de la cuenta de Al
  3. bancaria: atm.al tiene $ 3
  4. atm: al.you sólo se tienen $ 3

y otra línea de tiempo para representar la secuencia de mensajes

  1. Bill: Me atm.give $ 20
  2. atm: saldo de la cuenta del proyecto de ley bank.check
  3. bancaria: atm.bill tiene $ 765
  4. atm: bank.hmm ¿está seguro
  5. ?
  6. bancarias: atm.yes estoy seguro, Bill tiene $ 765
  7. atm: bill.here de $ 20, ahora sale
  8. atm: bank.I acaba de dar a Bill $ 20
  9. bancaria: atm.great, que es un tipo fresco

con los otros "ocurrencias" que representan otros mensajes diversos que no me importa ahora.

¿Hay una manera de hacer esto con QSDE?

¿Fue útil?

Solución

Cuando se inicia un nuevo hilo (y un mensaje de un usuario siempre se inicia un nuevo hilo) no se detiene hasta que se detiene de forma explícita o hasta que el diagrama termina. P.ej. atm: parada termina el hilo atm

aquí un primer intento  (Todo en modo multiproceso):

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

otra versión con mensajes asíncronos

(podría decirse que los mensajes deben ser asíncrona, ya que se transmiten por la red. De todos modos ahora todas las flechas tienen el mismo aspecto)

">" en el inicio de un mensaje comienza un nuevo hilo (todos los mensajes de los usuarios y procesos comienzan un nuevo hilo por defecto.)

"&" a significa el fin de que la llamada devuelve inmediatamente, y el nuevo hilo no se muestra. se puede utilizar este para simular el envío de mensajes a las discusiones existentes. (Todos los mensajes a usuarios y procesos siempre vuelven inmediatamente por defecto.)

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

El ejemplo completo con todos los wisecracks

no está claro a partir del ejemplo cuándo exactamente un hilo en ATM debería parar. ATM parece actuar más como un usuario o proceso, no un objeto. Así que el ejemplo no necesariamente tiene sentido

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

Otros consejos

Al y Bill son humanos. ¿Cómo puede un ser humano, posiblemente, ser parte de una situación de un único subproceso? Los seres humanos, a diferencia de los procedimientos, no se detienen hasta que otro procedimiento retorna. Pueden desencadenar actividades computacionales y recibir señales desde un ordenador, pero no bajar a la pila de un hilo.

La documentación claramente Unidos (citado de multihilo Ayuda):

"Un hilo recién generado se puede distinguir de las discusiones mayores por el color de sus correspondientes líneas de vida."

"Como regla general, un mensaje enviado por un actor a un objeto (dinámicamente) genera un nuevo hilo."

Así que aquí es donde las barras verticales vienen.

Si quieres situaciones de simple o de doble rosca, se debe utilizar objetos, no actores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top