シーケンス図とステートマシン図を学ぼう
シーケンス図とステートマシン図とは
「はじめようUML!」と題してお送りしている本連載も、今回がいよいよ最終回となります。最後は、シーケンス図とステートマシン図による振る舞い設計を見ていきましょう。
シーケンス図とステートマシン図は、13あるUMLの図(ダイアグラム)の中でも、システム内部の振る舞いを表現するための代表的な図です。シーケンス図は相互作用図の一種で、主に、ユースケースごとにシステム内部のオブジェクト同士のやり取りを設計するために使われます。一方、ステートマシン図では、ユースケースを跨ったオブジェクトごとの状態遷移を設計します。
シーケンス図とは
まずはシーケンス図から見ていきましょう。シーケンス図は、オブジェクト間のメッセージのやり取り(相互作用)を時系列に沿って表現するダイアグラムです。シーケンス図での時間は、ライフラインに沿って上から下に進みます。
シーケンス図は、詳細設計で使用することが一般的です。詳細設計を始めるときは、ユースケース記述から得られたクラス図には属性のみが記述され、操作は存在しないことが多いでしょう。操作は、シーケンス図で相互作用をモデリングしていくことによって得られます。
シーケンス図でのメッセージは、主にオブジェクト間の操作の呼び出しに対応します(操作の呼び出しを表す)。メッセージが存在するということは、呼び出される操作が存在するということなので、オブジェクト間に存在するメッセージを検討することで、クラスが持つべき操作を判断することができます。
図1は「出張申請を登録する」ユースケースのシーケンス図の例です。「ライフライン」は、相互作用に参加するアクターや、オブジェクトなどの要素を表し、垂直の破線も含まれます。「メッセージ」が表すのは、ライフライン間の通信です。
「メッセージ」は、オブジェクト間の通信を表し、「同期メッセージ」と「非同期メッセージ」、そして「生成メッセージ」があります。同期メッセージの場合には、メッセージの戻りまで次のメッセージへ進みませんが、非同期メッセージの場合にはメッセージの戻りを待たずに次のメッセージへ進むことができます。同期メッセージには、明示的に「戻りメッセージ」を記述することができます。「生成メッセージ」は、オブジェクトを生成することを表します。
「実行指定」は、ライフラインが動作している区間を表現し、活性区間とも呼ばれます。また、ライフライン自身へのメッセージ(自己メッセージ)の場合には、実行指定を入れ子にして記述することも可能です。実行指定は省略することができます。
「結合フラグメント」は、シーケンス図に含まれる条件分岐や繰り返し処理などの相互作用をフレームで囲んだものです。図1の例にある「opt」は、条件によって実行される(または実行されない)相互作用を表します。optの他にも、分岐処理を表現する「alt」や、繰り返し処理を表現する「loop」、並行処理を表現する「per」などがあります。