クラス図(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..* 質問
© Copyright 2024 ExpyDoc