【问题标题】:Describing decision in activity-diagram在活动图中描述决策
【发布时间】:2013-02-27 14:35:25
【问题描述】:

Hy

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

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

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

希望你能帮到我

谢谢。

【问题讨论】:

  • 什么是 latest_start_date 和 early_start_date?常数?变量?输入参数? start_date 是建模为变量还是对象流?
  • 这些都是常量
  • 是否要求最早

标签: uml activity-diagram


【解决方案1】:

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

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

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

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

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

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

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

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 定义标准符号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 2018-09-10
    相关资源
    最近更新 更多