Download presentation
Presentation is loading. Please wait.
1
47070 オブジェクト指向モデリング [6] 2001年11月13日
2
オブジェクト指向モデリング 前回 静的モデル1 5.1 型の認識 5.2 関連 5.3 属性と操作 5.4 汎化関係
3
型の認識 型 概念 集合 UoD,文脈,視点 名前を持つ 境界を持つ ユニークであること 静的モデル1 定義 属性 別名でない 属性でない
氏名:String 身長:Real 人 氏名 1..* String 型 概念 名前を持つ 境界を持つ 定義 属性 ユニークであること 別名でない 属性でない 集合 属性か型かは非常に微妙 基本型 UoD,文脈,視点 夏目漱石 島崎藤村 芥川龍之介 人 氏名
4
多重度 インスタンスどうしの対応(リンク)数 関連はリンクの集合 対応の方向 0,1,* 関連の意味 著書 本 メッセージパス 生成 参照
静的モデル1 多重度 インスタンスどうしの対応(リンク)数 対応の方向 0,1,* 関連はリンクの集合 関連の意味 メッセージパス 生成 参照 ナビゲーション 最小値..最大値 著書 本 is a copy of 0..* 1..1 実践ファンクション ポイント法 リファクタリング UMLを使って 1冊め 2冊め 3冊め 本 著書
5
第6回 静的モデル2 6.1 概念レベルでの特殊な表現 6.2 リファクタリング 6.3 オブジェクト図 6.4 関連についての補足
オブジェクト指向モデリング 第6回 静的モデル2 6.1 概念レベルでの特殊な表現 6.2 リファクタリング 6.3 オブジェクト図 6.4 関連についての補足 6.5 型についての補足 6.6 依存性 6.7 パッケージ 6.8 知識レベル テキスト 第5章 テキスト 第6章
6
6.1 概念レベルでの特殊な表現 汎化 顧客 多重分類 動的分類 区画 顧客 完全区画 不完全区画 重要顧客 一般顧客 法人顧客
静的モデル2 6.1 概念レベルでの特殊な表現 顧客 個人 法人 一般 重要 汎化 多重分類 動的分類 区画 完全区画 不完全区画 弁別子 (discriminator) 制約 ステレオタイプ 個人顧客 顧客 重要顧客 一般顧客 法人顧客 <<多重>> <<動的>> 重要度 {完全}
7
6.2 概念レベルでの特殊な表現 汎化の記法 顧客 顧客 重要顧客 一般顧客 法人顧客 重要顧客 一般顧客 法人顧客 静的モデル2 個人顧客
<<多重>> <<動的>> 重要度 {完全} 個人顧客 重要顧客 一般顧客 法人顧客 <<多重>> <<動的>> 重要度 {完全} 顧客
8
6.2 概念レベルでの特殊な表現 開発過程における型モデル モデルの観点 型モデルからクラスモデルへ 概念レベル・・・・・・型モデル
静的モデル2 6.2 概念レベルでの特殊な表現 開発過程における型モデル 型モデルからクラスモデルへ モデルの観点 概念レベル・・・・・・型モデル 多重分類 動的分類 仕様レベル・・・・・・シグニチャ 実装レベル・・・・・・クラスモデル 単一分類 静的分類 顧客 重要法人 重要個人 一般個人 一般法人
9
6.3 リファクタリング リファクタリング クラス構造の再構築 責任の再割付 システム全体の機能を変えない 進化的発展 自動テスト
静的モデル2 6.3 リファクタリング リファクタリング クラス構造の再構築 責任の再割付 システム全体の機能を変えない 自動テスト 進化的発展 最初から理想的な型/クラス構造は作れない 悪構造であることをどう知るか 不吉なにおい コードの重複,長すぎるメソッド,巨大なクラス,多すぎる引数,変更の発散,変更の分散,属性・操作の横恋慕,データの群れ,基本データ型への執着,スイッチ文,パラレル継承,怠け者クラス,疑わしき一般化,一般的属性,メッセージの連鎖,仲介人,不適切な関係,クラスのインタフェース不一致,未熟なクラスライブラリ,データクラス,相続拒否,コメント ボトムアップの段階的改善 実装レベル
10
演習問題 1. クラス名はなぜ単数形? 2. モデルの観点を形式的に判定できるか? 3. ドメイン以外のクラスがあってもよいのはいつ?
静的モデル2 演習問題 1. クラス名はなぜ単数形? 2. モデルの観点を形式的に判定できるか? 3. ドメイン以外のクラスがあってもよいのはいつ? アプリケーション(機能) ドメイン(概念の世界) 永続化 ユーザインタフェース 概念レベル 仕様レベル 実装レベル
11
型図 顧客 商品種類 重要顧客 一般顧客 法人顧客 静的モデル2 個人顧客 注文する 注文対象 注文主 弁別子
(discriminator) 制約 ステレオタイプ 多重度 関連 関連名 型 関連名の方向 ロール 個人顧客 顧客 重要顧客 一般顧客 法人顧客 <<多重>> <<動的>> 重要度 {完全} 商品種類 0..* 注文する 注文主 注文対象
12
6.4 オブジェクト図 インスタンス 静的モデル2 インスタンス名:型名 「著書」型 実践ファンクションポイント法: 著書
リファクタリング UMLを使って 「著書」型 リファクタリング: 著書 UMLを使って: 著書
13
6.4 オブジェクト図 インスタンスのコラボレーション 静的モデル2 型A 型B 型C 型D 型A 型B A1 A2 A3 C1 D1 A
* C D a1:A c1:C d2:D 型A 型B A1 A2 A3 B1 B2 A B * a1:A b1:B b2:B
14
6.4 オブジェクト図 型(クラス)図の理解 静的モデル2 勘定 記入 取引 2..* * a:勘定 b:勘定 c:勘定 1:記入 1:取引
金額 勘定科目名 /残高 取引日 摘要 クレジット 2000円 a:勘定 旅費交通費 8000円 b:勘定 c:勘定 現金預金 50000円 1:記入 1:取引 3000円 つくば 2:記入 -3000円 旅費交通費 11000円 クレジット -5000円 現金預金 45000円 クレジット 0円 1:記入 2:取引 5000円 精算 2:記入 -5000円
15
6.5 関連についての補足 集約 コンポジション(集約) 部分-全体関係 関連名(is a part of)は省略 強い所有
静的モデル2 6.5 関連についての補足 集約 部分-全体関係 関連名(is a part of)は省略 コンポジション(集約) 強い所有 弱いエンティティ(weak entity) 概念レベルでは区別をしない 優等コース 授業科目 1..* 6..* ボード マス 1 9
16
ナビゲーション可能性はいつ決定されるべきか
静的モデル2 6.5 関連についての補足 ナビゲーション可能性(navigability)の明示 双方向 単方向 顧客 注文 1 * 商品 請求先 納入先 演習問題46 ナビゲーション可能性はいつ決定されるべきか
17
6.5 関連についての補足 限定子つき関連(qualified association) 多重度を1にする
静的モデル2 6.5 関連についての補足 限定子つき関連(qualified association) 多重度を1にする 限定子によって一意になるという制約を示す 辞書などによる実装を暗示 ボード マス 位置 1 9 * 行 列 1 ボード マス 1 位置 行:{1,2,3} 列:{1,2,3} Class ボード { public マス getSquareMark(int 行, int 列); : }
18
6.5 関連についての補足 導出関連(derived association) 計算で導き出せる関連 導出型 導出属性 導出ロール 冗長
静的モデル2 6.5 関連についての補足 導出関連(derived association) 計算で導き出せる関連 冗長 理解 導出型 導出属性 導出ロール UML FP 「/」でマーク 「著書」型 1 2 3 会員 本 * is a copy of borrows /borrows 著書 4 「会員」型 「本」型
19
6.5 関連についての補足 関連に対する制約 短縮意味宣言 {xor} {順序} 静的モデル2 { }制約
{ }制約 {xor} {順序} ステレオタイプ <<type>> 制約 {self.noOfStudents > 10} プロパティ {isAbstract = true} 著作 本 0..* {xor} 雑誌 1 インスタンス図を書いてみよう ステレオタイプはモデル要素のもう一つの分類 制約はモデルが正しくあるための条件 プロパティは制約の一種で,タグ付き値で表現 プロセス ライン * {ordered}
20
6.5 関連についての補足 関連に対する制約 オブジェクト図 静的モデル2 プロセス ライン 組織 {階層}がないと
* プロセス ライン * {ordered} 組織 {階層}がないと どんなオブジェクト図が書けるでしょう 切断: プロセス 扉製造: ライン 塗装: 組立: 梱包: ① ② ③ ④ ステレオタイプはモデル要素のもう一つの分類 制約はモデルが正しくあるための条件 プロパティは制約の一種で,タグ付き値で表現
21
6.5 関連についての補足 制約 詳細意味宣言 ノート OCL(Object Constraint Language) 静的モデル2 勘定
記入 2..* 取引 * 借方 貸方 金額 勘定科目名 /残高 取引日 摘要 inv: self.the借方->sum(金額) = self.the貸方->sum(金額)
22
宿題の解答例 6親等までを扱うための型モデルを書いてください 養子縁組はないものとする 離婚,再婚はないものとする 人 静的モデル1
配偶者 兄弟 親 子 兄弟 兄弟 叔父叔母 親 従兄弟 親 配偶者 2 0..1 人 0..1 はとこ * 子 0..* 子 配偶者 従兄弟 * self 子 叔父叔母 * 兄弟 * * * * inv: self.親=self.兄弟.親 and self.親.親->intersection(self.従兄弟.親.親)->notEmpty and self.親.親.親->intersection(self.はとこ.親.親.親)->notEmpty and self.子.親->includes(self, self.配偶者) and self.子.子.親->includes(self.子, self.子.配偶者) and self.子.子.子.親->includes(self.子.子, self.子.子.配偶者) : <<対称>> /兄弟関係 <<対称>> /叔父甥関係 <<対称>> /従兄弟関係 <<対称>> /はとこ関係
23
宿題の解答例 6親等までを扱うための型モデルを書いてください 養子縁組はないものとする 離婚,再婚はないものとする 人 静的モデル1 n n
配偶者 子 親 先 先 先 先 <<対称>> /配偶関係 n n n n-1 n-1 親 配偶者 2 0..1 人 元 0..1 self 子 * 先 1 inv: self.~元(親等関係)->select(p|p.親等数=0).先=self.配偶者 and Integer.allInstances->select(n|0<n<7)->forAll(n | self.~元(親等関係)->select(p|p.親等数=n).先= self.~元(親等関係)->select(p|p.親等数=n-1).先.子) ->union(self.~元(親等関係)->select(p|p.親等数=n-1).先.親) ->union(self.~元(親等関係)->select(p|p.親等数=n).先.配偶者) ) * 1 <<対称>> /親等関係 元 親等数 *
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.