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

47070
オブジェクト指向モデリング
[3]
2001年10月16日
オブジェクト指向モデリング
前回 良い情報システムとは
2.1 良いシステムとは何か
2.2 良いシステムは存在するのか
2.3 良いシステムとはどんなものか
2.4 良いシステムはどのようにして作るのか
2
2.良い情報システムとは
2.3 良いシステムはどんなものか
 ケーススタディ
 問題の原因
 人間が一度に理解できる量には限界がある
A
 c.f. magical number 7±2
 限界を超えると破綻へ
B
D
 バグの原因,スパゲッティコード
 goto有害論
C
 理解できる単位でシステムを組立てる
 モジュール
 結合度(coupling)
 凝集度(cohesion)
 インタフェース
 カプセル化,抽象化
client
A
A
依存性
A
server
B
B
B
D
C
3
2.良い情報システムとは
2.4 良いシステムはどのようにして作るのか
 作業(ワークフロー)
 分析→設計→制作→検査
 分解プロセスではない
制約,価値観
変換(演繹)
判断
制約,価値観
変換(演繹)
判断
Function
Function
Requirement
変換(演繹)
判断
Artifact
Artifact
Artifact
Artifact
Feature
Feature
Feature
機能
機能
要求
制約,価値観
実装
実装
実装
実装
機能
機能
機能
変換(帰納)
変換(帰納)
変換(帰納)
分析
設計
制作
概念レベル
仕様レベル
実装レベル
検査
4
オブジェクト指向モデリング
第3回 オブジェクトの概念とUML
3.1 オブジェクトとは何か
3.2 オブジェクトは良いシステム作りに役立つか
3.3 継承
3.4 ポリモーフィズムと動的束縛
3.5 型とクラス
テキスト 第2章
3.6 UML
5
3.オブジェクトの概念とUML
3.1 オブジェクトとは何か
 オブジェクト指向パラダイム
 世界は「オブジェクト」の相互作用で成立しているという想
定に基づいてソフトウェアを作成する
 オブジェクト
 メッセージを受け取って反応する(behavior)
 反応の結果はオブジェクトの内部状態(state)に依存する
 何らかの属性値を持つ
 個々のオブジェクトは区別される(identity)
 一つひとつのオブジェクト
resetTimeTo(07:43)
resetTimeTo(newTime)
reportTime()
myClock
6
3.オブジェクトの概念とUML
3.1 オブジェクトとは何か
 メッセージ
送信先オブジェクト セレクタ
引数
Obj.resetTimeTo(07:43)
 自分自身にも送ることができる
 インタフェース
 受理可能なメッセージの定義
 公開インタフェース(public)
 非公開インタフェース(private)
resetTimeTo()
reportTime()
resetTimeTo()
reportTime()
Obj1.resetTimeTo(07:45)
resetTimeTo()
reportTime()
obj1
obj2
obj3
return
7
3.オブジェクトの概念とUML
3.1 オブジェクトとは何か
 クラス
 類似のオブジェクトをグループ化
 何をもって類似と判断するか
 クラスに属するオブジェクトの生成
 Object Factoryクラス
 なぜクラスが必要か
 同じ特性をまとめて記述する
 (write once!)
 型としての効果
 型チェック
resetTimeTo()
reportTime()
resetTimeTo()
resetTimeTo()
reportTime()
reportTime()
resetTimeTo()
reportTime()
8
3.オブジェクトの概念とUML
3.2 オブジェクトは良いシステム作りに役立つか
 良いモジュール
 OOの制約の下で,良いモジュールとなるとの期待
 結合度が低く,凝集度が高いクラスを設計する
 世界をオブジェクトに関連づけて認識する
 ユーザの要求を満足すること
 「ユーザの世界」と「オブジェクトの世界」の整合
 要求獲得を容易に
 変更要求に追随する
 OOのパラダイムがこれらに貢献するか
 クラス,カプセル化,継承とポリモーフィズム
 メッセージメタファ
9
3.オブジェクトの概念とUML
3.2 オブジェクトは良いシステム作りに役立つか
 何が良いオブジェクトか
T. Reenskaug, Working with Objects: The OOram Software Engineering
Method. Greenwich, CT: Manning Publications, 1996.
 実世界の部分的モデル
 思考やアクションが向けられる先
 ER(実体関連)モデルにおけるエンティティ
 識別性を持ち,長期間存在するもの
 何が良いクラスか
10
3.オブジェクトの概念とUML
3.2 オブジェクトは良いシステム作りに役立つか
 良さの前提…
 アーキテクチャ
ユーザインタフェース
HTML
アプリケーション(機能)
ドメイン(概念の世界)
SQL
永続化
11
3.オブジェクトの概念とUML
3.3 継承
 実装レベル
 サブクラス
 最もオブジェクト指向らしいメカニズム
 機能の拡張(追加,上書き)
 ポリモーフィズムのベース
 概念レベル
 サブタイプ(部分型)
顧客
国内
 分類
 部分集合
 多重分類
 動的分類
一般
重要
 状態の分類
国外
12
3.オブジェクトの概念とUML
3.4 ポリモーフィズムと動的束縛
 ポリモーフィック
 変数
 型が互換のオブジェクトを指せる
 関数
 型が互換の引数を使える
 関数側が部分型ごとに違う振る舞いを用意する
 拡張
 条件分岐の削減
 動的束縛(遅延束縛)
DoIt()
A:重要顧客
DoIt()
B:顧客
クライアント
 束縛(binding)
 実行時にどの型を使うかが決定される
 コンパイル時に型チェックしたいが...
13
3.オブジェクトの概念とUML
3.5 型とクラス
型
 概念
 境界を定める
 集合
 共通の属性種
 個別の属性値
 インタフェース
 操作
 クラス
 型の実装
 データ項目
 メソッド
 実装上の都合
14
3.オブジェクトの概念とUML
3.6 UML
 Three Amigos
 James Rumbaugh
 Grady Booch
 Ivar Jacobson
 Unified Modeling Language
1995年10月 Unified Method V0.8
1997年1月 UML 1.1 on OMG
1998年6月 UML 1.3 on OMG
Openなプロセスに
よって改良
ISO化の動き
UML 1.4.1
15
3.オブジェクトの概念とUML
3.6 UML
 記法
 クラス図
 相互作用図
 シーケンス図,コラボレーション図
 状態図
 ステートチャート図,アクティビティ図
 ユースケース図
 パッケージ
 配置図
 モデリングプロセスは別!
アイコンを自由に定義で
きる→拡張可能
16
3.オブジェクトの概念とUML
3.6 UML
 クラス図
 概念レベル
 Universe of Discourseの表現
 概念と概念の構造
 実装レベル
 プログラムの設計
self.observer
->update()
A
*
Notify()
Attach(Observer)
Detach(observer)
ConcreteA
GetState()
return subjectState
subjectState
B
update()
observer
subject
ConcreteB
update()
observerState
self.observerState=
subject.GetState()
17
3.オブジェクトの概念とUML
3.6 UML
 シーケンス図
 概念の境界を定める
 責任の配分
 相互作用
SetState( )
b1:B
a:A
b2:B
Notify( )
Update( )
GetState( )
Update( )
GetState( )
18
3.オブジェクトの概念とUML
3.6 UML
 アクティビティ図
 ワークフロー
受注係
出荷係
輸送係
注文を受ける
在庫を確認する
出荷指示をする
出荷する
納入する
19
3.オブジェクトの概念とUML
3.6 UML
 ユースケース図
 概念レベル
 要求の切り出し
 要求の記述
在庫を確認する
 実装レベル
受注係
注文を受ける
出荷を指示する
20