UMLのクラス図では、クラスをクラスアイコンで表現します。次にクラスアイコンの書式を示します。
<<ステレオタイプ>>
パッケージ::クラス {プロパティリスト} |
可視性 属性:型 = 初期値 |
可視性 操作(引数名:引数の型, ...):戻り値の型 |
クラスアイコンは名前区画、属性区画、操作区画の3つの区画(コンパートメント)に分かれている。属性区画と操作区画は省略することができる。
クラス名およびパッケージ名は太文字で表記します。抽象(アブストラクト)クラスやオペレーションは斜体(イタリック)で表記します。
ステレオタイプには以下のようなものがあります。
ステレオタイプ | 意味 |
---|---|
interface | インタフェース |
プロパティリストには次のようなものがあります。
プロパティリスト | 意味 |
---|---|
abstract | 抽象クラス |
可視性(visibility)には次のいずれかの記号を使用する。
記号 | Javaの修飾子 | 意味 |
---|---|---|
+ | public | すべてのクラスからアクセス可能 |
# | protected | サブクラスまたは同一パッケージのクラスからのみアクセス可能 |
~ | 指定なし | 同一パッケージのクラスからのみアクセス可能 |
- | private | そのクラス自身からのみアクセス可能 |
static属性は下線を引く。
抽象操作は斜体で表わす。static操作は下線を引く。
Javaのソースプログラムと、UMLにおけるクラス図の例を次に示す。
class HelloWorld {
private static final String MESSAGE = "Hello world!";
public static void main(String[] args) {
System.out.println(MESSAGE);
}
}
HelloWorld |
-MESSAGE:String = "Hello world!" |
+main(args:String[]):void |
汎化はクラス間で属性や操作、関連を引き継ぐ。これは、JavaやC++の継承に相当する。UMLでは、実線に三角形を付けた矢印で表す。矢印の向きは、継承先から継承元への方向である。
Javaのソースコードで表すと、次のようになる。
class SubClass extends SuperClass {
// things to do
}
実装又は実現は操作のインタフェースを引き継ぐ。これは、Javaのインタフェース実装に相当する。UMLでは、破線に三角形を付けた矢印で表す。矢印の向きは、継承先から継承元への方向である。
Javaのソースコードで表すと、次のようになる。
class ImplementClass implements Interface {
// things to do
}
依存は、あるモデル要素が他のモデル要素を必要としている関係を表している。依存関係には、意味的なものと構造的なものとがある。相手の変更によって影響を受ける関係であり、引数などで一時的に使用するクラスや、イベント通知などを表現するときに使用する。
集約は関連の一種で、「全体-一部(has-a)」関係を表す。UMLでは、集約は実線で表し、「全体」側の終端に白抜きの菱形を付ける。
コンポジションは関連の一種で、より強い集約を表す。「全体」側オブジェクトが消滅する際に、「一部」側オブジェクトも消滅する。また、一度作られた関連は変化しない。UMLでは、集約は実線で表し、「全体」側の終端に黒塗りの菱形を付ける。
クラス間に、参照や実態の保持などの関係があることを表す。線の両端に矢印を付けることができ、矢印がある場合は、その方向のみに関連があることを表す。これを誘導可能性 (navigability) と言い、矢印の無い関連は、誘導可能性が未知であるか、双方向であることを意味する。
関連の端に書かれる、関連先の役割を表す名前である。
関連の端に書かれ、関連の限られたオブジェクト間の数的関係を表す。具体的な数の他に、"0...n" や "*"(共に0以上)、"1...n"(1以上)、"2...4"(2から4)のように任意の数を設定できる。
記号 | 説明 |
---|---|
* | 上限なし |
ordered | 順序付けができる/順序付けが存在する |
unordered | 順序付けができない/順序付けが存在しない(デフォルト) |
unique | ユニークである(デフォルト) |
nonunique | ユニークでない |
多重度の書き方の例を以下に示す。
CustomerはひとつのPurchaseを持つ。順序はなく、ユニークである。
Customerは0またはひとつ以上のPurchaseを持つ。順序はなく、ユニークである。
Customerは0またはひとつのPurchaseを持つ。順序はなく、ユニークである。
Customerはひとつ以上のPurchaseを持つ。順序があり、ユニークである。
Customerは3つから5つのPurchaseを持つ。順序があり、ユニークでない。
制約(Constraint)は、条件または制限である。
{ constraint }
日本語又は擬似プログラム言語で制約を記述する。
Queueクラスの属性sizeは0以上であるという制約をUMLで記述する例を示す。
Customerクラスは、PersonクラスあるいはCorporationクラスのどちらか一方だけと関連を持つという制約をUMLで記述する例を示す。
OMG (2017) OMG Unified Modeling Language