オブジェクト指向モデリング [6]

23
オオオオオオオオオオオオオ [6] 2001 オ 11 オ 13 オ 47070

Upload: lars

Post on 05-Jan-2016

27 views

Category:

Documents


0 download

DESCRIPTION

47070. オブジェクト指向モデリング [6]. 2001 年 11 月 13 日. オブジェクト指向モデリング. 前回 静的モデル 1. 5.1 型の認識 5.2 関連 5.3 属性と操作 5.4 汎化関係. 人. 氏名: String 身長: Real. 人. 氏名. 氏名: String. 1..*. 人. String. 氏名. 1..*. 夏目漱石. 島崎藤村. 芥川龍之介. 氏名. 人. 静的モデル 1. 型の認識. 型 概念 名前を持つ 境界を持つ 定義 属性 ユニークであること 別名でない - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: オブジェクト指向モデリング [6]

オブジェクト指向モデリング[6]

2001年 11月 13日

47070

Page 2: オブジェクト指向モデリング [6]

2

前回 静的モデル 1

5.1 型の認識5.2 関連5.3 属性と操作5.4 汎化関係

オブジェクト指向モデリング

Page 3: オブジェクト指向モデリング [6]

3

型の認識 型

概念名前を持つ境界を持つ

定義 属性

ユニークであること 別名でない 属性でない

集合 属性か型かは非常に微妙 基本型

UoD,文脈,視点

静的モデル 1

氏名: String身長: Real

氏名

1..*

人氏名: String氏名

1..*

人 String

夏目漱石

島崎藤村

芥川龍之介

人 氏名

Page 4: オブジェクト指向モデリング [6]

4

多重度 インスタンスどうしの対応(リンク)数

対応の方向 0, 1, *

関連はリンクの集合関連の意味

メッセージパス生成参照ナビゲーション

著書本 is a copy of0..* 1..1

最小値 ..最大値

静的モデル 1

実践ファンクション  ポイント法リファクタリング

UMLを使って

1冊め

2冊め3冊め

本 著書

Page 5: オブジェクト指向モデリング [6]

5

第 6回 静的モデル 2

6.1 概念レベルでの特殊な表現6.2 リファクタリング6.3 オブジェクト図6.4 関連についての補足6.5 型についての補足6.6 依存性6.7 パッケージ6.8 知識レベル

オブジェクト指向モデリング

テキスト 第 6章

テキスト 第 5章

Page 6: オブジェクト指向モデリング [6]

6

6.1 概念レベルでの特殊な表現 汎化

多重分類動的分類区画

完全区画不完全区画

静的モデル 2

顧客 個人

法人

一般 重要

個人顧客顧客

重要顧客 一般顧客

個人顧客

法人顧客<<多重 >><<動的 >>重要度

{完全}

弁別子( discriminator)

制約

ステレオタイプ

Page 7: オブジェクト指向モデリング [6]

7

6.2 概念レベルでの特殊な表現 汎化の記法

静的モデル 2

個人顧客顧客

重要顧客 一般顧客

個人顧客

法人顧客<<多重 >><<動的 >>重要度

{完全}

個人顧客

重要顧客 一般顧客

個人顧客

法人顧客<<多重 >><<動的 >>

重要度

{完全}

顧客

Page 8: オブジェクト指向モデリング [6]

8

6.2 概念レベルでの特殊な表現 開発過程における型モデル

型モデルからクラスモデルへ モデルの観点

概念レベル 型モデル・・・・・・多重分類動的分類

仕様レベル シグニチャ・・・・・・実装レベル クラスモデル・・・・・・

単一分類静的分類

静的モデル 2

顧客

重要法人 重要個人 一般個人一般法人

Page 9: オブジェクト指向モデリング [6]

9

6.3 リファクタリング リファクタリング

クラス構造の再構築責任の再割付システム全体の機能を変えない

自動テスト進化的発展

最初から理想的な型/クラス構造は作れない 悪構造であることをどう知るか不吉なにおい コードの重複,長すぎるメソッド,巨大なクラス,多すぎる引数,変更の発散,変更の分散,属性・操作の横恋慕,データの群れ,基本データ型への執着,スイッチ文,パラレル継承,怠け者クラス,疑わしき一般化,一般的属性,メッセージの連鎖,仲介人,不適切な関係,クラスのインタフェース不一致,未熟なクラスライブラリ,データクラス,相続拒否,コメント

