UML Class Diagram の表記
まずはクラス・ダイアグラムからスタート。はじめにすることは、図の意味を確認することから。個人的にはJavaで使うことを前提としているので、Javaとの対応を中心に学習して、細かな部分は後回し。
上記の四角形がクラスアイコンで、中にはクラス名、属性(attributes)、操作(operations)が書ける。操作には名前の後に()が付いている。一番シンプルな表記はクラス名だけのもの。
属性(attributes)はJavaでのフィールドに相当。
操作(operations)はJavaでのメソッドに相当。
visibility(可視性) 属性と操作に対して種類を指定できる
+ public どこからでもアクセス可能
- private クラス内だけからアクセス可能
# protected クラス内及びサブクラスからアクセス可能
Javaでの抽象クラスをクラス・ダイアグラムでは以下のように表す。表記としてはクラス名がイタリック書体になっているだけ。抽象メソッドもイタリック体で書く。
インターフェイスの表記はステレオタイプ<<>>を使って、クラスの種類を指定する。クラス名の上に<<interface>>と書くことでインターフェイスを指定したことになる。またクラスと違った省略した表記もある。省略した場合、使うpathが変わるので注意が必要。
矢印は何かの流れを想像してしまいがちだが、クラス・ダイアグラムにおいては、そうでもないので混乱しやすい。そのときはソースコードを考えると理解できる。仕組みとしては、あるクラスが他のクラスを認識(使っている)している場合、そのクラスを指すことになる。例えばスーパークラスを継承してサブクラスを作った場合は、サブクラスがスーパークラスを認識している関係であり、矢印はサブからスーパーを指す。スーパークラス側からはコード上、サブクラスを認識していない。
association 関連
幅広い関連を意味する。詳細が分からない初期段階で利用する。意味を狭めたいときは、文字による装飾などをするか、下記のpathへ変更していく。
generalization 汎化 (継承)
スーパークラスとサブクラスの関係。一般的にinheritanceに相当。Javaではextends。厳密には違いがあるらしい。
realization 実現
interfaceの実装。Javaでは implements を意味する。
dependency 依存
指しているクラスが変更されると、自らも影響を受ける関係。
aggregation 集約
全体と部分の関係。ひし形が触れているクラスが全体となる。
composition コンポジション
集約関係でより強い結びつきのもの。部分と全体の生存期間が一致。部分の存在が全体にとって欠かせない状態。
navigability 誘導可能性
インスタンス変数を持っている場合の関係。
message メッセージ 相互作用
オブジェクトの間での交換されるメッセージで、操作の名前を書いて使用する。
dashed lines 破線
破線の明確な用途は不明だが、クラス・ダイアグラムにおいてはコメント用のノートを書くときに引き出し線として利用したり、関係に介在するようなときに使われている。シーケンス・ダイアグラムにおいては生存線として利用されている。
これ以外に装飾方法がいくつかあるが、実際にクラス間の関係を作りながら確認していこうと思う。
UML 目次
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 目次