クラス図はUMLの基本となる図のひとつで、システムを構成するクラスとそれらの関係を表現します。また、各クラスが保持する属性(プロパティ)や操作(メソッド)も表現します。
クラス図は次の要素で構成されます。
クラス名を記述します。抽象クラスの場合はイタリックで記述します。
パッケージ:クラス名
※パッケージは省略可能
また、クラス種別(ステレオタイプ)を表示するには、<<ステレオタイプ>>の形式でクラス名の上部に記述します。
例 : <<interface>>
属性は次の形式で記述します。
可視性 名前 : 型 = 初期値 { 制約条件 }
※名前以外は省略可能
可視性 | 意味 |
+ | public : 全てにおいて参照可能 |
- | private : 自クラスでのみ参照可能 |
# | protected : 自クラス及びその派生クラスにおいて参照可能 |
~ | package : 同パッケージ内で参照可能 |
操作は次の形式で記述します。
可視性 名前 ( 引数の名前 : 引数の型 ) : 戻り値の型
※名前以外は省略可能
※「属性」及び「操作」に下線が引かれると、static を表します。
■ソース(Java)
public class Sample { private static String staticField = null; private String instanceField = null; public Sample() { staticField = "static"; this.instanceField = "instance"; } public static String getStaticField(){ return staticField; } public String getInstanceField(){ return this.instanceField; } }
■クラス図
下記線形を使用することでクラス間の関係を表現する事が出来ます。
関係 | 線形 |
関連(association) | |
集約(aggregation) | |
コンポジション(composition) | |
依存(dependency) | |
汎化(generalization) | |
実現(realization) |
関連(集約、コンポジションを含む)の端に数値を書く事で関係する数を表現する事が出来ます。
表記 | 意味 |
1 | 1個 |
'0..n' or '*' | 0以上 |
1..n | 1以上 |
2..5 | 2から5 |
クラス間で結びつきがある場合、関連で表現する事ができます。
集約は関連の一種でオブジェクトが複数集まって全体を構成する関係です。双方のオブジェクト間に「全体-部分」の関係が成り立っているときに用いられます。
コンポジションは関連の一種で集約よりも結びつきが強い場合、例えば「全体-部分」において双方が存在して初めて成り立つような関係のとき用いられます。
依存は、相手の状態、若しくはイベントに対して影響を受ける関係のとき用いる表現です。
Javaなどの継承、つまり「is a」の関係を表現します。
Javaでいうinterfaceと同等の意味で、相手を具象化する関係のとき用いる表現です。