【问题标题】:Difference between guard and event in UML state diagramUML状态图中守卫和事件的区别
【发布时间】:2015-09-04 17:49:39
【问题描述】:

我认为我可以区分 eventguard。但是我遇到了一个类似guard的事件:

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

我将变量计数器从小于 4 的某个值更改为大于 4 的事件视为事件。这是否意味着事件也可以是像守卫这样的条件?

【问题讨论】:

    标签: uml diagram staruml argouml


    【解决方案1】:

    事件是触发转换的事物。在您的情况下,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

    【讨论】:

      猜你喜欢
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      相关资源
      最近更新 更多