我认为我可以区分事件和警卫。但是我遇到了类似于警卫的事件:
counter > 4 [pin is high] / switch on
^^^^^^^^^^^
event
我看到变量计数器从小于4的某个值变为大于4的变量作为事件。这是否意味着事件也可能像守卫一样?
答案 0 :(得分:2)
事件是触发转化的因素。在您的情况下,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过渡 ... 转换可以拥有一组触发器,每个触发器指定一个事件 在发送时,其发生可能会触发遍历 过渡。如果调度,则称启用转换触发器 事件发生与其事件类型匹配。
14.2.4.9过渡 ... Transition的默认文本表示法由。定义 以下BNF表达式:
[<trigger> [‘,’ <trigger>]* [‘[‘ <guard>’]’] [‘/’ <behavior-expression>]]
换句话说:trigger [guard] / behavior