1

我如何在 UML 活动图中描述这一点?

最新(earliest_start_date,最早(latest_start_date,start_date))

这意味着:从 latest_start_date 和 start_date 中选择最早的,如果它晚于上一个决定的结果,则使用 early_start_date。我用钻石试过了,但我想我需要更多。

我希望你能帮帮我

谢谢。

4

1 回答 1

1

最复杂的部分是决策节点将它们收到的令牌(即“值”)传递给所选边缘,然后您需要明确表明该值已根据执行的分支而改变。如果您将建模start_date为对象流(其中start_date流过图表的值)并且earliest_start_datelatest_start_date范围内的变量或常量,您可以将操作表示为:

在此处输入图像描述

(注意,我假设earliest<latest为了简化分支)上面的“菱形”是一个决策节点。三个分支中的一个被选择,这取决于在每个边的括号之间给出的分支(即条件)。下面的菱形是一个合并节点(替代执行路径相遇的地方)。在守卫的符号中,我假设<运算符适用于 start_date 的类型。

另一种方法是编写一个表示操作的转换。在这种情况下, 的输入ActionState2将是转换的结果,其中start_date是 的输出ActionState1

在此处输入图像描述

第三种方法是将操作编写为执行此类计算的操作的后置条件(即,将构造型«postcondition»附加到操作的约束)。

如果LatestEarliest被定义为模型中的函数,则后置条件为:

result = Latest (earliest_start_date, 
                  Earliest (latest_start_date, start_date))

在此处输入图像描述

如果start_date定义了minand的类型max,则后置条件可以写成:

result = min(Set{latest_start_date, 
             max(Set{earliest_start_date,start_date})});

(即a) latest_start_date 组成的集合的最小值,b) early_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 定义标准符号。

于 2013-02-27T16:20:38.810 回答