シーケンス図


オブジェクト生存線

相互作用図のうち、時系列を表現するにはシーケンス図を用います
シーケンス図では、図の上から下へ、垂直に時間が進むと仮定します
水平に、異なるオブジェクトが配列され、特定の時間に発生する操作を記述します
つまり、垂直に時間、水平にオブジェクトを記述する 2 次元グラフなのです

まず、図に記述するオブジェクトを左上から右に向かって順に列挙します
オブジェクトの記法は静的構造図のオブジェクトと同一です
ただし、操作や属性を記述する必要はありません

シーケンス図は時間の流れが存在するため、オブジェクトの生存時間を記述できます
オブジェクトの長方形の下線部中央から、図の下に向かって垂直破線を引いてください
これをオブジェクト生存線と呼びます



これは、シーケンス図におけるオブジェクトと、オブジェクト生存線の例です
しかし、破線の段階では、オブジェクトはまだ動作していません
オブジェクトが何らかの操作を実行することを活性化と呼びます

オブジェクトが何らかのアクションを起こす場合、活性化を記述しなければなりません
活性化は生存線の上に縦長の矩形で、頂上を開始点、そこを終点として記述します
雰囲気として、株価のグラフに利用されるローソク足のような図になります



このように、オブジェクトが何らかの処理をしている時間は活性化させましょう
処理内容をメモする目的で、左の余白にラベルを付けてもよいでしょう

同時時刻に複数の活性化オブジェクトが存在する場合
これは、手続き的な処理ではなく、並列的に実行されていることを表します
並列実行については、マルチスレッドやプロセス間の通信などが考えられます
場合によっては、リモートメソッドの呼び出しによる他のコンピュータかもしれません


メッセージ

他のオブジェクトの操作を呼び出したり、情報を投げることを表すには
活性化しているオブジェクトから対象オブジェクトに水平の矢印を引きます
この矢印をメッセージと呼びます
また、結果としてアクションが発生する通信のことを刺激と呼んでいます



図のように、メッセージには 4 種類の水平矢じりが用いられます
閉実線やじりは手続き的な同期メッセージを表します
通常、このメッセージを発生したオブジェクトは直後に処理を停止します
そして、メッセージによって操作されたオブジェクトが活性化するでしょう

開き矢じりは、階層的ではない、非手続きメッセージを送信します
イベント発生メカニズムなど、コールバックに関連した記述に適するでしょう
基本的に開き矢じりは非同期ですが、非手続きであるという意味しか持ちません
明確に非同期を表す場合は半開き矢じりを使います

最後の破線開き矢じりは、手続き的処理の返しを表します
操作の結果、呼び出し元に戻り値などを投げる場合はこのメッセージを使います

矢の上部に、メッセージの名前や引数などを記述することもできます
また、メッセージ手順を明確にするために、各メッセージにはシーケンス番号を与えます
シーケンス図では、垂直次元が物理的に手順を表しているため省略できますが
強調図と併用する場合は、各メッセージにシーケンス番号を与える必要があります



この図は、保存されているデータを表す Model オブジェクトと
それを画面に表示する View オブジェクト
そして、Model と View を管理する Control オブジェクトの関係を表しています

最初に、アクター(他の要素)によって Model に変更が加えられます
原因には、データ入力やプログラムからの制御などが考えられるでしょう
データが更新された場合、それを表示している GUI オブジェクトも再描画しなければなりません
そのため、Model は Control に対し、更新の事実を伝えるメッセージを送ります
その結果、Control に登録されている View にメッセージが渡ります

GUI オブジェクトは再描画の必要性があっても、すぐに再描画するとは限りません
図では、他の処理が終了し、システムやハードウェアの準備が整った時点で
再描画を要求するハンドラが呼びされる仕組みだと仮定しています
View では再描画の要求をシステムに渡し、その後 Paint 操作が呼び出されます
このような、自分のオブジェクトの操作を呼び出す再帰的な記述も問題はありません

シーケンスの起動を行うのは、システムの外部要因です
これには、ユースケース図のアクターを用いて表現されます



前のページへ戻る次のページへ