2013-04-03 15 views
16

Sto modellando un ciclo in un diagramma di attività UML. Funziona bene con nodi di condizione semplici (diagramma 1), ma sto cercando un modo più espressivo per enfatizzare il ciclo semantico. Quindi sono venuto a "regioni" o "regioni interrompibili" che sono mostrati here e there, ma non sono riuscito a trovare molti esempi veramente soddisfacenti.Loop nel diagramma di attività UML utilizzando una regione

Il mio esempio è una funzione che elabora i messaggi di una determinata lista. Il ciclo si interrompe non appena viene trovato il primo messaggio valido, quindi il messaggio viene elaborato e la funzione restituisce true. Altrimenti, restituisce false (per favore non commenti su senso o non senso, è solo per il gusto di un campione).

Diagramma 1: utilizza un nodo condizionale del diagramma attività vecchio e buono. È più facile seguire il flusso di controllo lungo le frecce, ammettiamolo, ma non c'è "The LOOP", c'è solo un "se".

Schema 2:

  • è il (positivo) condizione di uscita corretta, usando un bordo interruzione? È vero, potrebbe far parte della sezione [test] del loop insieme all'iteratore.
  • BTW: qual è il carattere iterativo di un ciclo for best espresso in UML?
  • Il nodo finale dell'attività all'interno del corpo del ciclo è corretto (vale a dire quando il "messaggio valido valido" restituisce "no")? In qualche modo sembra sbagliato utilizzare qui un nodo finale, ma in quale altro modo posso esprimere il flusso di controllo di un ciclo?

La funzionalità di entrambi i diagrammi dovrebbe essere equivalente:

loop with conditional node

loop with region


Edit: Un altro diagramma che implementa i suggerimenti da Steph:

  • I nodo iniziale e finale all'interno del corpo del loop
  • "ulteriore elaborazione" è ora all'interno del corpo del loop. Bene ... OK, ma potrebbero esserci altri loop in cui preferirei averlo fuori. Poi potrei cambiare il design comunque ...
  • Il "messaggio successivo" può anche essere visto come l'oggetto iteratore stesso al posto del azione "(fornire) messaggio successivo" dallo schema originale.
  • Le due frecce di flusso dell'oggetto potrebbero essere un po 'eccessivo, ma penso che siano corrette.

enter image description here

+0

Puoi spiegare che cosa rappresenta il simbolo "fork" nello stato "isMessageValid"? Non sono a conoscenza di un tale simbolo. – Torsten

+1

Questa è un'azione (non uno stato) con "comportamento di chiamata". Simboleggia che "isMessageValid" non è solo un flag booleano ma un segnaposto per un altro diagramma che spiega un flusso di lavoro più profondo (in strumenti come EA, puoi anche fare doppio clic su quell'azione per passare a questo diagramma). Nota che quando ho disegnato questo diagramma alcuni anni fa, non ero molto esperto. Ora scriverei "controllo di validità" poiché UML dovrebbe essere astratto e linguaggio di programmazione indipendente. Quando non c'è nessun altro diagramma ma un oggetto conosciuto con un metodo isMessageValid() per chiamare, si può scrivere anche questo, senza la biforcazione. – minastaros

+0

Va bene, è un'azione perché è un diagramma di attività. Grazie per la tua esauriente spiegazione. Conoscevo solo il simbolo "due bolle/stato" (stato composito). È equivalente alla forcella? – Torsten

risposta

8

In UML, il nodo finale attività rappresenta un completamento, quindi è corretto in una regione di loop, come si usa, è il normale completamento del contenuto del ciclo (che a sua volta conduce alla successiva iterazione). Come nota a margine, ti consiglio di usare anche un nodo iniziale per l'inizio del tuo ciclo.

E c'è anche il nodo finale del flusso, che rappresenta un'uscita, anziché un completamento.Pertanto, è possibile utilizzarlo per rappresentare l'istruzione "interruzione", anziché il bordo di interruzione che si utilizza. In questo caso è necessario integrare "ulteriore nodo di elaborazione dei messaggi", nel ramo "sì", subito prima del nodo finale del flusso.

Il fronte di interruzione è piuttosto per le interruzioni che provengono dall'esterno dell'elaborazione corrente. La regione è interrompibile e alcuni eventi (generalmente noti con i nodi ricevuti) potrebbero interromperla completamente, indipendentemente dal progresso del contenuto della regione. Qui non è il caso.

Per quanto riguarda il carattere iterativo, non c'è nulla di molto visivo, sfortunatamente. Tendo ad usare un nodo oggetto sopra la regione, proprio accanto al nodo iniziale.

+1

grazie per i suggerimenti sul nodo finale e la spiegazione del bordo di interruzione. Disegnerò un altro diagramma, vedi le modifiche sopra. – minastaros

+0

Penso che sia un buon lavoro. A proposito, riguardo al nodo finale del flusso, se non sei sicuro che tutti capiranno il suo significato (spesso i diagrammi UML devono essere mostrati a persone che non sanno nulla o molto poco in UML), puoi comunque impostare una "pausa" etichetta al nodo per essere più esplicito, almeno se lo strumento UML lo consente. – Steph

Problemi correlati