最复杂的部分是决策节点将它们收到的令牌(即“值”)传递给所选边缘,然后您需要明确说明值已根据执行的分支而改变。如果您将start_date 建模为对象流(start_date 的值在图中流动)并且earliest_start_date 和latest_start_date 是范围内的变量或常量,您可以将操作表示为:
(请注意,我假设 earliest<latest 是为了简化分支)
上面的“菱形”是一个决策节点。选择三个分支之一,具体取决于在每个边的括号之间给出的 branch(即条件)。下面的菱形是一个合并节点(替代执行路径相遇的地方)。在守卫的符号中,我假设< 运算符适用于 start_date 的类型。
另一种方法是编写一个表示操作的转换。在这种情况下,ActionState2 的输入将是转换的结果,其中start_date 是ActionState1 的输出。
第三种方法是将操作编写为执行此类计算的操作的后置条件(即带有构造型 «postcondition»attached 到操作的约束)。
如果 Latest 和 Earliest 在您的模型中定义为函数,则后置条件为:
result = Latest (earliest_start_date,
Earliest (latest_start_date, start_date))
如果start_date的类型定义了min和max,则后置条件可以写成:
result = min(Set{latest_start_date,
max(Set{earliest_start_date,start_date})});
(即a)latest_start_date组成的集合的最小值,b)earlyst_start_date和start_date组成的集合的最大值。
如果为start_date类型定义了<运算符,则后置条件为:
result = if start_date<earliest_start_date
then earliest_start_date
else
if start_data>latest_start_date
then latest_start_date
else start_date
endif
endif
您也可以将其表示为 ConditionalNode(一种结构化的活动节点,从若干备选方案中选择一个),但没有为 ConditionalNodes 定义标准符号。