"join node" e "fork node" per un singolo ramo in UML

1

La sezione 15.3.3.3 delle specifiche UML dice:

Fork Nodes

A ForkNode is a ControlNode that splits a flow into multiple concurrent flows.

Anche 15.3.3.4 dice:

Join Nodes

A JoinNode is a ControlNode that synchronizes multiple flows.

Anche 15.3.4.2 dice:

Fork and Join Nodes

[...] ForkNode must have a single incoming ActivityEdge and usually has two or more outgoing ActivityEdges, while a JoinNode usually has two or more incoming ActivityEdges and must have a single outgoing ActivityEdge.

Quindi la specifica dice: "È possibile utilizzare un fork node a split un singolo flusso a un singolo flusso e un join node a synchronize un singolo flusso ". Ma con attenzione al significato dei concetti concurrency e synchronizing , penso che non sia razionale e anche non significhi. Sto fraintendendo qualcosa? Se sì, c'è un esempio che deve utilizzare fork node e join node in questo modo?

    
posta hasanghaforian 30.09.2018 - 07:44
fonte

1 risposta

2

In breve

Hai capito bene.

A lungo

Analisi dello standard

15.3.3.3 lo dice molto chiaramente:

A ForkNode is a ControlNode that splits a flow into multiple concurrent flows. A ForkNode shall have exactly one incoming ActivityEdge, though it may have multiple outgoing ActivityEdges.

La cosa importante qui è che un ForkNode non può avere un margine di attività in uscita, perché ciò causerebbe un'incoerenza. Se una tale assurdità fosse possibile, il flusso di gettoni verrebbe interrotto, ma non finirebbe mai. Se è necessario terminare un flusso parziale, è necessario utilizzare un FlowFinalNode.

Se un ForkNode ha solo un'uscita, non è molto utile. Tuttavia, non creerebbe alcuna incoerenza:

      |
----->|----->       is equivalent to    ---------->
      |

Allo stesso modo, 15.3.3.4 fornisce l'immagine completa:

A JoinNode is a ControlNode that synchronizes multiple flows. A JoinNode shall have exactly one outgoing ActivityEdge but may have multiple incoming ActivityEdges.

Il ragionamento è lo stesso di prima. È importante che ci sia almeno un input. Ci si aspetta che ne abbia diversi, ma se ce ne fosse solo uno, non causerebbe alcuna incoerenza.

La seguente frase nella stessa sezione, mostra anche che l'input multiplo è l'aspettativa, perché un and ha bisogno di due operandi. Ma la riformulazione in testo semplice lo fa funzionare con un solo input:

If a JoinNode does not have a joinSpec, then this is equivalent to a joinSpec Expression with the Boolean operator “and.” That is, the implicit default joinSpec condition is that there is at least one token offered on each incoming ActivityEdge.

Si noti che un join con un singolo input può avere uno scopo, a seconda di come è stato formulato il joinSpec, e specialmente se l'input è un ObjectFlow.

L'espressività

Avere un solo output su una fork non ha alcun effetto pratico sulla concorrenza (l'unico flusso è in concomitanza con se stesso). Se non lo sopporti, dovrai almeno accettare che non ha più effetto di avere un solo nodo iniziale , poiché 15.3.3.1 ci dice che:

If an Activity has more than one InitialNode, then invoking the Activity starts multiple concurrent control flows, one for each InitialNode.

Il fatto che UML consenta al modellatore di esprimere costantemente qualcosa, non significa che questa cosa sarà utile. Ad esempio, UML consente di avere un diagramma di attività costituito esclusivamente da un nodo iniziale con un flusso verso un nodo finale. Solo un altro modo elaborato per dire che l'attività consiste nel non fare nulla.

La possibilità di avere un solo input su un join o un output su una fork presenta alcuni vantaggi in termini di espressività, senza influenzare la semantica. Usando questo tipo di costrutto:

  • È possibile evidenziare che si tratta di un diagramma parziale del modello, essendo inteso che una parte del modello di attività non è rappresentata o deve ancora essere progettata;
  • Puoi anche suggerire che potrebbe essere previsto un certo grado di concorrenza tra il fork e il join in futuro.
  • Puoi isolare visivamente una sequenza di azioni
risposta data 30.09.2018 - 14:35
fonte

Leggi altre domande sui tag