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 不是完全独立的,另一方面并发状态的概念使图表更简单。您能否提出更好的解决方案或告诉我我错在哪里?