UML状态图中保护与事件的区别

时间:2015-09-04 17:49:40

标签: uml diagram staruml argouml

我认为我可以区分事件警卫。但是我遇到了类似于警卫的事件:

counter > 4 [pin is high] / switch on
^^^^^^^^^^^ 
   event

我看到变量计数器从小于4的某个值变为大于4的变量作为事件。这是否意味着事件也可能像守卫一样?

1 个答案:

答案 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