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 に答える