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:
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.
Puoi spiegare che cosa rappresenta il simbolo "fork" nello stato "isMessageValid"? Non sono a conoscenza di un tale simbolo. – Torsten
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
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