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

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

コラボレーション図

 前回紹介したユースケース図では、システムの外部に対してシステムが提供する機能を記述した。今回はシステムの内部でユースケースを複数のオブジェクトの相互作用に従って実現する方法を記述するコラボレーション図を紹介しよう。

コラボレーション[1] [2] [3]

 ユースケースでは互いに緊密に関連する複数のシナリオの集合を規定している。これに対して複数のメッセージからなる一連の相互作用の系列がシナリオである。シナリオはシステムの具体的な実行経路を示している。メッセージはアクタとシステムやシステム内のクラスとの相互作用を表すアクションである。このような相互作用を表すコラボレーションには、システムの外部とシステムとのコラボレーション関係、システム内部のオブジェクト間のコラボレーション関係、特定の実行経路に関するオブジェクト間のコラボレーション関係がある。システム外部とのコラボレーション関係はユースケースで記述する。システム内部のコラボレーション関係と実行経路に関するコラボレーションはシーケンス図、コラボレーション図、アクティビティ図で表す。シーケンス図では時間軸にしたがってオブジェクト間のコラボレーションを記述する。コラボレーション図ではオブジェクト間の静的な構造の上でメッセージの実行順序を記述する。アクティビティ図ではアクションとその結果としての状態の変化に基づいてワークフローを記述する。

 コラボレーション図式の関係を表1にまとめる。

表1 コラボレーション図式の関係
表1 コラボレーション図式の関係

 コラボレーションに含まれるオブジェクト、オブジェクト間の関係、オブジェクトが属するクラスに関する記述をコンテクストという。コラボレーション図では、相互作用だけではなくコンテクストも同時に記述できるという特徴がある。

 関連するイベントの実行順序としてのシーケンスを強調する場合にはシーケンス図を用いる。これに対してメッセージの実行順序だけではなく、オブジェクト間の静的な相互関係などのコンテクストを同時に示す場合にはコラボレーション図を用いる。

コラボレーション図

 コラボレーション図には仕様レベルでクラス間の相互作用を記述する場合と、インスタンスレベルでオブジェクト間の相互作用を記述する場合の2つの場合がある。

 UMLでは下線がついた名前はインスタンスを示し、下線のない名前はインスタンスを生成するクラスを示す。クラスとそのインスタンスであるオブジェクトを矩形で表す。コラボレーション図でも矩形の名前に下線がついている場合は矩形がオブジェクトであることを示す。矩形の名前に下線がついていなければ、クラスであることを示している。

 クラスやオブジェクトを示す矩形を互いに接続する線をリンクという。インスタンスレベルのコラボレーション図では、リンクに対してメッセージラベルを付けることにより、オブジェクト間のメッセージの送受信関係を表すことができる。このメッセージ間の実行順序を示すためにシーケンス番号をメッセージラベルの先頭に付ける。

コラボレーション図のラベル[4]

[構文]仕様のロールラベル
/ロール名 :クラス名

 ロールラベルは、矩形で示されるクラスの名前である。関連ロール(AssociationRole)は、クラス間の関連を示す線で示される。関連ロールの名前は仕様のロールラベルの構文と同様である。

[構文]インスタンスのロールラベル
オブジェクト名 / ロール名 :クラス名

 インスタンスのロールラベルでは、仕様ロールラベルの先頭にオブジェクト名を付与して名前に下線を付ける。

 インスタンスオブジェクト間の関係に対して、メッセージを付けることができる。

[構文]メッセージラベル
先行子 シーケンス式
返却値:=メッセージ名 引数リスト

 先行子(predecessor )はコンマ(,)で区切られたシーケンス式の並びからなり、末尾にスラッシュ(/)を持つ。ただし先行子で用いられるシーケンス式には条件項は含まれない。

 先行子が指定された場合、その先行子に含まれるシーケンス番号に対応するすべてのコミュニケーションが完了するまで、この先行子を持つメッセージが実行されないことを示す。先行子により同期条件を表現することができる。シーケンス番号は昇順で実行されることを前提としているので、シーケンス式で指定されるシーケンス番号より小さいシーケンス番号に対応するすべてのメッセージが実行されるまで、このメッセージは実行されない。

 シーケンス式は点(.)で区切られたシーケンス項の並びからなり、末尾にコロン(:)を持つ。シーケンス項は手続きのネストレベルを示す。

 シーケンス項は、整数か並行スレッド名である。必要があれば[条件式]や*[反復条件]をその後に続けることができる。

[例]メッセージラベル
2.3.4 *[ i:=1..n] :evaluatePaper (i )
3[ ReviewPoint>3] :acceptPaper()
2:ReviewPoint:=review ()
A1,B2/ C


NEXT >> 

・連載第1回

・連載第2回

・連載第3回

・連載第4回

・連載第5回

・連載第6回

・連載第7回

・連載第8回

・連載第9回

・連載第10回

・連載第11回

・連載第12回

・連載第13回

・連載第14回

・連載第15回

・連載第16回

・連載第17回