4

我们在学校学习行为状态图的转换有语法:

事件列表 [保护条件] / 动作列表

但是我在 Internet 上找不到任何使用带有多个事件的转换的示例。真的有可能吗?如果是,它的行为如何?这是否意味着当其中一个事件发生时(当然条件得到满足),交易就实现了?

4

2 回答 2

6

是的,转换可以由列表中的许多事件之一触发。您将使用这样的构造来避免状态之间的多条线,从而制作更整洁的图表。

这是 2.5 规范所说的:

14.2.3.9.2 启用的转换

当且仅当以下情况启用转换:

  • [ . . . ]

  • 至少有一个Transition 的触发器具有与所调度的Event 发生的Event 类型相匹配的Event。

这些逻辑 OR'ed 转换以文本形式指定为转换上的逗号分隔列表,如 §14.2.4.9 中所述:

[<trigger> [‘,’ <trigger>]* [‘[‘ <guard>’]’] [‘/’ <behavior-expression>]]
于 2016-10-30T18:57:41.690 回答
1

不幸的是,UML 规范在这方面并不具体(我认为,但 Jim 有正确的答案)。反正:

14.2.4.9 过渡

转换的默认文本符号由以下 BNF 表达式定义:

[<trigger> [‘,’ <trigger>]* [‘[‘ <guard>’]’] [‘/’ <behavior-expression>]]

触发器的标准表示法(参见子条款 13.3.4)是一个用于保护的布尔表达式,可选是一个表达式,用于指定以某些供应商特定或标准文本表面语言编写的效果行为(参见子条款 16.1 )。触发器可以是任何标准触发器类型。SignalEvent 触发器和 CallEvent 触发器不能通过语法区分,必须通过它们在别处的声明来区分。

在规范中的其他地方,这一段以类似的方式出现,但没有解释如何处理多个触发器。我认为这是一个OR- 条件。但这只是一个假设。唉,既然你没有看到例子(我也没有),这可能是一个未知的事实。只是不要使用它 - 这确实是可能的 ;-) 如果你碰巧找到一个例子,只要问作者他的意思。UML 是关于相互交谈的。

于 2016-10-30T12:02:52.720 回答