我们在学校里学习行为状态图的转换有语法:
事件列表[保护条件] /行动列表
但我在Internet上找不到任何使用多个事件转换的例子。真的有可能吗?如果是,它的表现如何?是否意味着当其中一个事件发生时(当然条件得到满足)实现了交易?
答案 0 :(得分:5)
是的,转换可以由列表中的许多事件之一触发。您可以使用这样的构造来避免状态之间的多条线,从而形成更整洁的图表。
以下是2.5规范所说的内容:
14.2.3.9.2启用转换
当且仅当:
时启用转换
[。 。 。 ]
过渡的至少一个触发器的事件与调度的事件事件的事件类型相匹配。
这些逻辑OR'ed转换在文本上指定为转换上的逗号分隔列表,如§14.2.4.9中所述:
[<trigger> [‘,’ <trigger>]* [‘[‘ <guard>’]’] [‘/’ <behavior-expression>]]
答案 1 :(得分:1)
不幸的是,UML规范在这方面并不具体(我想,但Jim有正确的答案)。无论如何:
14.2.4.9过渡
Transition的默认文本表示法由以下BNF表达式定义:
[<trigger> [‘,’ <trigger>]* [‘[‘ <guard>’]’] [‘/’ <behavior-expression>]]
触发器的标准符号(参见子条款13.3.4)在哪里,是一个保护的布尔表达式,而optional是一个表达效果的表达式,用一些特定于供应商或标准的文本表面语言编写的行为(参见第16.1)款。触发器可以是任何标准触发器类型。 SignalEvent触发器和CallEvent触发器无法通过语法区分,必须通过其他地方的声明进行区分。
规范中还有其他地方以类似的方式出现此段落,但没有解释如何处理多个触发器。我假设它是OR
条件。但这只是一个假设。唉,既然你没有见过例子(我也没有),这可能是一个未知的事实。只是不要使用它 - 这确实可能;-)如果你碰巧找到一个例子,只要问作者他的意思。 UML是为了彼此交谈。