UML: processore di coda in un diagramma di sequenza

7

Quale è il modo appropriato di rappresentare un processore di coda in un diagramma di sequenza UML?

Voglio rappresentare nello stesso diagramma due sistemi che sono liberamente accoppiati attraverso una coda. Il primo sistema, esegue alcune azioni e inserisce un'azione in una coda, l'altro sistema è sempre in ascolto e quando l'evento viene visualizzato nella coda, deseleziona l'evento e lo elabora generando nuove azioni. Sono entrambi nello stesso diagramma perché rappresenta un caso d'uso di integrazione che mostra come entrambi funzionano insieme.

Devo creare una linea vita che rappresenti la coda?

Dovrei rappresentare il processo di "ascolto" come una scatola circolare contenente: un messaggio automatico con l'etichetta "ascolta", un messaggio automatico per l'elaborazione di messaggi e messaggi che rappresentano l'invio del risultato.

    
posta NullOrEmpty 08.08.2014 - 17:54
fonte

3 risposte

7

Poiché la coda è una componente importante nella sequenza che stai presentando, dovrebbe essere sicuramente presente con una linea di vita.

Mentre il consumatore ascolta in modo esplicito gli eventi dalla coda, inizierei il diagramma con la chiamata listen dal consumatore alla coda.
Dopodiché, il produttore può inserire il proprio evento nella coda (eventualmente con l'indicazione che può trascorrere una notevole quantità di tempo tra la chiamata listen e l'inserimento dell'evento). A questo punto, userei due ritorno frecce. Un ritorno al produttore per indicare il completamento della chiamata insert e l'altro al consumatore per indicare il completamento della chiamata listen .
Ciò presuppone che produttore e consumatore eseguano in modo asincrono.

Sarebbe come questo:

+---+       +---+       +---+
| P |       | Q |       | C |
+---+       +---+       +---+
  |           |   listen  |
  |           | <|------- |
  |           |           |
  |  insert   |           |
  | -------|> ++          |
  | < - - - - ++  event   |
  |           ++ - - - - >++
  |           |           ++
  |           |           ++
  |           |   listen  ++
  |           | <|------- ++
  |           |           |

Per indicare che il consumatore è sempre in ascolto, ho chiuso di nuovo il diagramma con una chiamata listen che non è stata restituita.

    
risposta data 08.08.2014 - 18:27
fonte
7

Implementare la risposta di Bart nel meraviglioso PlantUML potrebbe apparire come questa, (ab) usando un entity per distinguere la coda dal discussioni partecipanti:

Il codice sorgente corrispondente:

participant Producer
entity Queue

Consumer->Queue : dequeue
activate Consumer
...
Producer->Queue : enqueue
activate Producer
Queue-->Consumer
deactivate Consumer
Queue-->Producer
deactivate Producer
    
risposta data 19.12.2014 - 06:58
fonte
2

Se intendi come disegnare un diagramma di sequenza per qualcosa di simile a questo scenario ..

..quindimodellereianchelo"spazio tuple" centrale o la struttura centrale di coordinamento multi-agente come un muto inconscio, ma un attore vivente che metabolizzerebbe alcune molecole di profumo ogni volta che "mangia" qualcosa attraverso la membrana. Gli agenti nelle vicinanze potrebbero quindi "annusarlo" e metabolizzarlo ulteriormente ..

indossare le scarpe

.. (1) sì creerei una linea di vita che rappresenta la coda

.. (2) e vorrei anche disegnare il segnale "queue changed" trasmesso dalla coda dopo aver ricevuto un nuovo token uguale a @ bart-van-ingen-schenau

.. (3) e sì rappresenterei il processo di "ascolto" come loop box sulla propria linea di vita come suggerisci

.. e vorrei anche considerare di disegnare lo scenario (caso d'uso) da diversi punti di vista con differenti focalizzazione usando diagrammi diversi, principalmente penserei di disegnare un diagramma generale usando il linguaggio "BPMN 2.0 - Modello di processo aziendale e notazione" ( cheat sheet è disponibile qui: link )

    
risposta data 08.08.2014 - 21:30
fonte

Leggi altre domande sui tag