UML Class Diagram の表記

まずはクラス・ダイアグラムからスタート。はじめにすることは、図の意味を確認することから。個人的にはJavaで使うことを前提としているので、Javaとの対応を中心に学習して、細かな部分は後回し。

concrete class 一般的なクラス


上記の四角形がクラスアイコンで、中にはクラス名、属性(attributes)、操作(operations)が書ける。操作には名前の後に()が付いている。一番シンプルな表記はクラス名だけのもの。

属性(attributes)はJavaでのフィールドに相当。
操作(operations)はJavaでのメソッドに相当。

visibility(可視性) 属性と操作に対して種類を指定できる
+ public どこからでもアクセス可能
- private クラス内だけからアクセス可能
# protected クラス内及びサブクラスからアクセス可能

abstract class 抽象クラス


Javaでの抽象クラスをクラス・ダイアグラムでは以下のように表す。表記としてはクラス名がイタリック書体になっているだけ。抽象メソッドもイタリック体で書く。

interface インターフェイス


インターフェイスの表記はステレオタイプ<<>>を使って、クラスの種類を指定する。クラス名の上に<<interface>>と書くことでインターフェイスを指定したことになる。またクラスと違った省略した表記もある。省略した場合、使うpathが変わるので注意が必要。

relationship path クラスの関係を表す線

クラスとクラスは線で結ばれる。線種は実線やら破線やら、矢印などがあるのだが、それぞれ定義があり、さまざまな関係を表現している。これに装飾を加えることで意味をより限定的にすることができる。線の種類も多く、混乱しやすいので整理してみた。
矢印は何かの流れを想像してしまいがちだが、クラス・ダイアグラムにおいては、そうでもないので混乱しやすい。そのときはソースコードを考えると理解できる。仕組みとしては、あるクラスが他のクラスを認識(使っている)している場合、そのクラスを指すことになる。例えばスーパークラスを継承してサブクラスを作った場合は、サブクラスがスーパークラスを認識している関係であり、矢印はサブからスーパーを指す。スーパークラス側からはコード上、サブクラスを認識していない。

association 関連

幅広い関連を意味する。詳細が分からない初期段階で利用する。意味を狭めたいときは、文字による装飾などをするか、下記のpathへ変更していく。

generalization 汎化 (継承)

スーパークラスとサブクラスの関係。一般的にinheritanceに相当。Javaではextends。厳密には違いがあるらしい。

realization 実現
interfaceの実装。Javaでは implements を意味する。

dependency 依存

指しているクラスが変更されると、自らも影響を受ける関係。

aggregation 集約


全体と部分の関係。ひし形が触れているクラスが全体となる。

composition コンポジション


集約関係でより強い結びつきのもの。部分と全体の生存期間が一致。部分の存在が全体にとって欠かせない状態。

navigability 誘導可能性

インスタンス変数を持っている場合の関係。

message メッセージ 相互作用

オブジェクトの間での交換されるメッセージで、操作の名前を書いて使用する。

dashed lines 破線

破線の明確な用途は不明だが、クラス・ダイアグラムにおいてはコメント用のノートを書くときに引き出し線として利用したり、関係に介在するようなときに使われている。シーケンス・ダイアグラムにおいては生存線として利用されている。

これ以外に装飾方法がいくつかあるが、実際にクラス間の関係を作りながら確認していこうと思う。

UML 目次