【问题标题】:UML State Machines, Local vs. External TransitionUML 状态机,本地与外部转换
【发布时间】:2013-02-02 20:18:39
【问题描述】:

正如http://www.eclipse.org/forums/index.php/t/452409/ 中已经提出的那样 我不确定我是否正确理解了本地转换的含义,我想知道我是否以正确的语义使用它们

这两个状态机相等吗?

【问题讨论】:

    标签: uml modeling


    【解决方案1】:

    在 UML 2.4.1 下,第一个图显示了在收到 trigger 时从 State1 的本地转换,而第二张图显示了收到 trigger 时子状态之间的转换。从 State1 的外部过渡将由指向 State1 然后弯曲回到它的箭头表示(上层建筑规范的图 15.48)。

    UML 上层结构 2.4.1 的第 15.3.15 节 TransitionKind 给出了内部、本地和外部转换的语义:

    kind=local 表示转换如果被触发,将不会退出复合(源)状态,但它会应用于复合状态中的任何状态,并且这些状态将被退出和进入。

    由于本地和子状态之间的转换都不会导致 State1 退出,因此图表显示了类似的状态机 - 不同之处在于从 State1.3 开始,第一台机器将重新进入 State1.3(导致其退出和进入要调用的行为),而第二个在触发时不会从 State1.3 执行任何操作。

    【讨论】:

    • 外部转换是退出其源顶点的转换。因此 state1.1->state1.3; state1.2->state1.3 和 state1.1->state1.2 是外部转换
    • 我认为第一个图中的局部转换会导致执行当前State1子状态的退出行为(不是State1状态的退出行为),然后是State1.3的进入行为.
    • 据我了解,与第二张图的唯一区别是缺少具有相同触发器的转换 state1.3->state1.3,实际上第一张图也由本地转换表示SM
    • UML 规范将内部转换定义为自转换(即具有相同的源和目标状态)的本地转换的特例。要求 state1.1->state1.2 的另一个原因; state1.1->state1.3 和 state1.2->state1.3 不是内部的
    • @Sindico 转换状态 1.1 -> 状态 1.2 等是状态 1 的内部 - 它们不会导致状态 1 的退出行为。它们在所涉及的子状态之外 - 它们确实会导致状态 1.1 的退出行为和状态 1.2 的进入行为。你必须对上下文有点小心,有时必须说清楚什么是内部/外部的过渡。
    猜你喜欢
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 2019-03-09
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多