オブジェクト指向概論 第8回 UMLの基本(2) 立命館大学 情報理工学部 黄 宏軒 1 今回のテーマ クラス図の書き方(の詳細) n なぜクラス図が大事か n クラス図はモデル化の基本 q オブジェクトのモデル q すべてのフェーズを通して使用する q 2 8.1 クラスの表示 ≪キーワード≫ クラス名 パッケージ名::クラス名 {要素プロパティ} 可視性 属性名:型=初期値 ・・・ 可視性 操作名(パラメータ名:パラメータ型…):返却値型 ・・・ (例) 属性(attribute) のリスト(省略可) 操作(operation) のリスト(省略可) 従業員 # 氏名: String - 住所: String + 住所設定(address:String) + 氏名取得( ): String + 住所取得( ): String 3 クラス表示のバリエーション 簡略形 一般形 詳細形 従業員 従業員 従業員 氏名 住所 ) 住所設定( 氏名取得( ) 住所取得( ) # 氏名: String - 住所: String + 住所設定(address: String) + 氏名取得( ): String + 住所取得( ): String 4 属性(attribute)の表示 可視性 属性名:型 = 初期値 - q 氏名:String = 立命太郎 可視性:属性,操作の公開/非公開 +public -private #protected ~package すべてから参照可能 自分からのみ参照可能 自分とその子孫(サブクラス)からのみ 参照可能 自分と同一パッケージ内のクラスからのみ 参照可能 5 操作(operation)の表示 可視性 操作名 (パラメータ名:型=初期値…) : 返却値型 + 氏名取得 (氏名コード : int = 0 ) : String 6 スコープ n インスタンススコープ q q n 個々のオブジェクトで値が異なる属性 個々のオブジェクトに対する操作 クラススコープ (静的な(static)属性/操作) q q あるクラスのすべてのインスタンスで共通の値を持つ属性 クラスに対して呼び出す操作 タクシークラス 運転手=田中さん 運転手=鈴木さん 定員=4名 運転手=山田さん 7 クラススコープの表示 n クラススコープにはアンダーラインをつける タクシー 定員 運転手 生成( ) 配車( ) 8 8.2 クラス間の関係 n 関係(relationship) 関連(association) 集約(aggregation) 弱い集約 強い集約(composition) その他の関連 汎化(generalization)≒継承関係 実現(realization) 依存(dependency) 9 関係の分類 関係(Relationship) 関連(Association) 汎化関係 (Generalization) 集約(Aggregation) 実現 (Realization) 依存 (Dependency) 10 関係(relationship)の表示 n 関連:association 集約:aggregation q 合成集約:composition q 汎化:generalization n 実現:realization n 依存:dependency n 11 8.2.1 関連(association)の表示 n オブジェクトとオブジェクトの関係 学生 受講する 衣笠二郎 科目 オブジェクト指向概論 立命太郎 人工知能 山田花子 データベース 鈴木一郎 学生 姓名 学年 ・・・ 関連名 受講する▶ 関連 科目 名称 単位数 ・・・ 12 ナビゲーション(誘導)可能性 ナビゲーション可能性:ソースのインスタンスがタ ーゲットのインスタンスにメッセージを送れるかどう か =ターゲットのオブジェクト識別子(ID)を知っている 学生 科目 かどうか n 一方向の場合 姓名 学年 ・・・ 受講する▶ 学生 双方向の場合 姓名 学年 ・・・ 名称 単位数 ・・・ 科目 受講する▶ 名称 単位数 ・・・ 13 関連端 n 関連端:関連先の特徴,役割(ロール) q ソースのクラスのプロパティ 関連端名 学生 姓名 学年 ・・・ 科目 受講する▶ 受講登録 名称 単位数 0..1 ・・・ 多重度 14 多重度 n 一方のクラスのインスタンスから見て,相手のクラスのインス タンスがつながる個数を,相手のクラスにつながる線の先に 書く 属する研究室は1つだけ AI研 中田 中村 稲本 0人からN人の 可能性 ・・・ 学生 0..* 1 研究室 15 多重度の表示 多重度 1 * 0..1 0..* 1..* 0..整数 整数..整数 意味 厳密に1 0以上 0 or 1 0以上 1以上 0から整数まで(例:0..4) 範囲指定(例:2..5) 16 再帰関連 上司 (上司の) 1 上司 1..* 上司 1 1..* 1 1..* 部下 部下 1 1..* (部下の) 部下 1..* 部下 再帰関連 1 上司 社員 17 複数の関連 1 契約者 契約 * * * 1 被保険者 1 受取人 契約 * 契約者 * * 被保険者 人 受取人 18 8.2.2 集約の表示 n 集約(aggregation):全体と部分の関係 クラス る す ◀構成 1 1 1 先生 1..* 生徒 先生 1 クラス 1 1 1..* 生徒 19 合成集約の表示 n 合成集約(composition):インスタンスが同 時に生成・削除される集約関係 請求書 ◀構成する 請求明細 1 * 請求書 1 請求明細 * 20 8.2.3 汎化関係の表示 n 汎化(generalization)と特化(specialization) 生物 汎化 動物 哺乳類 特化 猫 犬 シャム猫三毛猫 コリー ブルドッグ 21 汎化の表示 哺乳類 犬 猫 シャム猫 三毛猫 ブルドック コリー 22 汎化セット 会員 有料会員 無料会員 男性会員 女性会員 会員 汎化セット名 会費有無 性別 有料会員 男性会員 無料会員 女性会員 23 汎化に関する注意 n 概念レベルでの汎化:集合の包含関係 n 実装レベルでの汎化:継承関係 24 抽象クラスの表示 n 抽象クラス:自分自身ではインスタンスを持たず,継 承されることを前提として定義されるクラス q q インスタンスを作成できない 抽象メソッド(オーバーライドされることを前提としたメソッ ド)を定義できる 図形クラス 三角形クラス 四角形クラス 円形クラス 25 抽象クラスの表示 抽象クラスはクラス 名をイタリックに AbstractPerson AbstractPerson イタリックのメソッドは抽 象メソッド (サブクラスで必ず実装 しなくてはならない) name address setAddress( ) getName( ) getIncome( ) AbstractPerson # name: String - address: String + setAddress(address:String) + getName( ): String + getIncome( ): Int 26 8.2.4 実現(realization)の表示 n インタフェース コピー機 コピー機として の使い方 コピー機 インタフェース FAX FAXとして の使い方 FAX インタフェース プリンタとして の使い方 プリンタ インタフェース プリンタ 複合型コピー機 27 インタフェースの表示 インタフェースには ≪interface≫をつける (”I”ではじめる) ≪interface≫ IPerson ≪interface≫ ≪interface≫ IPerson IPerson setAddress( ) getName( ) getAddress( ) getIncome( ) インタフェースには メソッドの定義のみ (実装はない) + setAddress(address: String) + getName( ): String + getAddress( ): String + getIncome( ): Int 28 実現の表示 n インタフェースと,このインタフェースを実装したクラ スとの間の関係 ≪interface≫ IPrinter IPrinter インタフェース の簡略表現 実現 MultifuncPrinter MultifuncPrinter 29 8.2.5 依存の表示 n 依存(dependency):クラス間の利用関係 会社 雇う▶ 社員 依存 30 8.3 関連のオブジェクト化 n n 関連に属性を持たせたくなることがある 例:「学生」と「科目」の関係 q q 「受講する」という“関連”が存在する 「受講する」自体にもいろいろな情報を保持しておく必要が ある n 出席数,試験点数,最終評価,etc. 学生 10..400 受講する▶ 10..30 科目 31 関連クラス n 関連に属性を持たせるためのクラス 学生 氏名 学生証番号 回生 ・・・ 科目 10..400 受講する 出席数 試験点数 最終評価 ・・・ 科目コード 10..30 科目名 担当教員 授業時間 教室 ・・・ 関連クラス 32 関連クラスの実装 n 関連の実装 q クラスの属性として相手のクラスを定義 // 学生クラス Student public class Student { private Lecture lec ; lect = obj; //lectにオブジェクトをセット } } n 関連クラスの実装 片方のクラスの属性に紛れ込ませる q 普通のクラスにする q 33 広義の関連クラス n 関連クラスを普通のクラスとして定義 (「もの-こと-もの」の構造) 学生 1 10..30 受講 動詞から 名詞に 10..400 1 科目 広義の 関連クラス 34
© Copyright 2024 ExpyDoc