Object-oriented Design

第十二章
物件導向設計
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 1
本章目的




說明如何以能夠管理自己狀態和操作的互動物
件進行軟體設計
描述一般物件導向設計中幾個重要的活動
介紹物件導向設計的幾個不同模型
說明如何以統一塑模語言(UML)來表示這
些模型
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 2
本章內容



物件和物件類別
物件導向設計過程
設計演化
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 3
OOD 的特性





物件是現實世界或系統實體的抽象,它們可以
自我管理
物件互相獨立且可以封裝狀態與表示的資訊
系統的功能是以物件的服務來表示
不使用共用資料區域,物件的溝通是以訊息傳
遞的方式來達成
物件可以分散,也可以循序或並行的執行
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 4
互動的物件
o4: C4
o1: C1
o3:C3
s tate o1
ops 1()
s tate o3
s tate o4
ops 3 ()
ops 4 ()
o2: C3
o6: C1
s tate o2
ops 3 ()
s tate o6
ops 1 ()
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
o5:C5
s tate o5
ops 5 ()
Slide 5
物件導向式開發




物件導向分析(OOA)、設計(OOD)與程式設計
(OOP)都是互相有關係,但是各有區別的
OOA :開發應用領域的物件導向模型
OOD :開發軟體系統的物件導向模型以符合
確認的需求
OOP :利用 OO 程式語言(如 Java 或 C++)來
實現 軟體的設計
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 6
物件與物件類別



物件(Object)是軟體系統中的實體,用來表示
現實世界中的實例和系統實體
物件類別(Object Class)則是這些物件的樣板,
利用這些樣板可以建立物件
物件類別可以繼承其他物件類別的屬性和服務
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 7
物件
「物件」(object)是一個實體,此實體具有一個狀態以及一組定
義好的對此狀態的操作,此狀態則是以一組物件的屬性來表示
。與此物件相關的操作則可提供服務給其他物件使用,當這些
物件(用戶端)需要某些計算時便可以向提供服務的物件提出要
求。
物件是根據某些「物件類別」(object class)的定義建立而成。
物件類別的定義可以當成這些物件的樣板,它提供了依此類別
所建之物件所應該具有的所有屬性和服務的宣告。
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 8
統一塑模語言 (UML)




1980和1990年代提出了許多用來描述物件導向
設計的表示法
最後由統一塑模語言(Unified Modeling
Language)將這些表示法整合
UML可以描述在OO分析和設計中可能產生的
各種不同模型表示法
UML目前已經成為OO塑模的實際標準
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 9
Employee 物件類別 (UML)
Employee
name: string
address: string
dateOfBirth: Date
employeeNo: integer
socialSecurityNo: string
department: Dept
ma nager: Employee
salary: integer
status: {current, left, retired}
taxCode: integer
. ..
join ()
leave ()
retire ()
changeDetails ()
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 10
Object 之間的溝通


概念上,物件是以訊息傳遞的方式進行溝通。
訊息(Messages)
•
•
呼叫的物件必須以服務的名稱提出要求。
包括執行服務所需的複製資訊,以及接收服務結果的保存
者名稱。
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 11
訊息範例
// 呼叫 buffer 物件的方法,傳回 buffer 中
// 的下一個值
v = circularBuffer.Get () ;
// 呼叫 thermostat 物件的方法,設定溫度
thermostat.setTemp (20) ;
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 12
一般化與繼承



類別可以排列成類別階層架構,以一個類別(
父類別)當成一個或多個其他類別(子類別)一般
化(generalisation)
子類別可以繼承其父類別的屬性和操作,也可
以加入自己新的方法或屬性
UML中的一般化在OO程式語言中是實作成繼
承 (inheritance)
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 13
一般化的階層架構
Employee
Ma nager
Programmer
budgetsControlled
dateAppointed
project
progLanguage
Project
Ma nag er
projects
©Ian Sommerville 2000
De pt.
Ma nager
dept
Strategic
Ma nag er
responsibilities
Software Engineering, 6th edition. Chapter 12
Slide 14
繼承的優點



它是一個抽象的機制,可以用來對實體做分類
它是一個再利用的機制,可以同時在設計和程
式設計的層級進行重複利用
繼承圖可以當成是領域和系統方面的組織性知
識來源
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 15
繼承的問題



物件類別並不能獨立說明一切,有時候必須參
考到他們的父類別
設計師習慣重複使用分析階段所產生的繼承圖
,如此可能會嚴重的影響到效率
分析、設計與實作的繼承圖有不同的功能,應
該分別做維護
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 16
繼承與 OOD

繼承是否為OOD的基礎有下列兩個不同觀點
•
•

