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