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

36
オオオオオオオオオオオオオ [11] 2003 オ 12 オ 16 オ

Upload: xuan

Post on 09-Jan-2016

37 views

Category:

Documents


3 download

DESCRIPTION

オブジェクト指向モデリング [11]. 2003 年 12 月 16 日. 10. 状態モデル. 10.2 活動図 ( 6 ). プロセス図の課題 記法(活動図の拡張) 利益の源泉は何か 回転率を上げる(速い,安い,うまい) ムダを出さない(予測型か調整型か) 予測(見込み生産) 実績(調理と販売) 中間製品で在庫するが,カスタマイズしない 価値の移動 物流と金流 付加価値 接客←従業員教育 素材 店舗の立地. 日別の商品別売上げを得る. カテゴリ別の商品別売上げを得る. 日別の利益額を得る. 店長. 調理係. 窓口係. - PowerPoint PPT Presentation

TRANSCRIPT

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

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

2003 年 12 月 16 日

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

2

10.2 活動図( 6 )

プロセス図の課題 記法(活動図の拡張) 利益の源泉は何か

回転率を上げる(速い,安い,うまい) ムダを出さない(予測型か調整型か)

予測(見込み生産) 実績(調理と販売)

中間製品で在庫するが,カスタマイズしない 価値の移動

物流と金流 付加価値

接客←従業員教育 素材

店舗の立地

10. 状態モデル

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

3

11.6 揺さぶり( 1 )

モデルの洗練 変更に強いモデルにする 本質的なモデルを追求する

要求のエスカレーション

11. 静的モデル 4

作り置きがあればそこから出庫する

店長

カテゴリ別の商品別売上げを得る

日別の商品別売上げを得る

調理係商品ごとの調理時刻を記録する

窓口係

日別の利益額を得る

作り置きがあればそこから出庫

する

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

4

11.6 揺さぶり( 16 )

汎化も使って概念を整理

11. 静的モデル 4

商品1 明細商品名

単価原価

数量/ 金額

* 取引日時

*

現物ロット番号/ 賞味期限

*

1

*

1

*

/ 売上/ 売上金額/ 製造原価/ 利益

1日

製造

1

廃棄消費税はどうする

1

販売

{導出}

カテゴリ名称

客タイプ*

1性別年齢層

導出: the/ 売上 . 製造原価は, the 明細 .the 取引とナビゲートして得られる取引オブジェクトの集合のうち,それぞれのサブタイプが「製造」または「廃棄」で,その日時の日が, the/ 売上 . 日と一致するものについて, the 明細 . 数量を合計したものにこの原価を乗じて得る

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

5

シラバス

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

回1

2

3

4

5

6

7

8

9

10

11

12

13

内容オリエンテーション:モデルとは何か。モデリング言語: UML の概要静的モデル 1 :概念とクラス静的モデル 2 :関連静的モデル 3 :オブジェクト図静的モデル 3 :オブジェクト図(続き),モデリング

機能モデル 2 :要求抽出,協調図,シーケンス図,状態モデル:状態図機能モデル 2 :活動図,静的モデル 4 :ユースケースに基づくモデリング静的モデル 4 :モデルの揺さぶり実装レベル:実装モデルとプログラム,モデリング 1 :アナリシスパターン

機能モデル 1 :ユースケース,シナリオ

モデリング 2 :デザインパターン,モデル図の作成,モデルの評価基準モデリング 3 :例題によるモデル図の作成

月日9 月 30 日

10 月 7 日10 月 14 日10 月 21 日10 月 28 日11 月 4 日11 月 11 日11 月 18 日12 月 2 日12 月 9 日12 月 16 日

1 月 13 日1 月 20 日

授業計画

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

6

12. 概念モデルから実装まで12.1 実装作業の概要12.2 ユースケース12.3 ドメイン層の実装12.4 アプリケーション層の実装12.5 ユーザインタフェース層の実装12.6 プログラミング

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

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

7

12.1 実装作業の概要( 1 )

ソフトウエアプロセス フェーズとワークフロー繰り返し

12. 概念モデルから実装まで

方向づけ 推敲 構築 移行

分析設計制作検査

要求

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

8

12.1 実装作業の概要( 2 )

ドメインの実装 機能の実装 アーキテクチャの実装

レイヤー構造役割の分担

12. 概念モデルから実装まで

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

ドメイン(概念の世界)

永続化

ユーザインタフェース

概念レベル

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

ドメイン(概念の世界)

実装レベル

人工物の作り込み

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

9

12.1 実装作業の概要( 3 )

レイヤリングアーキテクチャ 関心の分離 一方向の参照 ドメインを純粋に保つ

12. 概念モデルから実装まで

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

ドメイン(概念の世界)

永続化

ユーザインタフェース M-V-C

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

