オブジェクト指向による 分析と設計

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