オブジェクト指向モデリング [11] 2003年12月16日 10. 状態モデル 10.2 活動図(6) プロセス図の課題 記法(活動図の拡張) 利益の源泉は何か 回転率を上げる(速い,安い,うまい) ムダを出さない(予測型か調整型か) 予測(見込み生産) 実績(調理と販売) 中間製品で在庫するが,カスタマイズしない 価値の移動 物流と金流 付加価値 接客←従業員教育 素材 店舗の立地 2 11. 静的モデル4 11.6 揺さぶり(1) モデルの洗練 変更に強いモデルにする 本質的なモデルを追求する 要求のエスカレーション 日別の商品別売上げを得る カテゴリ別の商品別売上げを得る 作り置きがあれば そこから出庫する 店長 日別の利益額を得る 作り置きがあればそこから出庫する 窓口係 調理係 商品ごとの調理時刻を記録する 3 11. 静的モデル4 11.6 揺さぶり(16) 汎化も使って概念を整理 導出: the/売上.製造原価は,the明細.the取引と ナビゲートして得られる取引オブジェクトの 集合のうち,それぞれのサブタイプが「製 造」または「廃棄」で,その日時の日が, the/売上.日と一致するものについて,the 明細.数量を合計したものにこの原価を乗 じて得る カテゴリ 名称 1 * 商品 /売上 /売上金額 /製造原価 /利益 1 1 商品名 日 単価 原価 {導出} * 現物 ロット番号 /賞味期限 明細 数量 /金額 取引 1 * 日時 1 1 消費税はどうす る * * 廃棄 製造 販売 * 客タイプ 性別 年齢層 1 4 オブジェクト指向モデリング シラバス 授業計画 回 1 2 3 4 5 6 7 8 9 10 11 12 13 月日 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日 内容 オリエンテーション:モデルとは何か。 モデリング言語:UMLの概要 静的モデル1:概念とクラス 静的モデル2:関連 静的モデル3:オブジェクト図 静的モデル3:オブジェクト図(続き),モデリング 機能モデル1:ユースケース,シナリオ 機能モデル2:要求抽出,協調図,シーケンス図,状態モデル:状態図 機能モデル2:活動図,静的モデル4:ユースケースに基づくモデリング 静的モデル4:モデルの揺さぶり 実装レベル:実装モデルとプログラム,モデリング1:アナリシスパターン モデリング2:デザインパターン,モデル図の作成,モデルの評価基準 モデリング3:例題によるモデル図の作成 5 オブジェクト指向モデリング 12. 概念モデルから実装まで 12.1 実装作業の概要 12.2 ユースケース 12.3 ドメイン層の実装 12.4 アプリケーション層の実装 12.5 ユーザインタフェース層の実装 12.6 プログラミング 6 12. 概念モデルから実装まで 12.1 実装作業の概要(1) ソフトウエアプロセス フェーズとワークフロー 繰り返し 方向づけ 推敲 構築 移行 要求 分析 設計 制作 検査 7 12. 概念モデルから実装まで 12.1 実装作業の概要(2) ドメインの実装 機能の実装 アーキテクチャの実装 レイヤー構造 役割の分担 人工物の作り込み ユーザインタフェース アプリケーション(機能) アプリケーション(機能) ドメイン(概念の世界) ドメイン(概念の世界) 永続化 概念レベル 実装レベル 8 12. 概念モデルから実装まで 12.1 実装作業の概要(3) レイヤリングアーキテクチャ 関心の分離 一方向の参照 ドメインを純粋に保つ M-V-C ユーザインタフェース アプリケーション(機能) ドメイン(概念の世界) 永続化 9 12. 概念モデルから実装まで 12.2 ユースケース(1) ユースケース記述と現実の世界 情報システムとの対話と現実の活動 ユースケースの例 ユースケース名:販売を記録する アクタ:窓口係 目的: 事前条件:その販売実績は記録されていない。 基本系列: ①アクタがこのユースケースを起動する。 ②システムは販売した商品,数量,顧客タイプを指示 ③アクタはそれらの値を提示する。 ④システムはそれらの値と日時,担当者を記録する。 代替系列:なし。 事後条件:その販売実績が記録されている。 備考: ①顧客タイプとは,顧客の分類で,性別×年齢層・・ ②担当者情報は,このユースケース起動以前に・・ ③一度の取引に複数の商品が関わることがある ④注文が終わると,システムは料金を表示する 現実の世界 ①窓口で客がメニューに基づいて商品を 注文する ②受注担当が注文を聞いて,キッチン担 当(調理係)に渡す ③客は注文品ができるまで,窓口で待つ ④受注担当は,料金を計算し,請求する ⑤客は料金を支払う(窓口係は受け取る) ⑥客はできあがった商品を受け取る 10 12. 概念モデルから実装まで 12.2 ユースケース(2) ユースケースによる型モデルの検証 シーケンス図,協調図の始点 販売を記録する 窓口係 日別の商品別売上げを得る カテゴリ別の商品別売上げを得る 店長 日別の利益額を得る 商品ごとの調理時刻を記録する 調理係 11 12. 概念モデルから実装まで 12.3 ドメイン層の実装(1) エスカレーションの戻し 参照方向の限定 カテゴリ 名称 1 * 商品 /売上 /売上金額 /製造原価 /利益 Category _id _name _productList : Vector $categoryList : Vector 1 明細 数量 /金額 取引 1 * 日時 1 1 * * 廃棄 現物 ロット番号 /賞味期限 製造 Transaction _date _customer _lineItems : Vector $transactionList : Vector LineItem _product _quantity $lineItems : Vector LineItem() * getSales() getProduct() getQuantity() $getTotalQuantity() * Transaction() addLineItem() setCustomer() getDate() getLineItems() sumSales() $getSoldDate() $getSize() 販売 * 客タイプ 性別 年齢層 * Product Product() getId() getName() getPrice() getTotalQuantity() $getProduct() * {導出} 原価 Category() $getCategory() add() getName() getProductList() _id _name _price $productList : Vector 1 商品名 日 単価 1 Customer _id _sex _ageRange $customerList * Customer() $getCustomer() getID() getSex() getAgeRange() 12 12. 概念モデルから実装まで 12.3 ドメイン層の実装(2) 多重分類の解決 顧客 個人重要 個人 個人一般 法人重要 法人一般 (b) 単一分類 顧客 法人 顧客タイプ 《多重》 インスタンス: 個人/法人 重要/一般 カテゴリ 1 重要 一般 * 顧客 (a) 多重分類 (c) タイプクラス 13 12. 概念モデルから実装まで 12.3 ドメイン層の実装(3) 動的分類の解決 貸し出し 貸し出し 1 state * 1 《動的》 貸出中 返却済み (a) 動的分類 貸出中 返却済み (b) stateクラス 14 12. 概念モデルから実装まで 12.4 アプリケーション層の実装(1) ユースケースの本体 アプリケーションファサード(Application Facade) ドメインクラスのコピー,ビュー 排他制御 アプリケーションロジック アプリケーション Sales getName() getTotal() ProductSales CategorySales _date _product _category _date ProductSales() getTotal() ProductFacade() getName() getDate() $getAllSales() CategorySales() getName() getTotal() $getAllCategorySales() Reciept LineItemFacade ProductFacade _product _lineItem ProductFacade() toString() LineItemFacade() toString() CustomerFacade _transaction _customer Receipt() addLineItem() setCustomer() getSoldProducts() sumSales() commit() toString() ドメイン Category * LineItem Product * Transaction * Customer * 15 12. 概念モデルから実装まで 12.4 アプリケーション層の実装(2) シーケンス図による責務の配置 メッセージ(インタフェース)の設計 ユースケース「販売を記録する」 theActor sell:Usecase 起動 : Reciept new :Transaction :LineItem : Product new 商品,数量 addLineItem( ) $getProduct( ) LineItem( ) addLineItem( ) [注文あり] 会計 [注文終わり setCustomer( ) setCustomer( ) commit( ) 16 12. 概念モデルから実装まで 12.4 アプリケーション層の実装(3) シーケンス図による責務の配置 メッセージ(インタフェース)の設計 ユースケース「商品別に売上集計する」 theActor 売上:Usecase : /Sales : Product : LineItem : Transaction 商品別集計 new(prod.,date) getProduct( ) そのprodを参照し ているLineItemを 取り出して getName( ) getSales( ) getTotalQuantity(date) $getTotalQuantity(this, date) $getSoldDate(LineItem) getPrice( ) [LineItemあり] [forAll] その累積数量に 単価を掛ける そのLineItemの 数量を累積する そのLineItemの日 がdateと等しけれ ば 17 12. 概念モデルから実装まで 12.5 ユーザインタフェース層の実装 ユーザインタフェース層 ユーザインタフェース Test _date Sell() showSales() setDate() アプリケーション Sales getName() getTotal() ProductSales CategorySales _date _product _category _date ProductSales() getTotal() ProductFacade() getName() getDate() $getAllSales() CategorySales() getName() getTotal() $getAllCategorySales() ProductFacade LineItemFacade _product _lineItem ProductFacade() toString() LineItemFacade() toString() Reciept CustomerFacade _transaction _customer Receipt() addLineItem() setCustomer() getSoldProducts() sumSales() commit() toString() 18 12. 概念モデルから実装まで 12.6 プログラミング(1) インスタンスの生成と管理 :Transaction _date=021112 クラスオブジェクト インスタンスオブジェクト 参照の方向 = a:Transaction :Category :Product :LineItem :Transaction :Customer 1:Category 1:Product 1:LineItem 1:Transact F20:Cust 2:Product 2:LineItem 3:Product 3:LineItem 2:Transact M30:Cust 2:Category 4:LineItem 19 12. 概念モデルから実装まで 12.6 プログラミング(2) リンクの実装 public class Transaction{ constructor 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); } $lineItems :LineItem :Transaction 1:LineItem 1:Transaction _lineItems 2:LineItem public void addLineItem( LineItem lineItem ){ if(lineItem != null){ _lineItems.add( lineItem ); } } public void setCustomer( Customer customer ){ _customer = customer; } $transactionList 4:LineItem 2:Transaction Transaction LineItem _product _quantity $lineItems * _date _customer _lineItems $transactionList 20 $getTotalQuantity(バーガー, 11日) $getSoldDate(this) :LineItem :Transaction :LineItem qtty=3 :Transaction date=11日 sales.getTotal() getTotalQuantity(11日) ui バーガー :ProductSales バーガー :Product application domain public class ProductSales implements Sales { :LineItem qtty=1 :LineItem qtty=1 :Transaction date=12日 public int getTotal() { return _product.getTotalQuantity(_date) * _product.getPrice(); } 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; } 21 オブジェクト指向モデリング 13. 概念モデルの理解 13.1 アナリシスパターン 13.2 責任関係 13.3 勘定 22 13. 概念モデルの理解 13.1 アナリシスパターン(1) Fowler, M.,”Analysis Patterns” 分析に現れるパターン 要求のエスカレーション 変更に強いモデル 知識レベル 制約記述 実装の考慮 アプリケーションファサード サポートパターン よいモデル例 23 13. 概念モデルの理解 13.1 アナリシスパターン(1) アナリシスパターン 責任関係(Accountability) 観測と測定 企業財務の観測 オブジェクトへの参照 在庫管理と会計(Account) 会計モデルの利用 計画 トレーディング デリバティブ トレーディングパッケージ サポートパターン 情報システムの層別化アーキテクチャ アプリケーションファサード 型モデル設計テンプレートのためのパターン 関連パターン 24 13. 概念モデルの理解 13.2 責任関係(1) 責任関係(accountability)パターン 明示的なレベルを持った組織 事業部 1 * 地域 1 * 部門 1 営業所 * 売上 変更に弱い 操作(メソッド)の重複,類似の属性 オブジェクト(インスタンス)図 コーヒー:事 業部 首都圏: 地域 神奈川: 部門 藤沢:営 業所 東京:部 門 川崎:営 業所 25 13. 概念モデルの理解 13.2 責任関係(2) 階層関係を持つ組織 類似の操作,属性はスーパタイプに持つ {階層} 親 組織 制約: 親は持たない 事業部 0..1 子 制約: 親は部門 * 地域 制約: 親は事業部 部門 営業所 制約: 親は地域 制約の変更が煩わしい マトリックス組織にはどう対応する? 26 コーヒー:事 親 業部 子 首都圏: 地域 親 子 神奈川: 部門 東京:部 門 親 子 藤沢:営 業所 川崎:営 業所 27 13. 概念モデルの理解 13.2 責任関係(3) 2系統の階層 {階層} {階層} * 子営業 * 組織 親営業 * * 事業部 制約: 地域 制約: 親サービス 子サービス 部門 制約: 営業所 サービス地域 サービス部門 サービスセンタ サービスチーム 制約: 制約: 親営業は部門 制約: 制約: 制約: 親サービスは サービスセンタ, 親営業は営業所 制約変更の煩わしさが2倍に 28 コーヒー:事 業部 首都圏: 地域 東京:部 門 首都圏:サ ービス地域 神奈川: 部門 川崎:営 業所 藤沢:営 業所 神奈川:サ ービス部門 横浜:サー ビスセンタ 親営業 子営業 東京:サー ビス部門 藤沢:サー ビスセンタ 親サービス 子サービス 川崎:サー ビスチーム 藤沢:サー ビスチーム 29 13. 概念モデルの理解 13.2 責任関係(4) 関連型の使用 インスタンス: 営業組織 サービス組織 組織構造型 制約: 営業所の親は部 門…. サービスチームの 親は営業所および サービスセンタ…. 型1 * 組織構造 * 親 1 * 組織 子 1 * 1 有効期間 期間 事業部 地域 部門 営業所 サービス チーム 組織構造の制約は,組織構造の変化に敏感 30 神奈川: 部門 神奈川:サ ービス部門 親 営業組織: 組織構造型 :組織構 造 :組織構 造 :組織構 造 :組織構 造 子 川崎:営 業所 藤沢:営 業所 横浜:サー ビスセンタ 藤沢:サー ビスセンタ :組織構 造 :組織構 造 :組織構 造 サービス組織 :組織構造型 親 :組織構 造 :期間 2001/10/1 _ 2002/1/22 子 川崎:サー ビスチーム 藤沢:サー ビスチーム 31 13. 概念モデルの理解 13.2 責任関係(5) 「組織構造型」と「ルール」 組織構造型 * 1 ルール 型1 * 組織構造 * 親 1 * 組織 子 1 * 1 有効期間 期間 事業部 地域 部門 営業所 サービス チーム 組織構造型ごとのルール 組織の変化に弱い 32 営業所の親は部門, 部門の親は地域,... 神奈川: 部門 営業組織型 :ルール 神奈川:サ ービス部門 サービスチームの親 は営業所およびサー ビスセンタ,サービス センタの親は,…. 営業組織型 :ルール 親 営業組織: 組織構造型 :組織構 造 :組織構 造 :組織構 造 :組織構 造 子 川崎:営 業所 藤沢:営 業所 横浜:サー ビスセンタ 藤沢:サー ビスセンタ :組織構 造 :組織構 造 :組織構 造 サービス組織 :組織構造型 親 :組織構 造 :期間 2001/10/1 _ 2002/1/22 子 川崎:サー ビスチーム 藤沢:サー ビスチーム 33 13. 概念モデルの理解 13.2 責任関係(6) 組織階層を「責任関係」として一般化 責任関係型 型 1 * * 責任関係 依頼者 1 * 実行者 * パーティ 1 1 有効期限 期間 人 組織 依頼者→実行者 Customer-Performerの関係 34 13. 概念モデルの理解 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 有効期限 期間 人 組織 35 シナリオ 同意:責任関係 患者:鈴木一郎は医師:山本太郎との間で,2001年12月18日に内視鏡検 査を受けることについて同意した 同意:責任 関係型 型 依頼者 患者 :パーティ型 医師 実行者 :パーティ型 型 型 内視鏡検 査:作業 :責任関 係 :期間 2001/12/18 依頼者 鈴木一郎 :パーティ 実行者 山本太郎 :パーティ 36
© Copyright 2025 ExpyDoc