|Previous||UML Classes||Table of Contents||UML Packages||Next|
An expansion region is a structured activity region that executes multiple times corresponding to elements of an input collection.
StructuredActivityNode (from CompleteStructuredActivities , StructuredActivities) on page 425
Issue 8482 -replace ‘input pins’ with ‘inputs’
An expansion region is a strictly nested region of an activity with explicit input and outputs (modeled as ExpansionNode s).
Each input is a collection of values. If there are multiple inputs, each of them must hold the same kind of collection, although
the types of the elements in the different collections may vary. The expansion region is executed once for each element (or
position) in the input collection.
Issue 8483 -remove first sentence
8488 -remove phrase ‘at runtime’
The number of output collections can differ from the number of input collections. On each execution of the region, an output
value from the region is inserted into an output collection at the same position as the input elements. If the region execution
ends with no output, then nothing is added to the output collection. When this happens the output collection will not have
the same number of elements as the input collections, the region acts as a filter. If all the executions provide an output
to the collection, then the output collections will have the same number of elements as the input collections.
The inputs and outputs to an expansion region are modeled as ExpansionNode s. From outside of the region, the values on these
nodes appear as collections. From inside the region the values appear as elements of the collections. Object flow edges connect
pins outside the region to input and output expansion nodes as collections. Object flow edges connect pins inside the region
to input and output expansion nodes as individual elements. From the inside of the region, these nodes are visible as individual
values. If an expansion node has a name, it is the name of the individual element within the region.
Issue 8485 -add sentence at the end of the paragraph on effect of input pins
Any object flow edges that cross the boundary of the region, without passing through expansion nodes, provide values that
are fixed within the different executions of the region Input pins, introduced by merge with CompleteStructuredActivities ,
provide values that are also constantduring the execution of the region.
Issue 9191 -add default value
• mode : ExpansionKind The way in which the executions interact (default value is iterative): parallel - all interactions are independent. iterative - the interactions occur in order of the elements. stream - a stream of values flows into a single execution.
• inputElement : ExpansionNode [1..*] An object node that holds a separate element of the input collection during each of the multiple executions of the region.
• outputElement : ExpansionNode [0..*] An object node that accepts a separate element of the output collection during each
of the multiple executions of the region. The values are formed into a collection that is available when the execution of
the region is complete.
 An ExpansionRegion must have one or more argument ExpansionNode s and zero or more result ExpansionNode s.
Issue 8241 - replaced ‘concurrency’ with ‘mode’
8484 - superseded by 8486 resolution
8486 - add third sentence and remove ‘multiple’ from last sentence in paragraph
When an execution of an activity makes a token available to the input of an expansion region, the expansion region consumes
the token and begins execution. The expansion region is executed once for each element in the collection. If there are multiple
inputs, a value is taken from each for each execution of the internals of the region. The mode attribute controls how the
• If the value is parallel, the execution may happen in parallel, or overlapping in time, but they are not required to.
• If the value is iterative, the executions of the region must happen in sequence, with one finishing before another can begin. The first iteration begins immediately. Subsequent iterations start when the previous iteration is completed. During each of these cases, one element of the collection is made available to the execution of the region as a token during each execution of the region. If the collection is ordered, the elements will be presented to the region in order; if the collection is unordered, the order of presenting elements is undefined and not necessarily repeatable. On each execution of the region, an output value from the region is inserted into an output collection at the same position as the input elements.
• If the value is stream, there is a single execution of the region, but its input place receives a stream of elements from the collection. The values in the input collection are extracted and placed into the execution of the expansion region as a stream in order, if the collection is ordered. Such a region must handle streams properly or it is ill defined. When the execution of the entire stream is complete, any output streams are assembled into collections of the same kinds as the inputs.
An expansion region is shown as a dashed rounded box with one of the keywords parallel, iterative, or streaming in the upper
Input and output expansion nodes are drawn as small rectangles divided by vertical bars into small compartments. (The symbol
is meant to suggest a list of elements.) The expansion node symbols are placed on the boundary of the dashed box. Usually
arrows inside and outside the expansion region will distinguish input and output expansion nodes. If not, then a small arrow
be used as with Pins (see Figure 12.124 on page 419).
Figure 12.82 - Expansion region
As a shorthand notation, the list box pin notation may be placed directly on an action symbol, replacing the pins of the action
). This indicates an expansion region containing a single action. The equivalent full form is shown in
The notation in Figure 12.85maps to an expansion region in parallel mode, with one behavior invoked in the region, as
Figure 12.85 - Notation for expansion region with one behavior invocation
Figure 12.86 shows an expansion region with two inputs and one output that is executed in parallel. Execution of the
region does not begin until both input collections are available. Both collections must have the same number of elements.
The interior activity fragment is executed once for each position in the input collections. During each execution of the region,
a pair of values, one from each collection, is available to the region on the expansion nodes. Each execution of the region
produces a result value on the output expansion node. All of the result values are formed into a collection of the same size
as the input collections. This output collection is available outside the region on the result node after all the parallel
executions of the region have completed.
Figure 12.86 shows a fragment of a Fast Fourier Transform
(FFT) computation containing an expansion region. Outside the region, there are operations on arrays of complex numbers. S,
Slower, Supper, and V are arrays. Cut and shuffle are operations on arrays. Inside the region, two arithmetic operations are
performed on elements of the 3 input arrays, yielding 2 output arrays. Different positions in the arrays do not interact,
therefore the region can be executed in parallel on all positions.
Issue 8241 -change ‘concurrent’ to ‘parallel’ 8487 -duplicate of 8241
Slower: Array<Complex> Supper: Array<Complex>
Figure 12.87 - Expansion region
The following example shows a use of the shorthand notation for an expansion region with a single action. In this example,
the trip route outputs sets of flights and sets of hotels to book. The hotels may be booked independently and in parallel
with each other and with booking the flight.
Figure 12.88 -Examples of expansion region shorthand
Specify Trip Route below can result in multiple flight segments, each of which must be booked separately. The Book Flight
action will invoke the Book Flight behavior multiple times, once for each flight segment in the set passed to BookFlight.
Figure 12.89 - Shorthand notation for expansion region
Expansion regions are introduced to support applying behaviors to elements of a set without constraining the order of application.
ExpansionRegion replaces MapAction, FilterAction, and dynamicConcurrency and dynamicMultiplicity attributes on ActionState.
Dynamic multiplicities less than unlimited are not supported in UML 1.5.