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