1

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 状态机图

一方面状态 B 和 C 不是完全独立的,另一方面并发状态的概念使图表更简单。您能否提出更好的解决方案或告诉我我错在哪里?

4

1 回答 1

1

您在应用“并行”或“非独占”状态机时遇到真正的问题吗?

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

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

UML 流程图还支持表示“并行”或“非排他”路径,因此如果您必须对这种情况进行建模,您可能希望从它们开始,而不是状态机。

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

祝你好运。

于 2012-06-01T14:55:52.420 回答