UML状态机图中状态表示的棘手情况。正交与否?

时间:2012-06-01 11:05:22

标签: uml diagram state-machine

UML 2.0中有限状态机的分层表示提供了很好的信息压缩,因此您不必描述所有可能的状态组合。 UML还提供所谓的正交状态,它们不是互斥的。 并且就我的想法而言,如果一个对象在这些状态中产生一些活动以响应同一事件,则应该简单地组合对应于每个状态的活动。从遗留C ++代码开始逆向工程UML状态机图时出现了这个问题。精炼的C ++代码和UML图给出了:

void CSomeClass::somePublicMethod()
{
    if (false == m_A)
    {
        return;
        }

    if (true == m_B)
    {
        m_C = otherMethodWithSideEffects();
    }

    if (false == m_C)
    {
        // some logic with side effects and state transitions
        return;
    }

    // other complex logic with side effects and state transitions
}

UML状态机图:

UML state machine diagram

一方面,状态B和C不是完全独立的,另一方面,并​​发状态的概念使得图更加简单。你能建议一个更好的解决方案吗? 告诉我我哪里错了?

1 个答案:

答案 0 :(得分:1)

在“并行”或“非独占”状态机应用的情况下,您是否存在真正的问题?

似乎你正在寻找一个非常理论的概念。您的图示例,不显示任何“转换值”,看起来更像标准流程图。 (是的,我知道,状态机是专门的流程图)

分层状态机也应具有“封装”或“隐藏”转换值。

U.M.L。流程图还支持表示“并行”或“非独占”路径,因此如果您必须为这种情况建模,您可能需要从它们开始,而不是状态机。

我工作的唯一分层状态机与解析器有关,altought,我知道它们也用于电路。

祝你好运。