10

12.2 ユースケース( 1 )

ユースケース記述と現実の世界情報システムとの対話と現実の活動

現実の世界①窓口で客がメニューに基づいて商品を 注文する②受注担当が注文を聞いて,キッチン担 当(調理係)に渡す③客は注文品ができるまで,窓口で待つ④受注担当は,料金を計算し,請求する⑤客は料金を支払う(窓口係は受け取る)⑥客はできあがった商品を受け取る

ユースケースの例ユースケース名:販売を記録するアクタ:窓口係目的:事前条件:その販売実績は記録されていない。基本系列: ①アクタがこのユースケースを起動する。 ②システムは販売した商品,数量,顧客タイプを指示 ③アクタはそれらの値を提示する。 ④システムはそれらの値と日時,担当者を記録する。代替系列:なし。事後条件:その販売実績が記録されている。備考: ①顧客タイプとは,顧客の分類で,性別 × 年齢層  ・・ ②担当者情報は,このユースケース起動以前に・・ ③一度の取引に複数の商品が関わることがある ④注文が終わると,システムは料金を表示する

12. 概念モデルから実装まで

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

11

12.2 ユースケース( 2 )

ユースケースによる型モデルの検証 シーケンス図,協調図の始点

12. 概念モデルから実装まで

販売を記録する

店長

カテゴリ別の商品別売上げを得る

日別の商品別売上げを得る

調理係商品ごとの調理時刻を記録する

窓口係

日別の利益額を得る

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

12

12.3 ドメイン層の実装( 1 )

エスカレーションの戻し 参照方向の限定

12. 概念モデルから実装まで

Category_id_name_productList : Vector$categoryList : Vector

Category()$getCategory()add()getName()getProductList()

Product_id_name_price$productList : Vector

Product()getId()getName()getPrice()getTotalQuantity()$getProduct()

**

LineItem_product_quantity$lineItems : Vector

LineItem()getSales()getProduct()getQuantity()$getTotalQuantity()

**

Customer_id_sex_ageRange$customerList

Customer()$getCustomer()getID()getSex()getAgeRange()

Transaction_date_customer_lineItems : Vector$transactionList : Vector

Transaction()addLineItem()setCustomer()getDate()getLineItems()sumSales()$getSoldDate()$getSize()

** **

商品1 明細商品名

単価原価

数量/ 金額

*取引

日時*

現物ロット番号/ 賞味期限

*

1

*

1

*

/ 売上/ 売上金額/ 製造原価/ 利益

1日

製造

1

廃棄

1

販売

{導出}

カテゴリ名称

客タイプ*

1性別年齢層

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

13

12.3 ドメイン層の実装( 2 )

多重分類の解決

12. 概念モデルから実装まで

顧客

一般重要

法人

個人

《多重》

(a) 多重分類

顧客

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

(b) 単一分類

顧客*

1カテゴリ

(c) タイプクラス

インスタンス: 個人/法人 重要/一般

顧客タイプ

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

14

12.3 ドメイン層の実装( 3 )

動的分類の解決

12. 概念モデルから実装まで

1

貸し出し

返却済み貸出中

《動的》

(a) 動的分類 (b) state クラス

返却済み貸出中

state1

*

貸し出し

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

15

12.4 アプリケーション層の実装( 1 )

ユースケースの本体 アプリケーションファサード( Application Facade )

ドメインクラスのコピー,ビュー排他制御

アプリケーションロジック

12. 概念モデルから実装まで

Reciept_transaction

Receipt()addLineItem()setCustomer()getSoldProducts()sumSales()commit()

CustomerFacade_customer

toString()

CategorySales_category_date

CategorySales()getName()getTotal()$getAllCategorySales()

ProductSales_date_product

ProductSales()getTotal()ProductFacade()getName()getDate()$getAllSales()

LineItemFacade_lineItem

LineItemFacade()toString()

Sales

getName()getTotal()

ドメイン

アプリケーション

Transaction*

*

*

LineItem** **

Product

Category

Customer

ProductFacade_product

ProductFacade()toString()

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

16

12.4 アプリケーション層の実装( 2 )

シーケンス図による責務の配置 メッセージ(インタフェース)の設計

ユースケース「販売を記録する」

