HY
我如何在UML活动图中描述这一点?
最新(earliest_start_date,Earliest(latest_start_date,start_date))
这意味着:从latest_start_date和start_date中选择最早的,并使用earliest_start_date,如果它稍后是上一个决定的结果。 我用钻石尝试过,但我想我还需要更多。
我希望你能帮助我
感谢。
答案 0 :(得分:1)
最复杂的部分是决策节点将所接收的令牌(即“值”)传递给所选边缘,然后您需要根据执行的分支明确表示值已更改。如果您将start_date
建模为对象流(其中start_date
的值流过图表)并且earliest_start_date
和latest_start_date
是范围内变量或常量,则可以将操作表示为:
(注意我假设earliest<latest
以简化分支)
上部“菱形”是决策节点。根据每条边的括号之间给出的分支(即条件),选择三个分支中的一个。较低的菱形是合并节点(备选执行路径相遇)。在守卫的表示法中,我假设<
运算符适用于start_date的类型。
另一种方法是编写代表操作的转换。在这种情况下,ActionState2
的输入将是转换的结果,其中start_date
是ActionState1
的输出。
第三种方法是将操作编写为执行此类计算的操作的后置条件(即,对操作附加了刻板印象«postcondition»
的约束)。
如果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)由earliest_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定义标准符号。