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状态机图:
一方面,状态B和C不是完全独立的,另一方面,并发状态的概念使得图更加简单。你能建议一个更好的解决方案吗? 告诉我我哪里错了?
答案 0 :(得分:1)
在“并行”或“非独占”状态机应用的情况下,您是否存在真正的问题?
似乎你正在寻找一个非常理论的概念。您的图示例,不显示任何“转换值”,看起来更像标准流程图。 (是的,我知道,状态机是专门的流程图)
分层状态机也应具有“封装”或“隐藏”转换值。
U.M.L。流程图还支持表示“并行”或“非独占”路径,因此如果您必须为这种情况建模,您可能需要从它们开始,而不是状态机。
我工作的唯一分层状态机与解析器有关,altought,我知道它们也用于电路。
祝你好运。