Object-oriented-analysis-design-ooad-dynamic-modeling
OOAD-動的モデリング
動的モデルは、システムの時間依存の側面を表します。 システム内のオブジェクトの状態の一時的な変化に関係しています。 主な概念は次のとおりです-
- 状態。オブジェクトの存続期間中の特定の条件での状況です。
- 遷移、状態の変化
- イベント、遷移をトリガーするオカレンス
- アクション、何らかのイベントのために発生する中断されないアトミックな計算、および
- 移行の同時実行。
ステートマシンは、イベントが原因で発生するアクションだけでなく、いくつかのイベントが原因で、ライフタイム中に多くの状態を通過するオブジェクトの動作をモデル化します。 状態マシンは、状態遷移図によってグラフィカルに表されます。
状態と状態遷移
状態
状態は、オブジェクトが特定の期間に持っている属性の値によって与えられる抽象化です。 これは、オブジェクトの存続期間内の有限期間に発生する状況であり、特定の条件を満たす、特定のアクティビティを実行する、または特定のイベントの発生を待機します。 状態遷移図では、状態は丸い長方形で表されます。
状態の部分
- 名前-文字列は、ある状態を別の状態と区別します。 状態に名前を付けることはできません。
- 入場/退場アクション-状態の開始時および終了時に実行されるアクティビティを示します。
- 内部遷移-状態の変化を引き起こさない状態内の変化。
- サブ状態-状態内の状態。
初期状態と最終状態
オブジェクトのデフォルトの開始状態は、その初期状態と呼ばれます。 最終状態は、ステートマシンの実行の完了を示します。 初期状態と最終状態は疑似状態であり、名前以外の通常の状態の部分を持たない場合があります。 状態遷移図では、初期状態は黒丸で示されます。 最終状態は、塗りつぶされていない別の黒丸で囲まれた黒丸で表されます。
遷移
遷移は、オブジェクトの状態の変化を示します。 イベントの発生時にオブジェクトが特定の状態にある場合、オブジェクトは指定された条件に従って特定のアクティビティを実行し、状態を変更できます。 この場合、状態遷移が発生したと言われます。 遷移は、最初の状態と新しい状態の間の関係を示します。 遷移は、ソース状態から宛先状態へのソリッドな有向アークによってグラフィカルに表されます。
遷移の5つの部分は-
- ソース状態-遷移の影響を受ける状態。
- イベントトリガー-ガード条件が満たされた場合にソース状態のオブジェクトが遷移するための発生。
- Guard Condition -Trueの場合、イベントトリガーの受信時に遷移を引き起こすブール式。
- アクション-何らかのイベントが原因でソースオブジェクトで発生する、割り込み不可能でアトミックな計算。
- ターゲット状態-移行完了後の宛先状態。
例
人が場所Xから場所Yまでタクシーを利用しているとします。 その人の状態は、待機中(タクシーを待っている)、乗車(彼はタクシーを持っており、その中を移動している)、および到達した(彼は目的地に到達した)です。 次の図は、状態遷移を示しています。
イベント
イベントは、オブジェクトまたはオブジェクトのグループの状態遷移をトリガーできる発生です。 イベントには時間と空間の場所がありますが、それに関連付けられた期間はありません。 通常、イベントはいくつかのアクションに関連付けられています。
イベントの例としては、マウスクリック、キーの押下、割り込み、スタックオーバーフローなどがあります。
遷移をトリガーするイベントは、状態図の遷移の弧と一緒に記述されます。
例
上の図に示されている例を考えると、待機状態から乗車状態への移行は、その人がタクシーに乗ると発生します。 同様に、彼が目的地に到着すると、最終状態に到達します。 これら2つのオカレンスは、イベントGet_TaxiおよびReach_Destinationと呼ばれます。 次の図は、状態マシンのイベントを示しています。
外部および内部イベント
外部イベントは、システムのユーザーからシステム内のオブジェクトに渡されるイベントです。 たとえば、ユーザーによるマウスクリックまたはキー押下は外部イベントです。
内部イベントは、システム内のあるオブジェクトから別のオブジェクトに渡されるイベントです。 たとえば、スタックオーバーフロー、除算エラーなど。
遅延イベント
遅延イベントとは、現在の状態のオブジェクトによってすぐに処理されるのではなく、後で他の状態のオブジェクトによって処理できるようにキューに並んでいるイベントです。
イベントクラス
イベントクラスは、共通の構造と動作を持つイベントのグループを示します。 オブジェクトのクラスと同様に、イベントクラスも階層構造に編成できます。 イベントクラスには属性が関連付けられている場合がありますが、これは暗黙的な属性です。 たとえば、私たちは航空会社のフライトの出発のイベントを考慮することができ、次のクラスにグループ化することができます-
Flight_Departs(Flight_No、From_City、To_City、Route)
行動
アクティビティ
アクティビティは、一定の期間を必要とするオブジェクトの状態に対する操作です。 それらは、システム内で中断される可能性のある継続的な実行です。 アクティビティは、あるアクティビティから別のアクティビティへのフローを表すアクティビティ図に表示されます。
アクション
アクションは、特定のイベントの結果として実行されるアトミック操作です。 アトミックとは、アクションが中断できないことを意味します。つまり、アクションが実行を開始すると、イベントによって中断されることなく完了します。 アクションは、イベントがトリガーされたオブジェクト、またはこのオブジェクトに表示される他のオブジェクトに対して実行できます。 一連のアクションがアクティビティを構成します。
入場と退場のアクション
エントリアクションは、状態への遷移に関係なく、状態に入るときに実行されるアクションです。
同様に、状態から出た遷移に関係なく、状態を離れるときに実行されるアクションは、終了アクションと呼ばれます。
シナリオ
シナリオは、指定された一連のアクションの説明です。 特定のアクションシリーズを実行するオブジェクトの動作を示します。 主なシナリオは基本的なシーケンスを表し、副次的なシナリオは代替シーケンスを表します。
動的モデリングの図
動的モデリングに使用される2つの主要な図があります-
相互作用図
相互作用図は、さまざまなオブジェクト間の動的な動作を説明します。 オブジェクトのセット、それらの関係、およびオブジェクトが送受信するメッセージで構成されます。 したがって、相互作用は、相互に関連するオブジェクトのグループの動作をモデル化します。 相互作用図の2つのタイプは-
- シーケンス図-それは表形式でメッセージの時間的順序を表します。
- コラボレーション図-頂点とアークを介してメッセージを送受信するオブジェクトの構造的組織を表します。
状態遷移図
状態遷移図または状態マシンは、単一のオブジェクトの動的な動作を記述します。 オブジェクトがその存続期間中に通過する状態のシーケンス、状態の遷移、遷移を引き起こすイベントと条件、およびイベントによる応答を示します。
イベントの並行性
システムでは、2つのタイプの並行性が存在する場合があります。 彼らは-
システムの同時実行性
ここでは、並行性はシステムレベルでモデル化されています。 システム全体は、各ステートマシンが他のステートマシンと同時に実行されるステートマシンの集合としてモデル化されます。
オブジェクト内の並行性
ここで、オブジェクトは並行イベントを発行できます。 オブジェクトには、サブ状態で構成される状態があり、各サブ状態で同時イベントが発生する場合があります。
オブジェクト内の並行性に関連する概念は次のとおりです-
単純および複合状態
単純な状態にはサブ構造がありません。 内部にネストされたより単純な状態を持つ状態は、複合状態と呼ばれます。 サブ状態は、別の状態内にネストされている状態です。 通常、ステートマシンの複雑さを軽減するために使用されます。 サブ状態は、任意の数のレベルにネストできます。
複合状態には、順次サブ状態または並行サブ状態があります。
シーケンシャルサブステート
順次サブ状態では、実行の制御は、あるサブ状態から別のサブ状態に順次に渡されます。 これらのステートマシンには、最大で1つの初期状態と1つの最終状態があります。
次の図は、順次サブ状態の概念を示しています。
同時サブステート
並行サブステートでは、サブステートは並行して実行されます。つまり、各ステートは同時に実行するステートマシンを持っています。 各状態マシンには、独自の初期状態と最終状態があります。 ある並行サブ状態がもう一方より先に最終状態に達すると、制御はその最終状態で待機します。 ネストされたすべてのステートマシンが最終状態に達すると、サブステートは単一のフローに戻ります。
次の図は、並行サブ状態の概念を示しています。