【发布时间】:2015-09-04 17:49:39
【问题描述】:
我认为我可以区分 event 和 guard。但是我遇到了一个类似guard的事件:
counter > 4 [pin is high] / switch on
^^^^^^^^^^^
event
我将变量计数器从小于 4 的某个值更改为大于 4 的事件视为事件。这是否意味着事件也可以是像守卫这样的条件?
【问题讨论】:
标签: uml diagram staruml argouml
我认为我可以区分 event 和 guard。但是我遇到了一个类似guard的事件:
counter > 4 [pin is high] / switch on
^^^^^^^^^^^
event
我将变量计数器从小于 4 的某个值更改为大于 4 的事件视为事件。这是否意味着事件也可以是像守卫这样的条件?
【问题讨论】:
标签: uml diagram staruml argouml
事件是触发转换的事物。在您的情况下,counter > 4 是一个更改事件,表示“计数器值已更改,其值现在大于 4”。
括号之间的代码是guard。在您的情况下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 过渡 ... 转换的默认文本符号定义为 以下 BNF 表达式:
[<trigger> [‘,’ <trigger>]* [‘[‘ <guard>’]’] [‘/’ <behavior-expression>]]
换句话说:trigger [guard] / behavior
【讨论】: