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

47070
オブジェクト指向モデリング
[9]
2001年12月10日
オブジェクト指向モデリング
第8回 初歩のケーススタディ
8.1 図書館システム
8.2 ユースケース
8.3 ソフトウェアプロセス
8.4 型の認識
8.5 振る舞いのモデル
8.6 概念モデルから実装モデルへ
2
初歩のケーススタディ
情報システムの構築プロセス
 問題の認識,解決状態のイメージ
 基本定義と合意のプロセス
 CATWOE分析
 基本課題
 ユースケース
 要求の記述
 型図(概念レベル)
方向づけ
推敲
構築
移行
要求
分析
設計
制作
検査
 型の認識
 概念と概念間の関係(構造)
 クラス図(実装レベル)
 アーキテクチャ
 ソフトウエア工学
 ソフトウエアプロセス
3
初歩のケーススタディ
8.4 型(クラス)の認識
 拡張版
 他のユースケース
「本を予約する」
著書
0..*
1
予約する
の印刷物である
0..1
会員
教員の会員
1..*
借りる/返却する
0..1
0..*
本
制約:
雑誌は教員の会
員だけが借りられる
雑誌
4
初歩のケーススタディ
8.4 型(クラス)の認識
 関連型
 事実の記録(履歴)
 もの-こと-もの
0..*
予約
0..*
1
著書
1
0..1
の印刷物である
0..1
1
会員
0..*
1
貸し出し
1..*
0..*
1
本
制約:
雑誌は教員の会
員だけが借りられる
《動的》
教員の会員
貸出中
返却済
雑誌
5
初歩のケーススタディ
8.5 振る舞いのモデル
 相互作用図
 シーケンス図
 オブジェクト間
 メッセージ
 順序(制御構造)
 アクティベーション
A:本の借り手
本を借りる
:ユースケース
会員ID=A,本ID=#123
基本系列:
(1) アクタはこのユースケースを起動する。
(2) システムは会員の識別と本の識別を要求する。
(3) アクタは会員の識別と本の識別を提示する。
(4) システムは,会員が妥当で,貸出し可能な冊数の上限に達し
ていないことを確認して,その本が借りられたことを記録する。
A:会員
#123:本
UsingUML:
著書
0: find(A)
0: find(#123)
1: borrow(#123)
1.1: okToBorrow( )
1.2:borrow( )
1.2.1:borrowed( )
6
初歩のケーススタディ
8.5 振る舞いのモデル
 相互作用図
 コラボレーション図
 メッセージつきのオブジェクト図
本の借り手
会員ID=A,本ID=#123
UsingUML:
著書
本を借りる
:ユースケース
1.2.1:borrowed( )
1: borrow(#123)
A:会員
#123:本
1.2:borrow( )
1.1: okToBorrow( )
7
初歩のケーススタディ
8.5 振る舞いのモデル
 状態図
 ステートチャート
「著書」の状態
returned()
 オブジェクトの状態
 事象
returned()
 アクティビティ図
貸出不可
貸出可
borrowed()[最後の本]
borrowed()[最後の本でない]
貸出を申し出る
貸出を記録する
本を帯出する
8
初歩のケーススタディ
8.6 概念モデルから実装モデルへ
 概念モデル
 重要な型と構造
 重要な属性と操作
 重要なインタフェース
仕様レベル
要求定義
実装レベル
分析
設計
概念レベル
 実装モデル
 実装の都合
制作
検査
 クラス,データ,メソッド
 インスタンスオブジェクトの生成と消滅
 オブジェクトの管理(コレクションの表現),ナビゲーションの方法
 非機能要求
 ユーザインタフェース層,永続層
 パフォーマンス,耐変更性(拡張性),移植性
9
質問カードから
 概念モデルから実装モデルへの展開(設計)が最も
重要で難しいと思うが
 それぞれ重要で難しい
 要求
 問題を見つけだすこと
 解決策を考えつくこと
 分析
 概念を整理すること
 要求を整理すること
 設計
 仕様を与えること
 品質を与えること
クリエイティブな作業
アーキテクチャを発明する
場合は,特に難しい
 制作(プログラミング)
 移行
10
質問カードから
 汎化の使い方
PC
*
*
利用する
管理する
 インターネットの利用
 「インターネット」は集合?
 そのインスタンスって何?
ユーザ
管理者
Note
DeskTop
WorkStation
 関わりの対象をもっと明確に
 たとえば,○○サーバ
インターネット
サービス
*
*
利用する
管理する
ユーザ
管理者
SMTP
HTTP
FTP
11
オブジェクト指向モデリング
第9回 動的モデル
9.1 ユースケースを書いてみよう
9.2 コラボレーション図
9.3 シーケンス図
9.4 状態図
9.5 アクティビティ図
12
動的モデル
9.1 ユースケースを書いてみよう
 概念レベル
 要求を1つひとつ取り出す
ユースケース名:
アクタ:
目的:
事前条件:
基本系列:
事後条件:
代替系列:
備考:
 変更要求管理
切符を買う
入場する
乗客
移動する
出場する
13
動的モデル
9.1 ユースケースを書いてみよう
 駅の自動改札システムのユースケースを考えて
 ユースケース記述
入場する
ユースケース名:入場する。
乗客
アクタ:乗客
目的:アクタは入場して電車に乗りたい。ownerは適正な乗客のみを入場させたい。
実装方法を書かない
事前条件:その乗客は入場していない。
(対話の本質に迫る)
基本系列:
①アクタは入場の許可を要請する。
②システムはアクタが適正な乗客であることの証明の提示を要求する。
③アクタはその証明を提示する。
④システムはその証明を確認し,適正であれば入場を許す。適正でなければ許可しない。
事後条件:その乗客が入場している。
代替系列:
備考:
・乗客が,適正であるとは,有効期間内で入場駅が区間内の切符,回数券,定期券,ま
たは残高が最低料金を越えるプリペイドカードを提示したこと。
・入場の許可は,ゲートの開閉で行う。システムは,適正なアクタが通過したら,直ちにゲ
ートを閉じる。システムは次の乗客を停滞させないこと。
14
動的モデル
9.1 ユースケースを書いてみよう
 自動改札システムのユースケースを考えて
 ユースケース
ユースケース名:入場する。
アクタ:乗客
目的:アクタは入場して電車に乗りたい。ownerは適正な乗客のみを入場させたい。
見えない要求を見
事前条件:その乗客は入場していない。
つける
基本系列:
①アクタは入場の許可を要請する。
②システムはアクタが適正な乗客であることの証明の提示を要求する。
③アクタはその証明を提示する。
④システムはその証明を確認し,適正であれば入場を許し,同時にその乗客が入場した
旨を記録する。適正でなければ許可しない。
事後条件:その乗客が入場している。入場が記録されている。
代替系列:
備考:
・乗客が,適正であるとは,有効期間内で入場駅が区間内で未入場の切符,回数券,定
期券,または残高が最低料金を越えるプリペイドカードを提示したこと。
・入場の許可は,ゲートの開閉で行う。システムは,適正なアクタが通過したら,直ちにゲ
ートを閉じる。システムは次の乗客を停滞させないこと。
15
動的モデル
9.1 ユースケースを書いてみよう
 宿題
 ファーストフード店のユースケース「販売する」を書いてくだ
さい。
ユースケース名:販売する。
アクタ:
目的:アクタは
したい。Ownerは
事前条件:その商品は販売されていない。
基本系列:
①アクタは
②システムは
③アクタは
④システムは
:
事後条件:その商品が販売されている。
代替系列:
備考:
したい。
16
動的モデル
111ページ
9.2 コラボレーション図
 相互作用図
 1つのユースケースに関するオブジェクト群の振る舞い
 コラボレーション図
 シーケンス図
インスタンスレベルなので
シナリオというべき
 コラボレーション図
 オブジェクトどうしの関わりかた
 オブジェクト(インスタンス)図
 オブジェクト
 アクタ(イニシエータ)
 オブジェクトとロール
 「その会員」
112ページ
技術注釈
イニシエータ
UsingUML:
著書
本の借り手
the会員:
会員
#1234:本
17
動的モデル
112ページ
9.2 コラボレーション図
著書
1
の印刷物である
 相互作用の表記
0..*
会員
 受渡しメッセージとその順序
借りる/返却する
本
0..*
0..1
 メッセージ番号
 入れ子のナンバリング
 イニシエータが最初のメッセージを発行する
 メッセージを受け取るとアクティブになる
 コントロール(制御権)
 アクティべーション
 応答
 CRC
UsingUML:
著書
本の借り手
 責任の配置
問
イニシエータ
O
その会員:
会員
P
7.3.1:mes1
2.1:borrowed
borrow(#1234)
__:mes2
#1234:本
2:borrow
1:okToBorrow
18
動的モデル
114ページ
9.3 シーケンス図
 シーケンス図
 オブジェクトどうしの関わりかた
 オブジェクト
 受渡しメッセージとその順序
オブジェクト
 生存線とアクティべーション
問
 矢線はなぜアクティ
べーションの先頭を
指しているか
その会員:
会員
#1234:本
本の借り手
生存線
borrow(#1234)
アクティべーション
UsingUML:
著書
1:okToBorrow( )
2:borrow( )
2.1:borrowed( )
19
動的モデル
9.3 シーケンス図
 自分自身へのメッセージ送信
 戻り値に名前をつける
 オブジェクトの生成と削除
 シーケンス図
 コラボレーション図
 タイミング
:本の借り手
122ページ
 制約
 時間の経過
A
{C-A < 5sec.}
117ページ
119ページ
120ページ
その会員:
会員
#1234:本
UsingUML:
著書
borrow(#1234)
1:okToBorrow( )
2:borrow( )
2.1:r =borrowed( )
制約
C
2.2:destroy(r)
20
動的モデル
9.3 シーケンス図
 コラボレーション図とシーケンス図
 基本的に同じ内容
 型/クラス図の修正
 コラボレーション図
 オブジェクト間の関連性を強調
 シーケンス図
 時間経過,タイミングを強調
21
動的モデル
9.3 シーケンス図
 デメテルの法則
なんでも管理者
115ページ
パネル
 保守のしにくさ
仕事の管理者
getJC(j:仕事):仕事の管理者 1
0..* do( )
1
1
「仕事の管理者」と関連の変化
→「何でも管理者」とそのクライアントに影響
「何でも管理者」から先のクラス構造まで露出
モジュールの境目としては悪構造
0..*
0..*
仕事
 メッセージへの応答
:O
mes(n)
theJob:仕事
②
new
Q
:仕事の
管理者
①
1:jc =getJC(theJob)
n:N
O
:何でも
管理者
p:P
③
2:jc .do( )
q:Q
④
22
動的モデル
134-7ページ
9.4 状態図
状態
 状態図(ステートチャート図)
貸出し中
 状態,遷移,イベント
 オブジェクトの状態
イベント
return()
書架にある
borrow()
 状態を持つオブジェクト
 開始,終了状態
遷移
return()/book.returned(self)
貸出し中
 開始マーカ
 終了マーカ
書架にある
borrow()/book.borrowed(self)
 遷移
アクション
 イベント[ガード]/アクション
returned()
returned()
貸出し不可
貸出し可
borrowed()[最後の本]
borrowed()[最後の本でない]
ガード
23
動的モデル
137ページ
9.4 状態図
 状態図(ステートチャート図)
 状態
 do/アクティビティ
 entry/入状アクション
 exit/出状アクション
/最初の品目を取り出す
チェック中
[未チェックの品目あり]
/次の品目を取り出す
do/品目チェック
[全品目チェック済み]
出荷中
do/出荷準備
[出荷完了]
a:注文
出荷済み
24
動的モデル
教科書外
9.4 状態図
 状態と型図
 動的分類
 実装
本
<<動的>>
 stateパターンが利用できる
書架に
ある本
本
貸出し中
の本
{abstract}
状態
書架に
ある
貸出し中
25
動的モデル
9.5 アクティビティ図
142ページ
 アクティビティ図
 状態図の拡張
 アクティビティ
 遷移
 同期バー
 判断
 開始マーカ
 終了マーカ
 レーン(アクタ)
会員
[借りる人]
司書
書架に本を
見つける
[返却する人]
並んで待つ
[返却する]
[借りる]
 制御構造を書く
 ワークフロー図
 split と join
 loop
返却を記録
本を書架に
戻す
貸出しを記録
次の利用者
に備える
26
動的モデル
教科書外
9.5 アクティビティ図
 ビジネスプロセス
 ワークフローで表現
 ワークフローの基本単位
 Customer-Performer
 アクティビティと情報システムの支援
打診
Customer
契約
Performer
Customer
報告
Performer
実行
27
動的モデル
教科書外
9.5 アクティビティ図
 ワークフロー図で書かれないもの
 アクティビティ
 アクタの作業
ユースケース
 情報システムの支援あり
 情報システムの支援なし
 状態遷移するオブジェクト
 書かれないもの
 システム外部のコミュニケーション
control
 Customer-Performer
 コミュニケーションの媒体
 情報システムの本質
resource
<<Activity>>
resource
control
28
動的モデル
教科書外
9.5 アクティビティ図
 ワークフロー図
 WfMC+Kodama
 アクティビティ(アクタの振舞い)
 システム外のアクタ間の通信
 実行コスト(所要時間,必要スキル)
顧客→受注係
注文を受け
る
受注係
在庫を確認
する
受注係
出荷係
出荷指示を
する
出荷する
輸送係
納入する
cancel
出荷指示書
29
動的モデル
教科書外
9.5 アクティビティ図
 Eriksson & Penkerの拡張
 プロセス図
<<goal>>
<<people>>
Process Goal:
QuantitativeGoal
PeopleObj
<<control>>
<<achieve>>
<<information>>
InputObjA
<<process>>
<<physical>
Process
OutputObj
<<physical>>
InputObjB
<<supply>>
<<physical>>
PhysicalObj
B
<<supply>>
<<information>>
InformationObj
30
動的モデル
教科書外
9.5 アクティビティ図
 ATOのモデル
 Benetonのビジネスモデル
 製品在庫最小化
 中間製品での在庫
 染色を最終工程に
 (オプションを最終工程で実装する)
売れ行き,
注文
<<process>>
<<process>>
販売計画
出荷
<<発注>>
市場に対す
る情報,知
識,予測
<<process>>
生産
<<resource>>
中間製品
納品物
<<供給>>
<<process>>
最終工程
生産能力
31