クラス図(1)

クラス図(1)
FM12013 山口 亨
クラスとは
• 現実に存在する“物体”(オブジェクト)の構造
や振る舞いなどに着目して注目し抽象化した
もの
• クラス図を含むUMLのほとんどの図で使用さ
れている
クラスの表記
<<ステレオタイプ>>
クラス名
クラス名
(ステレオタイプは任意)
属性1
属性2
属性3
属性のリスト
操作1()
操作2()
操作のリスト
属性
• クラス内の、知識的な情報
• 属性名以外は省略可能で、以下の形式で記述
可視性
属性名
:
型表現
=
初期値
ー
勤続年数
:
int
=
1
従業員
勤続年数
氏名
年齢
属性名のみ表示
従業員
ー勤続年数:int=1
ー氏名:String
ー年齢:int
属性名、可視性、型、初期値を表示
操作
• クラス内の振る舞い情報
• 操作名以外は省略可能で、以下のように記述
可視性
操作名
(引数名
:
引数の型)
:
戻り値
+
商品名設定
(商品名
:
String)
:
void
商品
商品
商品名取得()
商品名設定()
+商品名取得():String
+商品名設定(商品名:String):void
操作名のみ表示
可視性、操作名、引数名、引数の型
戻り値の型の表示
クラス表記のバリエーション
• クラスの表記は、クラス名以外は省略可能
商品
ー商品名
ー価格
商品
商品名取得()
商品名設定()
商品名取得()
商品名設定()
属性、操作名を表示
属性非表示
商品
ー商品名
ー価格
操作非表示
商品
属性、操作非表示
クラス表記のバリエーション
• 表示規則に適合するもののみを表示すること
ができる
商品
ー商品名
…
商品名取得()
商品名設定()
省略表記
可視性
• 属性・操作に対して設定する、他クラスからの
参照できる度合い
• 以下の値が設定できる
記号
名称
参照度合
+
public
すべてから
ー
private
自分からのみ
#
protected
自分とサブクラスからのみ
~
package
自分と同パッケージ内のクラスからのみ
可視性の表示
Class3
Class1
+操作1()
#操作2()
ー操作3()
~操作4()
Class2
Class4
クラス図の関係その1
• より良い構造化を行うには、他のクラスとの
関係性を表現する必要がある
• UMLでは、関連(集約)、依存(実現)、汎化、
フローを総称して関係と呼ぶ
関連
• クラス間に構造的な関係がある場合に使用
受験生
志望校である
大学
役割(ロール)名
• あるクラスが他のクラスから見た時に、どの
様な役割を持つか示すのに使用
役割(ロール)名
受験生
受験者
志望校
大学
勤務先
教授
多重度
• 他のクラスから接続される可能性のある関係
の数を記述
• 以下のように表記
クラスA
1
0..*
クラスA
多重度
• 多重度にはこのような表記が可能
表記
接続される可能性のある数
0..1
0か1
1
1 のみ
0..* または *
0 以上
1..*
1 以上
3..10
3~10
多重度(例)
受験生A
甲大学
受験生B
乙大学
受験生C
丙大学
多重度(例)
受験生
大学
志望校である
0..*
1..*
関連の方向
• 関連の棒線に矢印をつける事で、参照の方
向を指定する事が出来る
• UML1.XとUML2.Xでは、指定方法が違う
関連の方向
Object1:Class1
Object2:Class2
Message1()
Object3:Class3
Object4:Class4
Message3()
Message2()
双方向の呼び出し
片方向の呼び出し
関連の方向
Class1
Class2
双方向の関連(UML 1.X)
Class1
Class2
双方向の関連(UML 2.X)
Class1
Class2
片方向の関連(UML 1.X)
Class1
Class2
片方向の関連(UML 2.X)
UML1.Xの方向表記
A
A
B
AからBへの方向性の指定がある
BからAへの方向性の指定がある
B
AからBへの方向性の指定がある
BからAへの方向性はなし
UML2.Xの方向表記
A
A
A
A
A
B
AからBへの方向性は未定義
BからAへの方向性は未定義
B
AからBへの方向性の指定がある
BからAへの方向性は未定義
B
AからBへの方向性の指定がある
BからAへの方向性の指定がある
B
AからBへの方向性の指定がある
BからAへの方向性はなし
B
AからBへの方向性はなし
BからAへの方向性はなし
複数の関係
• 同一クラス間でも、異なる関連があれば、そ
れぞれ複数の関連を引ける
受験生
第1志望である
第2志望である
大学
クラス図の関係その2
• 次は、集約、依存関係、汎化、抽象クラスに
ついて説明します
集約
• あるクラスに対して、その一部を構成している
クラスを表す時に使用
会員リスト
会員
ー会員ID
依存関係
• 2つのモデル要素間の利用関係を表現
• 依存関係は以下の3つの場合に使用
1.引数で参照する場合
2.ローカル変数として参照する場合
3.グローバルに参照する場合
引数で参照する場合
• クラスAの操作で引数の型にクラスBを使って
いる場合
• クラスAの操作の戻り値型にクラスBを使って
いる場合
クラスA
+操作1(引数1:クラスB)
クラスB
ローカル変数として参照する場合
• クラスA内のローカル変数として、クラスBが宣
言されている場合
クラスA
+操作1()
クラスB
グローバルに参照する場合
• クラスAの操作から、グローバルに宣言されて
いるクラスBを参照している場合
クラスA
クラスB
+操作1()
+操作2()
汎化
• 一般的な要素(スーパークラス)と特定化され
た要素(サブクラス)の関係を表現する手法
• 複数のサブクラスがある場合、”シェアード・
ターゲット・スタイル”と”セパレート・ターゲッ
ト・スタイル”の2種類の表記がある
汎化の表記
スーパー
サブ1
サブ2
スーパー
・・・
シェアード・ターゲット・スタイル
サブ1
サブ2
・・・
セパレート・ターゲット・スタイル
汎化の例
学校
義務教育学校
小学校
任意教育学校
中学校
高校
大学
コラム(単一継承、多重継承)
国
動物
飛行物
日本
鳥
単一継承
多重継承
衝突の例
動物
飛行物
サイズ
サイズ
鳥
多重継承により、サイズ属性が
重複する
抽象クラス
• オブジェクトを1つも持つことが無いクラス
• サブクラスをまとめる意味で作成され、必ず
サブクラスを持つ
抽象クラスの表記
動物
{abstract}
猫
犬
馬
猿
問題
• 同一パッケージ内から参照できる操作を持っ
ているクラスは次のうちどれ?
クラスA
クラスB
クラスC
クラスD
+操作1()
ー操作2()
~操作3()
#操作4()
問題
• 関連名と役割名(関連端名)は?
人
利用客
売買関係
お店
コンビニ
問題
• この場合の多重度は?
人
家
0..*
1..*
質問