連載第5-1回
UMLの基礎と応用

(株)NTTデータ 技術開発本部 副本部長
山本修一郎

■■シーケンス図■■

 シーケンス図はシステムの動的な構造を表すための振舞い図の一つである[1][2][3][4]。シーケンス図ではクラス間のメッセージによる相互作用を記述する。1枚のシーケンス図には起点となるメッセージから始まる一連のメッセージ交換の系列を時系列的に上から下に配置することにより記述していく。これに対してコラボレーション図では、オブジェクト間のメッセージの送受信関係があることを空間的な接続関係で示し、メッセージ間の時系列な関係をメッセージに付与した実行順序を示す番号で記述した。

 厳密にいえば、シーケンス図はコラボレーションを構成するクラス間のメッセージの集合を表現する場合とシナリオ内のある実行系列に含まれるオブジェクト間の刺激(Stimulus)の集合を表現する場合とがある。メッセージはクラス間の関係であり刺激はオブジェクト間の関係であるから、クラスがオブジェクトの仕様であることから、メッセージは刺激の仕様であるといえる。クラス間のメッセージ集合を表現するシーケンス図をジェネリック形式という。オブジェクト間の刺激の集合を表現するシーケンス図をインスタンス形式という。この理由はメッセージが刺激を一般化した仕様であることによる。

 以下では、煩雑さを避けるため、メッセージと刺激とをとくに区別しないで総称してメッセージという用語を用いることにする。

シーケンス図の構成要素[4]

 シーケンス図の表記法はUMLの仕様が改訂される度に異なってきた経緯があり、解説書がどの仕様に基づいて執筆されたかによって表記法が異なるので注意が必要である。以下では、UML1.4に基づいてシーケンス図の構成要素を説明しよう。

(1)シナリオ
 シーケンス図の左側に記述されるテキスト。シナリオを構成する手順は最上部が始点で、時間経過に従って最下部が終点となるように記述する。

(2)列(column)
 シナリオに出現するアクタとシステム、クラス、オブジェクトをシーケンス図の最上部に配置する。アクタは人の形(stick man)で示す。境界オブジェクト(boundary object)は左側に列と平行な線分を持つ円で示す。エンティティオブジェクト(entity object)は下に円と接する線分を持つ円で示す。制御オブジェクト(control object)は矢印を持つ円で示す。これらはJacobson [5]が提案したステレオタイプであり視覚的に区別できるようになっている。システム、クラス、オブジェクトなど特定のステレオタイプを持たない場合は横長の矩形で示す。通常、アクタは左に、システム、クラス、オブジェクトは右側に配置する。複数のアクタが必要になる場合、始点となるメッセージを送信するアクタを最も左に配置する。

(3 )メッセージ
 オブジェクト間の通信を表す水平方向の矢線。メッセージは基本的に左から右に送信する。矢線に勾配をつけることにより通信時間が長いことを示すことができる。

 メッセージに制御情報として、条件と反復を付けることができる。条件を指定する場合、メッセージを示す矢線のラベルの先頭に次の形式で記述する。

[条件式]メッセージ名(引数並び)
 括弧内の条件式が成立するとき、メッセージを送信することを示す。

[例][ hasStock] reserve ()

 ひとつのメッセージを繰り返し送信する場合、メッセージ名の先頭に反復記号(*)と繰り返し条件を付与することにより次の形式で記述する。

*[条件式]メッセージ名(引数並び )

 括弧内の条件式で指示されるように、メッセージを繰り返し送信することを示す。

[例]*[ for all items] message(parameters)

 同じ始点を持つ条件付きメッセージの複数の矢印により、条件分岐を表すことができる。
 メッセージの矢印の終点を始点と同じオブジェクトにすることで、オブジェクトの自己呼び出し(selfcall )を表現する。

 メッセージには、手続き呼び出し、非同期通信、手続き呼び出しの結果通知の3種類がある。それぞれ、矢の形状で区別する。手続き呼び出しの場合、実線でメッセージフローがあることを示し、黒塗りの三角形(filled solid arrowhead)で終点を指す。非同期通信の場合、実線でメッセージフローがあることを示し、棒状の矢線(stick arrowhead)で終点を指す。手続き呼び出しの結果通知の場合、点線でメッセージフローがあることを示す。終点の形状は非同期通信の場合と同じ矢線である。

 シーケンス図におけるメッセージの種類の代表的な例を図1に示す。

図1 シーケンス図のメッセージ例
図1 シーケンス図のメッセージ例

(4)生命線(lifeline)
 オブジェクトが存在していることを示す垂直方向の点線。オブジェクトを表す矩形の下辺から下に垂直に引く。同じオブジェクトに対して複数の生命線を記述することがある。この理由は他のオブジェクトからの異なるメッセージの受信に対する動作を記述するためである。たとえば、ある条件が成立する場合と成立しない場合で異なるメッセージを受信する必要があるだろう。

(5)活性区間(activation)
 生命線の上に配置し、オブジェクトに制御が移っている区間を示す縦長の矩形。自己呼び出しメッセージに対応する活性区間を記述する場合、呼び出し元のオブジェクトよりも短い矩形を自己呼び出しメッセージに対応させ、元のオブジェクトの活性区間の右に重ねて記述する。

 オブジェクトの列には生命線か活性区間のどちらかがあることになる。

(6)停止記号(termination symbol)
 生命線の上に停止記号("X")をおくことにより、このオブジェクトが削除され、それ以上存在しないことを示す。メッセージ(刺激)を表す矢の終点が停止記号であるとき、このメッセージを受信したオブジェクトを削除することを示す。

 以上で述べたシーケンス図の構成要素を表1に示す。

表1 シーケンス図の構成要素
表1 シーケンス図の構成要素

NEXT >> 

・連載第1回

・連載第2回

・連載第3回

・連載第4回

・連載第5回

・連載第6回

・連載第7回

・連載第8回

・連載第9回

・連載第10回

・連載第11回

・連載第12回

・連載第13回

・連載第14回

・連載第15回

・連載第16回

・連載第17回