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