160 likes | 344 Views
47070. オブジェクト指向モデリング [7]. 2001 年 11 月 12 日. オブジェクト指向モデリング. 前回 クラス図を書いてみよう. 6.0 ファーストフード店 6.1 販売の記録を残す 6.2 オブジェクト図で確認 6.3 毎日の商品別売上が必要 6.4 それをカテゴリ別にも 6.5 少しだけ商品を作りおきするとして 6.6 入庫と出庫 6.7 鮮度が命 6.8 利益はどうなっているの 6.9 ちょっとかっこよく 6.10 これで何が書けたことになるか. インスタンス: バーガー ドリンク :.
E N D
47070 オブジェクト指向モデリング[7] 2001年11月 12日
オブジェクト指向モデリング 前回 クラス図を書いてみよう 6.0 ファーストフード店 6.1 販売の記録を残す 6.2 オブジェクト図で確認 6.3 毎日の商品別売上が必要 6.4 それをカテゴリ別にも 6.5 少しだけ商品を作りおきするとして 6.6 入庫と出庫 6.7 鮮度が命 6.8 利益はどうなっているの 6.9 ちょっとかっこよく 6.10 これで何が書けたことになるか
インスタンス: バーガー ドリンク : メソッド: 日を引数とし,the商品.the売上とナビゲートして得られる売上オブジェクトの集合のうち,それぞれの日が引数の日と一致する分について,the売上.売上金額を合計したものを返す カテゴリ 名称 売上集計() 1 * 商品 販売 まとめ 1 1 * * {導出} 商品名 単価 数量 /金額 販売日 /合計金額 1 この関連は,必要な都度,導出すればよい。 * 導出: この売上金額は,the商品.the販売とナビゲートして得られる販売オブジェクトの集合のうち,それぞれのtheまとめオブジェクトの販売日が,この売上オブジェクトの日と一致するものについて,金額を合計して得る * /売上 日 /売上金額 静的モデル3 6.4 ファーストフード店の概念モデル
オブジェクト指向モデリング 第7回 概念モデルから実装まで 7.1 実装作業の概要 7.2 ユースケース 7.3 実装レベルのクラス図 7.4 シーケンス図 7.5 実装のクラス図 7.6 ソースプログラム
方向づけ 推敲 構築 移行 分析 設計 制作 検査 静的モデル4 7.1 実装作業の概要 • ドメインの実装 • 機能の実装 • アーキテクチャの実装 • レイヤー構造 • 役割の分担 ユーザインタフェース アプリケーション(機能) アプリケーション(機能) ドメイン(概念の世界) ドメイン(概念の世界) 永続化 概念レベル 実装レベル
静的モデル4 7.2 ユースケース(1) • ユースケースは要求記述 現実の世界 ①窓口で客がメニューに基づいて商品を 注文する ②受注担当が注文を聞いて,キッチン担 当に渡す ③客は注文品ができるまで,窓口で待つ ④受注担当は,料金を計算し,請求する ⑤客は料金を支払う ⑥客はできあがった商品を受け取る ユースケースの例 名称:販売する アクタ:受注担当 事前条件:その商品は販売された記録はない 基本系列: ①アクタがこのユースケースを起動する ②システムはアクタに注文を入れるよう促す ③アクタはシステムに商品名と数量を提示する ④システムはそれが販売されたことを記録する 事後条件:その商品を販売したことが記録されて いる 備考: ①1度の取引に複数の商品が関わることがある ②注文が終わると,システムは料金を表示する
販売する 受注担当 商品別に売上集計する カテゴリ別に売上集計する 店長 製造する キッチン担当 静的モデル4 7.2 ユースケース(2) • ユースケースによる型モデルの検証 • シーケンス図,協調図の始点
カテゴリ 名称 売上集計() 1 * Category 商品 販売 まとめ 1 1 * * 商品名 単価 数量 /金額 販売日 /合計金額 _name 1 * * /売上 日 /売上金額 * Product Transaction Selling _name _price * * * * _date _product _quantity * * /Sales _date _product * * 静的モデル4 7.3 実装レベルのクラス図(1) • クラス名
a:Transaction = :Category :Product :Selling :Transaction 1:Category 1:Product 1:Selling 1:Transaction :Transaction _date=021112 2:Product 2:Selling 2:Category 3:Product 3:Selling 4:Selling 2:Transaction 静的モデル4 7.3 実装レベルのクラス図(2) • インスタンスの生成と管理 • クラスオブジェクト • インスタンスオブジェクト • 可視性の方向
$sellingList $transactionList :Selling :Transaction 1:Selling 1:Transaction _sellingList 2:Selling Category 4:Selling 2:Transaction _name _productList $categoryList * Selling Transaction Product _product _quantity $sellingList _date _sellingList$transactionList _name _price $productList * * * * * * /Sales _date _product * * 静的モデル4 7.3 実装レベルのクラス図(3) • リンクの実装 public class Transaction{ private Vector _sellingList; private static Vector $transactionList = new Vector(); public Transaction( Date date ){ _date = date; _sellingList = new Vector(); $transactionList.add(this); }
theActor 販売:Usecase : Transaction : Selling : Product 注文 new 商品,数量 $getProduct(商品) new(theProd, date) addSelling (theSelling) [注文あり] 精算 getSoldProductNames( ) [注文なし] getProduct( ) getName( ) getQuantity( ) sumSales( ) getSales( ) getPrice( ) 静的モデル4 7.4 シーケンス図(1) • メッセージ(インタフェース)の設計 • ユースケース「販売する」
theActor 売上:Usecase : /Sales : Product : Selling : Transaction 商品別集計 new(prod.,date) そのprodを参照しているsellingを取り出して getProduct( ) getName( ) getSales( ) getTotalQuantity(date) $getTotalQuantity(this, date) $getSoldDate(selling) getPrice( ) [sellingあり] そのsellingの日がdateと等しければ [forAll] そのsellingの数量を累積する その累積数量に単価を掛ける 静的モデル4 7.4 シーケンス図(2) • メッセージ(インタフェース)の設計 • ユースケース「商品別に売上集計する」
$getSoldDate(this) :Selling :Transaction $getTotalQuantity(バーガー, 11日) getTotalQuantity(11日) バーガー:Product :Sellingqtty=3 :Transactiondate=11日 :Sellingqtty=1 :Sellingqtty=1 :Transactiondate=12日 public class Product{ public int getTotalQuantity(Date date){ return Selling.$getTotalQuantity(this, date); } public class Selling{ private Product _product; private int _quantity; private static Vector $sellingList = new Vector(); public static int $getTotalQuantity(Product product, Date date){ int _totalQuantity = 0; Iterator iter = $sellingList.iterator(); while(iter.hasNext()){ Selling _selling = (Selling)iter.next(); if( _selling._product == product && Transaction.$getSoldDate(_selling).equals(date) ) _totalQuantity += _selling._quantity; } return _totalQuantity; }
: /Sales theActor 売上:Usecase : Category カテゴリ別集計 getName( ) getTotal( date) new(prod.,date) getSales( ) [forAllProduct] [forAllCategory] 静的モデル4 7.4 シーケンス図(3) • メッセージ(インタフェース)の設計 • ユースケース「カテゴリ別に売上集計する」
7.5 実装のクラス図 Category _id _name _productList : Vector $categoryList : Vector Category() getName() add() getTotal() * * Product Transaction _id Selling _name _date _product _price _sellingList : Vector _quantity $productList : Vector $transactionList : Vector $sellingList : Vector Product() addSelling() Selling() getId() getDate() getSales() * * * * getName() sumSales() getProduct() getPrice() getSoldProductNames() getQuantity() getTotalQuantity() $getSoldDate() $getTotalQuantity() $getProduct() $getSize() $getItems() * * Test /Sales _date main( ) _product * * sell() setDate() Sales() getSales() init() getProduct() getDate() 静的モデル4
7.6 ソースプログラム http://www.crew.sfc.keio.ac.jp/lecture/2002objmodel/text/resource.html の下にあります。 静的モデル4