Architecting and designing > UML 2.0 Lite > UML models > UML state diagram > Factored transition paths
  
Factored transition paths
A factored transition path, also known as a compound transition, is a transition path that joins or splits based on a factoring of guard conditions; sometimes the guard conditions are evaluated after an action is calculated. Junction Points and Dynamic Choice Points are used to model this behavior, which is only associated with non-concurrent states (different than the Synchronization Bar, which used to model splitting and merging of transition paths for concurrent states).
For example, you might want to model the fact that two or more transitions from distinct, non-concurrent states come together and continue through a common transition path, sharing its action, and terminating on the same target state. Or you might want to model the splitting of a transition into separate, mutually exclusive (non-concurrent) paths. Junction Points are used for either of these modeling scenarios.
Factoring is also useful for modeling dynamically adaptive behavior, for example, when a single event can lead to any of a set of possible target states, but where the final target state is only determined as the result of an action, or calculation, performed after the triggering of the compound transition. A Dynamic Choice Point is used to model this.
Junction points
You can use a Junction Point to model the fact that two or more different, non-concurrent states share a single outward transition path. To do this you draw a transition from each of the non-concurrent states (or pseudostates) to a common junction point, and from the common junction point, you draw a single transition to a next state. A Junction Point is represented by a small black circle.
You can also use a Junction Point to model two or more guarded transitions emanating from a single junction point. This represents a static branch point. The transitions output from the Junction Point are the equivalent of a set of individual transitions, one for each path through the tree, whose guard condition is the 'and' of all of the conditions along the path. Note that all of the outgoing guards are evaluated before any transition is taken (see example below).
Junction point example
The following example is from the UML spec. It shows a single junction point used to merge and split transitions. In this example, if the element being modeled is in State1 and b is less than 0 when event e1 occurs, the outgoing transition is taken only if one of the three downstream guards is true. So if 'a' is equal to 6 at that point, no transition is triggered.
This graphic is described in the surrounding text.
Dynamic choice point
You can use a Dynamic Choice Point symbol (small white circle) to model the fact that one transition path is taken from a choice of many, depending on guard conditions. The guards of the outgoing transitions are evaluated at the time the choice point is reached. The value of these guards can be a function of some calculations performed in the actions of the incoming transitions.
Dynamic choice point example
The following example is from the UML spec. In it, the decision on which branch to take is only made after the transition from State1 is taken and the choice point is reached. Note that the action associated with that incoming transition computes a new value for “a”. This new value is then used to determine the outgoing transition to be taken. The use of the predefined condition [else] is used to avoid run-time errors.
This graphic is described in the surrounding text.
See also
UML state diagram