觀點 1: 識別繼承架構或網路是物件導向設計的基礎。很顯
然的這只能使用OOPL進行實作。
觀點 2: 繼承是一個有用的實作概念,它允許再利用屬性和
操作的定義。在設計階段識別出繼承架構可能會對實作加
諸一些不必要的限制。
繼承會讓系統變複雜,這當然不是我們所希望
的,尤其對關鍵系統更是如此
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 17
UML的結合關係




結合 (Association)是物件和物件類別與其他物
件和物件類別之間的關係
在UML中最普通的關係就是由結合關係來表
示
結合關係上可以加註一些說明此關係的資訊
結合關係雖然普通,但是可以用來指示某個物
件的屬性是一個結合物件,或是某個方法必須
依賴某個結合的物件
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 18
結合模型
Employee
is-member-of
Department
is-managed-by
manages
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Manager
Slide 19
並行物件


物件本質上是一個獨立的實體,因此適合運用
於並行實作
如果不同物件分別放在分散系統中的不同處理
器上執行,就可以直接實作物件的訊息傳遞溝
通方式
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 20
Java 執行緒



Java的執行緒(Thread)是實作並行物件最簡單
的建構方式
執行緒中必須包含一個稱為 run() 的方法,這
個方法是由Java的執行時期系統啟動執行
主動物件基本上會包含一個無窮迴圈,如此讓
此物件可以持續執行運算
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 21
物件導向設計程序





定義系統使用的環境與模式
定義系統架構
辨識主要的系統物件
發展設計模型
指定物件介面
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 22
氣象系統的描述
氣象圖繪製系統必須能夠以規定的方式將從遠端、無人氣
象台和其他資料來源收集而來的資料繪製成氣象圖,可能
的資料來源如氣象觀察員、氣象氣球以及衛星資料等。氣
象台會根據該區域控制電腦的要求將收集到的資料傳送到
該區域電腦。
區域電腦系統會對這些收集到的資料做確認,並且整合從
不同地方傳來的資料。整合後的資料會被存檔,利用這些
存檔的資料以及數位化後的地圖資料庫就能夠產生一組區
域性的氣象圖。氣象圖可以送到特殊應用的印表機做列印
,或是以各種不同格式來顯示。
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 23
氣象台的描述
氣象台中包括了一些受軟體控制的儀器,這些儀器是用來收
集資料、執行某些資料處理動作以及將這些資料傳送到其他
地方做進一步的處理。這些儀器包括有空中與地面的溫度計
、風速計、風向標、氣壓計以及雨量計等。這些資料的收集
動作每五分鐘執行一次。
當傳送氣象資料的指令發出之後,氣象台就會開始處理與彙
整收集到的資料。而當氣象台收到要求時就會將這些彙整資
料傳送到氣象圖繪製電腦。
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 24
分層式架構
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 25
系統環境與使用模型


任何軟體設計程序的第一階段一定是先瞭解該軟體與
外部環境之間的關係
系統環境(System context)
•

系統使用模型(Model of system use)
•



它是一個靜態模型,用來描述環境中的其他系統。
它是一個動態模型,用來描述系統如何與它所處的環境互動。
系統環境與使用模型可以用關聯圖來表示。
利用UML套件符號表示子系統模型。
互動模型是以使用個案(use-case)來描述。
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 26
氣象圖繪製系統的子系統
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 27
氣象台的使用個案
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 28
架構設計


瞭解了系統和環境之間的互動之後,就可以利
用這些資訊進行系統架構的設計
氣象台比較適合使用分層式架構
•
•
•

介面層負責處理溝通的部份
資料收集層負責管理各項儀器
儀器層負責收集資料
一個架構模型中最好不要超過7個實體
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 29
氣象台架構
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 30
物件識別



識別物件(或物件類別)是物件導向設計中最困
難的部份
物件識別沒有什麼特別的訣竅,完全根據系統
設計者對該領域的知識、能力與經驗
物件識別是一個反覆的程序,不太可能一次就
搞定
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 31
識別物件的方法




對系統的自然語言描述做文法的分析 (為Hood
方法所採用)
以該應用領域中的有形實體做為識別的基礎
根據設計者對系統整體行為的瞭解,以行為學
的方法來識別
使用情境分析法(scenario-based analysis),輪流
辨識與分析系統使用的各種不同情境。有一個
方法稱為CRC cards。
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 32
氣象台系統中的物件類別

Weather station
•

Weather data
•

氣象台和其環境的基本介面,可以用來反映使用個案模型
中所識別出的互動情形
封裝來自氣象台中各個不同儀器的彙整資料
Ground thermometer, Anemometer, Barometer
•
應用領域的物件,系統中與儀器有關的「硬體」物件
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 33
氣象台系統中的物件類別
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 34
其他物件與物件的調整

以領域知識為基礎識別出更多的物件和操作
•
•

氣象台通常位於偏遠的地區,儀器有時可能會出錯,這些
儀器的故障情況應該能夠自動回報 。因此,需要有檢查儀
器功能是否正常的屬性和操作
每一個氣象台應該有唯一的識別碼
主動或被動物件
•
此例中,物件都是被動的,它們會依據要求來收集資料,
而非自動收集。如此可以讓控制器的處理時間更加彈性
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 35
設計模型