ボトムアップの段階的改善

静的モデル 2

実装レベル

Page 10: オブジェクト指向モデリング [6]

10

演習問題 1. クラス名はなぜ単数形? 2. モデルの観点を形式的に判定できるか? 3. ドメイン以外のクラスがあってもよいのはいつ?

静的モデル 2

アプリケーション(機能)

ドメイン(概念の世界)

永続化

ユーザインタフェース概念レベル仕様レベル実装レベル

Page 11: オブジェクト指向モデリング [6]

11

型図

静的モデル 2

個人顧客顧客

重要顧客 一般顧客

個人顧客

法人顧客<<多重 >><<動的 >>重要度

{完全}

商品種類 0..*0..* 注文する

注文主注文対象

弁別子( discriminator)

制約

ステレオタイプ

多重度

関連

関連名型

関連名の方向

ロール

Page 12: オブジェクト指向モデリング [6]

12

6.4 オブジェクト図 インスタンス

静的モデル 2

インスタンス名:型名

実践ファンクションポイント法 : 著書

実践ファンクションポイント法

リファクタリング

UMLを使って「著書」型

リファクタリング : 著書

UMLを使って : 著書

Page 13: オブジェクト指向モデリング [6]

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

Page 14: オブジェクト指向モデリング [6]

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 円

Page 15: オブジェクト指向モデリング [6]

15

6.5 関連についての補足 集約

集約 部分-全体関係関連名( is a part of)は省略

コンポジション(集約) 強い所有 弱いエンティティ( weak entity)

静的モデル 2

優等コース 授業科目1..* 6..*

ボード マス1 9

概念レベルでは区別をしない

Page 16: オブジェクト指向モデリング [6]

16

6.5 関連についての補足 ナビゲーション可能性( navigability)の明示

双方向単方向

静的モデル 2

顧客 注文1*

商品* 1

1*

請求先

納入先

顧客 注文1*

商品*1

1*

請求先

納入先

演習問題 46ナビゲーション可能性はいつ決定されるべきか

Page 17: オブジェクト指向モデリング [6]

17

6.5 関連についての補足 限定子つき関連( qualified association)

多重度を 1にする 限定子によって一意になるという制約を示す 辞書などによる実装を暗示

静的モデル 2

ボード マス1 9

ボード マス1

1位置

行: {1,2,3}列: {1,2,3}

位置* 行

Class ボード { public マス getSquareMark(int 行 , int 列 ); :}

Page 18: オブジェクト指向モデリング [6]

18

6.5 関連についての補足 導出関連( derived association)

計算で導き出せる関連 冗長理解

導出型 導出属性 導出ロール

静的モデル 2

会員 本

*

*

*

is a copy of

borrows

/borrows

著書

「会員」型 「本」型

2

1

3

4

「著書」型

FP

UML

「 / 」でマーク

Page 19: オブジェクト指向モデリング [6]

19

6.5 関連についての補足 関連に対する制約

短縮意味宣言 { }制約{ xor}{順序}

静的モデル 2

プロセスライン*

{ ordered}

インスタンス図を書いてみよう

著作本 0..*

{ xor}

雑誌

0..*

1

1

ステレオタイプ  <<type>>制約 { self.noOfStudents > 10}プロパティ   {isAbstract = true}

Page 20: オブジェクト指向モデリング [6]

20

6.5 関連についての補足 関連に対する制約

オブジェクト図

静的モデル 2

プロセスライン*

{ ordered}

切断:プロセス

扉製造:ライン

塗装:プロセス

組立:プロセス

梱包:プロセス

組織

*

{階層}

{階層}がないとどんなオブジェクト図が書けるで

しょう

Page 21: オブジェクト指向モデリング [6]

21

6.5 関連についての補足 制約

詳細意味宣言 ノート OCL( Object Constraint Language)

静的モデル 2

勘定 記入 2..* 取引*

借方 貸方

金額勘定科目名/ 残高

取引日摘要

inv:  self.the 借方 ->sum( 金額 )  = self.the 貸方 ->sum( 金額 )

Page 22: オブジェクト指向モデリング [6]

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

親 子親

兄弟

Page 23: オブジェクト指向モデリング [6]

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