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は完全に独立しているわけではありませんが、他方では、並行状態の概念により、ダイアグラムがはるかに単純になります。より良い解決策を提案したり、どこが間違っているのか教えてもらえますか?