設計模型可以展示物件和物件類別,以及這些
實體之間的關聯
靜態模型(Static models)是以物件類別和它們之
間關聯來描述系統的靜態結構
動態模型(Dynamic models)則用來描述物件之
間的動態互動
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 36
設計模型的範例




子系統模型(Sub-system models),以相關的子
系統表示物件的邏輯群組。
循序模型(Sequence models),展示物件互動的
順序。
狀態機器模型(State machine models),展示各
別物件如何改變其狀態以回應發生的事件。
其他模型,包括使用個案模型(use-case
models)、聚合模型(aggregation models)以及一
般化模型(generalisation models)等。
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 37
子系統模型


展示設計如何組織成邏輯上相關的物件群組
在UML表示法裡是以套件(package)來表示,
套件是一種封裝的概念。它是一個邏輯模型,
系統中的物件在實際組織上可能會有所不同。
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 38
氣象台子系統
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 39
循序模型

循序模型用來表示物件互動所發生的順序
•
•
•
•
物件水平的排列在最頂端
垂直方向則表示時間,所以這種模型必須由上而下解讀
物件之間的互動是以帶有標示的箭頭,不同樣式的箭頭表
示不同型態的互動
物件時間軸上的窄長方形表示此物件為此時系統中的主控
物件
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 40
資料收集的順序
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 41
狀態圖(Statecharts)

展示物件如何回應不同的服務要求,以及由這
些要求所觸發的狀態移轉情形
•
•
•
•
•
如果物件狀態為 Shutdown,那麼它只能回應 Startup()訊息
waiting 狀態中的物件正在等待新進的訊息
如果接收到 reportWeather(),系統便移向彙整狀態
如果收到calibrate()訊息,系統將會移動到calibrating狀態
如果收到來自系統時鐘的訊號,系統則移動到正在收集儀
器資料的collecting狀態
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 42
氣象台的狀態圖
Operation
calibrate ()
Calibrating
calibration OK
Shutdown
startup ()
test ()
Waiting
Testing
transmission done
shutdown ()
test complete
Transmitting
clock
collection
done
reportWeather ()
Summarising
weather summary
complete
Collecting
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 43
物件介面規格




物件介面指定之後,物件和其他元件才可以平
行的進行設計
設計師應該避免直接設計介面的表示法,而應
該將它們隱藏在物件中
物件可能會有許多介面,用來表示方法所提供
的各項觀點
介面的規格通常是使用UML的類別圖來指定
,有時候也會使用Java來指定
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 44
氣象台的介面
interface We atherStation {
public void WeatherStation () ;
public void startup () ;
public void startup (Instrument i) ;
public void shutdown () ;
public void shutdown (Instrument i) ;
public void reportWeather ( ) ;
public void test () ;
public void test ( Instrument i ) ;
public void calibrate ( Instrument i) ;
public int getID () ;
} //WeatherStation
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 45
設計演化



將資訊隱藏在物件中,表示對某個物件進行變
更時其它物件不會受到非預期的影響
假設氣象台要加入一些空氣污染的監控裝置,
這些裝置可以採樣空氣,並且計算出大氣中不
同汙染物質的含量
這些空氣污染的讀數會跟著氣象資料傳回
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 46
所需變更



在 WeatherStation 中加入一個 ‘Air quality’ 物件
類別
在 WeatherStation 中加入一個 reportAirQuality
操作,並且將控制軟體修改成可以收集空氣污
染的讀數
加入一些用來表示空氣污染監控儀器的物件
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 47
空氣污染監控系統
WeatherStation
Air quality
identifier
reportWeather ()
reportAirQuality ()
calibrate (instruments)
test ()
startup (instruments)
shutdown (instruments)
NO Data
smokeData
benzeneData
collect ()
summarise ()
Pollution monitoring instruments
NO meter
SmokeMeter
BenzeneMeter
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 48
重點整理




OOD是一種軟體設計方法,設計中的基本元
件是以物件和物件的私有狀態,以及物件的操
作來表示
物件應該具有建構和檢查的操作,也可以對其
它物件提供服務
物件可以用循序或並行的方式製作
統一塑模語言(UML)提供的各種不同符號
可以用來記載或說明物件導向設計
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 49
重點整理



在物件導向設計程序中會產生各種不同模型,
包括靜態模型和動態模型
物件介面必須精確的定義才能讓其他物件使用
,物件的介面可以利用程式設計語言來描述,
例如Java
物件導向設計的優點是簡化系統演化過程
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 50
Team Project作業




畫出應用領域的concept class diagram (概念類
別圖)
畫出軟體設計的類別圖
畫出循序圖
下週交紙本
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 12
Slide 51