連載第6-1回
UMLの基礎と応用
(株)NTTデータ 技術開発本部 副本部長
山本修一郎
■■クラス図■■
クラス図(Class diagram)は対象領域やシステムの静的な構造を表すための図である[1][2][3][4]。クラス図ではクラスの属性や操作とクラス間の関連を記述する。オブジェクト図(Object diagram)ではクラスのインスタンスとしてのオブジェクトについて、属性、操作および関連に関する静的な構造を記述する。オブジェクト図はシステムのある時点におけるオブジェクト間の関係を示していると考えることができる。
以下では、UML1.4に基づいてクラス図の構成要素をまず説明し、次いで適用工程や記述例を示し、シーケンス図との関係などについて考えてみよう。
■クラス図の構成要素[4]
(1)クラスとオブジェクト
UMLでは矩形でクラスを表す。これはRumboughらのOMTから引き継いだ表記法である[5]。後述するクラス間の関係の表記法もOMTから引き継いでいる。またUMLではクラスを表す矩形には、クラス名、属性、操作に対応する3つの基本的な区画がある。クラス名区画、属性区画、操作区画がクラスを表す矩形の上から下に配置される。これもまたOMTと同じである。
UMLではオブジェクトもクラスと同じ矩形で表す。UMLのクラス図ではクラス名に下線を付けない。これに対してオブジェクト図ではオブジェクト名に下線を付ける。OMTではオブジェクトを表す場合、下線ではなく角の丸い矩形を用いていた点がUMLと異なる。
オブジェクト名には次に示すように3種類の記述の仕方がある。
[構文]オブジェクト名
①オブジェクト名:クラス名
②:クラス名
③オブジェクト名
オブジェクト図では、クラスのインスタンスを示すため、次の構文で示すように属性の値を指定する必要がある。
[構文]属性値の指定
属性名=属性値
クラスとオブジェクトの記述例を対比して図1に示す。
図1 クラスとオブジェクト
(2)属性(Attribute)
UMLではクラス名の下に配置される属性区画でクラス属性を指定する。
[構文]クラス属性
可視性 属性名 :型名 = 初期値{プロパティ並び}
ここで、可視性(visibility)では次の記号のいずれかを指定する。可視性記号を指定しない場合は、可視性が定義されていないことを示す。
+公開(Public)クラスの外部からも属性が使用できることを示す
#保護(Protected)クラスのサブクラスからも属性が利用できることを示す
-私用(Private)他のクラスからこの属性を参照できないことを示す
またプロパティ並びでは属性がとり得る値を示す文字列をコンマ記号(,)で区切って並べる。プロパティ並びにより、属性がとりうる値を明示的に指定することができる。プロパティ並びを指定した場合、初期値はプロパティ並びの一つになっている必要がある。
クラスのすべてのオブジェクト間で共有される属性をクラス・スコープ属性という。クラス・スコープ属性を持つ属性は下線を引いて表す。
(3)操作(Operation)
UMLではクラスを表す矩形の一番下に配置される操作区画でクラスに関する操作を指定する。
[構文]操作
可視性 名前 (引数並び):返却値の型名{プロパティ並び}
可視性では、属性と同じ記号を用いることにより、定義された操作をどのクラスで利用できるかを指定する。
引数並びは次の構文で指定される引数をコンマ記号(,)で区切って並べて指定する。
[構文]引数
引数種別 引数名:型名 = 省略時の値
引数種別では、引数の入出力種別を、in,out,inoutで示す。引数種別を省略した場合は入力引数となる。また操作の呼び出し元が引数を省略した時に用いられる値を省略時の値として指定することができる。
(4)関連(Association)
クラスに対応する矩形を線分で互いに結合することによりクラス間に関係があることを表現できる。互いのクラスのインスタンス間に関係があることを示す。関連には2項関係と3項以上の多項関係がある。2項関係には自分自身との関連も含めている。自分自身との関連は再帰的関連(recursive
association)とも呼ばれる。2項関係は実線で示す。多項関係は菱形で示し、関連する各クラスを菱形と実線で接続する。
・関連名
関連に対して名前をつけることができる。関連名には黒い三角記号を名前の前または後ろにつけることにより関連する2つのクラスの名前を読む方向を示すことができる。たとえば、関連名の後に三角記号が付けられた場合は左のクラス名を主語とし右のクラス名を目的語として関連名を読む。逆に関連名の前に三角記号があれば右のクラス名を主語とし左のクラス名を目的語として関連名を読む。たとえば、顧客が自動車を所有するという場合と、自動車が顧客によって所有されるという2つの場合を考えよう。顧客と自動車がクラスである。前者の関係を示す場合は、関連「所有する」の後に黒三角をつける。これに対して、後者の場合には、「所有される」の前に黒三角をつける。
・役割名と多重度
関連を表す実線がクラスに接する点(association end)に役割名(rolename)と多重度(multiplicity)をつけることができる。UMLではクラス間の関連に関する意味を役割名で表すことができる。また多重度により、クラス間の関連に対するオブジェクトの個数を示すことができる。
多重度では次のような範囲を指定することができる。コンマ記号で区切ることにより複数の範囲を用いた多重度を表現することもできる。
[構文]範囲
下限値..上限値
ここで下限値と上限値は0以上の整数値である。上限値には任意数を表す記号(*)も使える。とくに範囲として記号*だけを指定した場合、0..*とみなす。多重度を指定しなければ、1であるとみなす。
・誘導可能性(navigability)
あるクラスが関連する他のクラスのインスタンスを検索できる情報を属性として持つとき、関連が誘導可能(navigable)であるという。検索される側のクラスと関連を示す実線が接する点を矢印で示すことにより、誘導可能な関連を表す。クラスの実装では誘導可能な関連を一方のクラスから他方のクラスへのポインタなどで実現できる