[注文あり][注文終わり

12. 概念モデルから実装まで

sell:Usecase :Transaction :LineItem : Product : Reciept theActor

起動

商品,数量

会計

new

addLineItem( )

setCustomer( )

commit( )

addLineItem( )

new

setCustomer( )

LineItem( )

$getProduct( )

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

17

12.4 アプリケーション層の実装( 3 )

シーケンス図による責務の配置 メッセージ(インタフェース)の設計

ユースケース「商品別に売上集計する」

売上: Usecase : Product: /Sales : LineItem : TransactiontheActor

new(prod.,date)

getSales( ) getTotalQuantity(date)

$getTotalQuantity(this, date) $getSoldDate(LineItem)

商品別集計

getProduct( )

getName( )

[ forAll]getPrice( ) [ LineItem あり]

その prod を参照している LineItemを取り出して

その LineItem の日が date と等しければその LineItem

の数量を累積するその累積数量

に単価を掛ける

12. 概念モデルから実装まで

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

18

12.5 ユーザインタフェース層の実装 ユーザインタフェース層

12. 概念モデルから実装まで

Reciept_transaction

Receipt()addLineItem()setCustomer()getSoldProducts()sumSales()commit()

CustomerFacade_customer

toString()

CategorySales_category_date

CategorySales()getName()getTotal()$getAllCategorySales()

ProductSales_date_product

ProductSales()getTotal()ProductFacade()getName()getDate()$getAllSales()

LineItemFacade_lineItem

LineItemFacade()toString()

ProductFacade_product

ProductFacade()toString()

Sales

getName()getTotal()

アプリケーション

Test_date

Sell()showSales()setDate()

ユーザインタフェース

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

19

12.6 プログラミング( 1 )

インスタンスの生成と管理 クラスオブジェクト インスタンスオブジェクト参照の方向

:Transaction_date=0211

12a:Transaction=

1:Product

2:Product

1:Category

3:Product

12. 概念モデルから実装まで

2:Transact

1:LineItem

2:LineItem

3:LineItem

4:LineItem M30:Cust

:Product:Category :Transaction:LineItem :Customer

F20:Cust1:Transact

2:Category

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

20

12.6 プログラミング( 2 )

リンクの実装

1:Transaction

:Transaction

2:Transaction

1:LineItem

2:LineItem

:LineItem

4:LineItem

_ l ineItems

public class Transaction{ private Date _date; private Customer _customer; private Vector _lineItems; private static Vector $transactionList = new Vector();

  public Transaction( Date date ){ _date = date; _lineItems = new Vector(); $transactionList.add(this); }

   public void addLineItem( LineItem lineItem ){ if(lineItem != null){ _lineItems.add( lineItem ); } }

public void setCustomer( Customer customer ){ _customer = customer; }

12. 概念モデルから実装まで

$l ineItems $transactionList

Transaction_date_customer_lineItems $transactionList

LineItem_product _quantity$lineItems

**

constructor

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

21

public class Product{ public int getTotalQuantity(Date date){ return LineItem.$getTotalQuantity(this, date); }

public class LineItem{ public static int $getTotalQuantity(Product product, Date date){ int _totalQuantity = 0; Iterator iter = $lineItems.iterator(); while(iter.hasNext()){ LineItem _lineItem = (LineItem)iter.next(); if( _lineItem._product == product ){ if( Transaction.$getSoldDate(_lineItem).equals(date) ){ _totalQuantity += _lineItem._quantity; } } }  return _totalQuantity; }

public class ProductSales implements Sales { public int getTotal() { return _product.getTotalQuantity(_date) * _product.getPrice(); }

:Transactiondate=12日

:Transactiondate=11日

:Transaction

:LineItemqtty=3

バーガー:Product

:LineItem

getTotalQuantity(11 日 )

:LineItemqtty=1

:LineItemqtty=1

$getTotalQuantity( バーガー , 11 日 )$getSoldDate(this)

バーガー:ProductSales

sales.getTotal()

ui

application domain

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

22

13. 概念モデルの理解13.1 アナリシスパターン13.2 責任関係13.3 勘定

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

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

23

13.1 アナリシスパターン( 1 )

Fowler, M.,”Analysis Patterns”分析に現れるパターン

要求のエスカレーション変更に強いモデル

知識レベル制約記述 実装の考慮

アプリケーションファサードサポートパターン

よいモデル例

13. 概念モデルの理解

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

24

13.1 アナリシスパターン( 1 )

アナリシスパターン責任関係( Accountability )観測と測定企業財務の観測オブジェクトへの参照在庫管理と会計( Account )会計モデルの利用計画トレーディングデリバティブトレーディングパッケージ

サポートパターン情報システムの層別化アーキテクチャアプリケーションファサード型モデル設計テンプレートのためのパターン関連パターン

13. 概念モデルの理解

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

25

13.2 責任関係( 1 )

責任関係( accountability )パターン 明示的なレベルを持った組織

変更に弱い操作(メソッド)の重複,類似の属性オブジェクト(インスタンス)図

事業部 地域*

1 営業所部門*

1*

11 1 1売上

コーヒー:事業部

首都圏:地域

神奈川:部門

藤沢:営業所

川崎:営業所

東京:部門

13. 概念モデルの理解

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

26

13.2 責任関係( 2 )

階層関係を持つ組織類似の操作,属性はスーパタイプに持つ

制約の変更が煩わしい マトリックス組織にはどう対応する?

事業部 地域 部門 営業所

組織*

*

親 0..1

制約: 親は事業部

制約: 親は持たない

制約: 親は地域

制約: 親は部門

{ 階層 }

13. 概念モデルの理解

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

27

コーヒー:事業部

首都圏:地域

神奈川:部門

藤沢:営業所

川崎:営業所

東京:部門

親 親 親 子子子

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

28

13.2 責任関係( 3 )

2系統の階層

制約変更の煩わしさが2倍に

組織*

*

子営業*

親営業*

*

*

親サービス*

子サービス*

事業部 地域 部門 営業所 サービス部門サービス地域 サービスチームサービスセンタ

制約: 親営業は部門

制約: 親サービスはサービスセンタ,親営業は営業所

制約 :制約 :制約 :制約 :制約 : 制約 :

{ 階層 }{ 階層 }

13. 概念モデルの理解

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

29

コーヒー:事業部

首都圏:地域

神奈川:部門

藤沢:営業所

川崎:営業所

東京:部門

親営業

子営業

東京:サービス部門

藤沢:サービスセンタ

藤沢:サービスチーム

川崎:サービスチーム

横浜:サービスセンタ

首都圏:サービス地域

神奈川:サービス部門

親サービス

子サービス

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

30

13.2 責任関係( 4 )

関連型の使用

組織構造の制約は,組織構造の変化に敏感

事業部 地域 部門 営業所

インスタンス:  営業組織 サービス組織 

制約: 営業所の親は部門… . サービスチームの親は営業所およびサービスセンタ… .

期間

組織構造型

組織組織構造

1**

*

1

* *1親*

1* 子*

1型

1 有効期間サービスチーム

13. 概念モデルの理解

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

31

神奈川:部門

藤沢:営業所

川崎:営業所

営業組織:組織構造型

藤沢:サービスセンタ

藤沢:サービスチーム

川崎:サービスチーム

横浜:サービスセンタ

:組織構造

:組織構造

:組織構造

:組織構造

神奈川:サービス部門

:組織構造

:組織構造

:組織構造

:組織構造

子サービス組織:組織構造型

:期間2001/10/1 _ 2002/1/22

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

32

13.2 責任関係( 5 )

「組織構造型」と「ルール」

組織構造型ごとのルール組織の変化に弱い

事業部 地域 部門 営業所期間

組織構造型

組織組織構造

1**

*

1

* *1親*

1* 子*

1型

1 有効期間サービスチーム

ルール*1

13. 概念モデルの理解

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

33

神奈川:部門

藤沢:営業所

川崎:営業所

営業組織:組織構造型

藤沢:サービスセンタ

藤沢:サービスチーム

川崎:サービスチーム

横浜:サービスセンタ

:組織構造

:組織構造

:組織構造

:組織構造

神奈川:サービス部門

:組織構造

:組織構造

:組織構造

:組織構造

子サービス組織:組織構造型

:期間2001/10/1 _ 2002/1/22

営業組織型:ルール

営業所の親は部門,部門の親は地域, ...

サービスチームの親は営業所およびサービスセンタ,サービスセンタの親は,….

営業組織型:ルール

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

34

13.2 責任関係( 6 )

組織階層を「責任関係」として一般化

依頼者→実行者 Customer-Performer の関係

人 組織

責任関係型

期間

パーティ責任関係*

1

*

1

**

1**

1** 実行者

依頼者1

1

1

有効期限1

13. 概念モデルの理解

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

35

13.2 責任関係( 7 )

知識レベルと操作レベル パワータイプ(ベキ型)操作レベルの型の制約を記述鏡像関係

inv:  let collx:set(責任関係 )=self.the責任関係 in  collX->forALL ( x | x. 型 .依頼者 ->includes(x.依頼者 . 型 ) and x. 型 . 実行者 ->includes(x. 実行者 . 型 ))

知識レベル操作レベル

人 組織期間

作業パーティ責任関係

1**

**

** 1

**

1*

パーティ型

*

1

*

責任関係型

*

1

*

1..**

1..**

1..**

1..**

実行者

依頼者1

1

1

有効期限

依頼者

実行者

型 1

13. 概念モデルの理解

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

36

同意:責任関係型

:責任関係

山本太郎:パーティ

シナリオ 同意:責任関係

  患者 :鈴木一郎は医師 :山本太郎との間で, 2001 年 12 月 18 日に内視鏡検査を受けることについて同意した

医師:パーティ型

鈴木一郎:パーティ

患者:パーティ型

依頼者

依頼者

実行者

実行者

内視鏡検査:作業

:期間2001/12/18