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