我想我可以区分event和guard。但是我遇到了一个类似于guard的事件:
counter > 4 [pin is high] / switch on
^^^^^^^^^^^
event
在中,我将变量计数器从小于4的值更改为大于4的值视为事件。这是否意味着事件也可以是一种状态,比如守卫?
事件是触发转换的事情。在您的示例中,counter > 4
是一个更改事件,意味着"计数器值已更改,其值现在大于4"。
括号之间的代码是保护符。在pin is high
的情况下,意味着"只有当引脚高时才启用转换"。
switch on
是执行转换时执行的行为。
脚注:在您的示例中,事件确实与守卫非常相似。
在C语言中可能是这样的:
/**
* this interrupt is triggered when the
* counter exceeds the threshold (4)
*/
static void counter_isr(void)
{
if (pin_is_high(PIN))
switch_on();
}
来自UML 2.5规范:
<14.2.3.8转换/strong>…一个转换可以拥有一组触发器,每个触发器指定一个事件在分派时,它的出现可能会触发遍历过渡。转换触发器被认为是启用的事件发生与事件类型匹配。
14.2.4.9 Transition…转换的默认文本表示法由以下BNF表达式:
[<trigger> [‘,’ <trigger>]* [‘[‘ <guard>’]’] [‘/’ <behavior-expression>]]
即:trigger [guard] / behavior