このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ステートの階層を使用した複雑なマルチレベル ステートの設計
マルチレベル ステートの複雑度を管理するには、Stateflow® チャートで階層を使用します。階層では、システム内の複数のレベルのサブコンポーネントを表現できます。
ステート階層の例
たとえば、次のチャートには 3 つのレベルをもつ階層があります。あるステートの境界内に別のステートを描画すると、内側のステート (子) は外側のステート (スーパーステート) のサブステートになります。外側のステートは、内側のステートの親です。
この例では、チャートはステート Car_done
の親です。ステート Car_done
は、Car_made
ステートと Car_shipped
ステートの親です。ステート Car_made
も、Parts_assembled
ステートと Painted
ステートの親です。言い換えると、ステート Parts_assembled
と Painted
は、Car_made
ステートの子です。
Stateflow 階層をテキストで表現するには、スラッシュ (/)
を使用してチャートを表現し、ステート階層の各レベルをピリオド (.)
で区切ります。以下のリストは、前述の例のオブジェクト階層をテキストによって表したものです。
/Car_done
/Car_done
.Car_made
/Car_done
.Car_shipped
/Car_done
.Car_made
.Parts_assembled
/Car_done
.Car_made
.Painted
サブステートとスーパーステートの作成
"サブステート" は、その親であるステートがアクティブなときにのみ、アクティブになることのできるステートです。サブステートを含むステートは、"スーパーステート" に該当します。サブステートを作成するには、ステート ツールを選択し、新規のステートを、スーパーステートにしたいステートの内部にドラッグします。Stateflow チャートにより、指定された親ステート内にサブステートが作成されます。この方法で、任意の階層までステートを入れ子にできます。サブステートの親子関係を変更するには、チャート内の現在の親からドラッグして、新しい親にドロップします。
メモ
親ステートは、そのサブステートすべてを含められるサイズのグラフィックであることが前提です。新規のサブステートをドラッグする前に、親ステートのサイズを変更しておく必要があります。スーパーステートをサブチャートとして宣言することにより、大きなグラフィカル サイズのステートを無視することができます。詳細については、サブチャートを使用したモーダル ロジックのカプセル化を参照してください。
ステートに含めることのできるオブジェクト
ステートには、他のすべての Stateflow オブジェクトが含まれます。Stateflow チャート表記法は、包含構造による Stateflow チャートのグラフィカル オブジェクト階層の表現をサポートしています。他のステートを含んでいるステートは "スーパーステート" です。他のステートに含まれているステートは "サブステート" です。ステートが他のステートのスーパーステートまたはサブステートのどちらでもない場合は、Stateflow チャート自身がそのステートの親になります。
ステートには、非グラフィカルなデータ オブジェクト、イベント オブジェクトおよびメッセージ オブジェクトも含めることができます。この包含階層は、モデル エクスプローラーで表示されます。データ、イベント、メッセージの包含は、親オブジェクトを指定して定義します。