OOAD_04第4章物件導向分析與設計簡介

Download Report

Transcript OOAD_04第4章物件導向分析與設計簡介

第4章 物件導向分析與設計簡介
 4-1 物件導向的軟體系統開發
 4-2 物件導向分析與設計
 4-3 UML的物件導向分析與設計
 4-4 使用SIM執行UML塑模
4-1 物件導向的軟體系統開發
 4-1-1 傳統的軟體系統開發
 4-1-2 物件導向的軟體系統開發
 4-1-3 為什麼使用物件導向的軟體系統開發
4-1-1 傳統的軟體系統開發-說明
 傳統的軟體系統開發是將資料和操作分開來思考,著重於
如何找出解決問題的程序或函數,即演算法。例如:一家
銀行的客戶甲擁有帳戶A和B兩個帳戶,客戶甲在查詢帳戶
A的餘額後,從帳戶A提出1000元,然後將1000元存入帳戶
B。傳統應用程式開發建立的模型,如下圖所示:
4-1-1 傳統的軟體系統開發-函數呼叫
 在主程式main()是一序列的函數呼叫,首先呼叫
getBalance()函數查詢帳戶A的餘額,參數是帳戶名
稱,然後呼叫withdraw()函數從帳戶A提出1000元
後,呼叫deposit()函數將1000元存入帳戶B,如下
所示:
getBalance(A);
withdraw(A, 1000);
deposit(B, 1000);
4-1-2 物件導向的軟體系統開發-說明
 物件導向的軟體系統開發是將資料和操作一起思
考,其主要工作是找出參與物件和物件之間的關
係,並且透過這些物件的通力合作來解決問題。
 例如:針對上一節相同的銀行存提款問題,使用
物件導向軟體系統開發建立的模型,如下圖所示
:
4-1-2 物件導向的軟體系統開發-物件集合
 物件導向軟體系統開發因為是將資料和操作一起
思考,所以帳戶物件除了餘額資料外,還包含處
理帳戶餘額的相關方法:getBalance()、withdraw()
和deposit()方法,如下圖所示:
4-1-3 為什麼使用物件導向的軟體系統開發說明
 物件導向的軟體系統開發可以輕鬆擴充現有系統
來建立出大型的軟體系統,不同於傳統軟體系統
開發建立的系統,當成長到一定尺寸後,就會快
速增加系統的複雜度,讓開發者很難了解、撰寫
、維護和擴充軟體系統。
 換句話說,相同尺寸的大型軟體系統如果使用物
件導向方法,將比傳統方法建立的軟體系統來的
容易了解、撰寫、維護和擴充。
4-1-3 為什麼使用物件導向的軟體系統開發原因
 對應真實世界的物件:物件導向軟體系統是模擬真實世界
的物件,而不是內部的資料結構,開發者可以很容易了解
和維護別人建立的軟體系統。
 資訊隱藏(Information Hiding):物件導向軟體系統是一
個物件集合,每一個物件包含資料和處理資料的函數,將
實際處理的資料隱藏起來,稱為封裝(Encapsulation)。
當我們升級或維護軟體系統時,更改的物件是獨立單位,
並不會影響到軟體系統的其他部分。
 軟體元件的模組(Modularity):每一個物件都是可重複
使用的軟體元件,如同電腦硬體的隨插即用(Plug and
Play),將物件一一插入,就可以組合成軟體系統。不只
如此,我們還可以擴充軟體元件的物件,輕鬆使用在其他
專案來快速開發軟體系統。
4-2 物件導向分析與設計
 4-2-1 物件導向分析
 4-2-2 物件導向設計
 4-2-3 物件導向程式設計
4-2 物件導向分析與設計-說明
 物件導向程式設計是一種更符合人性化的程式設計方法,
它是使用物件來模擬現實生活的世界,因為我們本來就是
生活在物件的世界,思考模式也是遵循著物件導向方式。
 請注意!物件導向分析與設計的分野並不十分清楚,因為
使用的方法論不同,系統開發者可以自行依需要或實際情
況來決定其範圍,在這一節筆者區分物件導向分析和設計
的目的只是為了教學上的考量。
 筆者準備使用學生選課的一個簡單實例來說明物件導向分
析、設計與程式設計的基本過程,在本書後各章節筆者會
進一步說明物件導向分析、設計和搭配各種UML圖形建立
的模型。
4-2 物件導向分析與設計-問題
學生選課問題的描述
 學生在輸入學號進入系統後,顯示學生可選的課
程清單,學生在選擇指定課程後,系統檢查該課
程是否已滿,如果未滿,就註冊該課程,並且繼
續選課,直到學生結束選課為止。
4-2-1 物件導向分析-說明
 物件導向分析(Object-Oriented Analysis,OOA)
強調①如何從問題領域(Problem Domain)的描
述建立使用案例模型(Use Case Model),②然後
識別出物件,在抽象化成類別後建立領域模型(
Domain Model),③最後指定類別責任來建立概
念模型(Conceptual Model)。
4-2-1 物件導向分析-主要步驟
 在物件導向分析階段並不用考量實作細節,我們
主要是找出系統功能和服務,以便能夠作出對的
事情。事實上,物件導向分析就是在回答下列問
題,如下所示:
• 軟體系統能做什麼事?
• 在軟體系統中有哪些類別?
• 每一個類別負責什麼?
 上述三個問題對應物件導向分析的三個主要步驟
:建立使用案例模型(第1個問題)、建立類別(
第2個問題)和指定責任(第3個問題)。
4-2-1 物件導向分析建立使用案例模型(使用案例圖)
 在需求階段找出系統需求的功能與服務後,我們就可以建
立使用案例模型(Use Case Model),包含使用案例圖(
Use Case Diagram)和使用案例規格(Use Case
Specification)。使用案例圖是使用圖形化表示從問題領域
擷取的系統功能,例如:學生選課的使用案例圖,如下圖
所示:
4-2-1 物件導向分析建立使用案例模型(使用案例規格)
 例如:【選課】
使用案例的使用
案例規格,如右
所示:
4-2-1 物件導向分析建立類別
 在建立類別(Creating Classes)步驟是使用清單方式列出
系統所有可能的物件,然後將它抽象化成類別,稱為候選
類別(Candidate Classes)。在作法上,我們可以從使用案
例規格描述中,一一識別出可能的物件後,再抽象化成類
別,在第10章有進一步的說明。
 從候選類別的清單中,我們可以選出系統真正需要的類別
,刪除哪些不屬於系統的類別(可能只是屬性)。例如:
從學生選課問題可以找出學生(Student)、課程(Course
)、選課(Class)和註冊(Registration)4個類別來建立
領域模型的類別圖。
4-2-1 物件導向分析指定責任(說明)
 在指定責任(Assigning Responsibilities)步驟是指
定類別的責任,即類別主要的功能與服務,並且
列出需要哪些類別共同合作才能完成指定的責任
,也就是類別之間的關係。
 在作法上,我們可以使用CRC卡完成此步驟的工作
,CRC卡是Kent Beck和Ward Cunningham發展的技
術,CRC代表類別(Class)、責任(
Responsibilities)和合作(Collaborators)。
4-2-1 物件導向分析指定責任(CRC卡)
 例如:學生選課4個類別的CRC卡,如下圖所示:
4-2-1 物件導向分析指定責任(概念模型的類別圖)
4-2-2 物件導向設計-說明
 物件導向設計(Object-Oriented Design,OOD)
是進一步①決定類別屬性、行為和類別關係的細
部設計,以便在實作時能夠將事情做對,②其最
後建立的設計結果是設計模型(Design Model),
設計模型是一個已經完成到足以實作成程式碼的
模型。
4-2-2 物件導向設計-主要步驟
 事實上,物件導向設計主要是在回答下列問題,
如下所示:
• 如何保證類別已經知道它所需知道的所有資訊?
• 類別如何處理其指定的責任?
• 類別如何在系統之中進行溝通?
 上述三個問題是物件導向設計的二個步驟:指定
屬性與行為(前2個問題)和類別關係(最後1個
問題)。
4-2-2 物件導向設計-指定屬性與行為
 當進入此步驟時,相信每一個類別都已經指定責
任和合作關係,所以指定屬性與行為(Assigning
Attributes And Behaviors)步驟是將指定的責任與
合作轉換成詳細類別屬性的變數和行為的方法,
通常一個分析階段的功能可能轉換成1至多個設計
行為,即設計方法。
 在作法上,我們可以使用UML循序圖(Sequence
Diagram)和通訊圖(Communication Diagrams)
等互動圖來進一步分析責任與合作關係。
4-2-2 物件導向設計指定類別關係(說明)
 在指定類別關係(Assigning Relationships)步驟的
工作是指定類別之間更詳細的關係,包含:Is-a、
Has-a或Part-Of關係,詳見第2-4-3節的說明。
 最後,我們可以更新概念模型來建立設計模型(
Design Model)的類別圖。
4-2-2 物件導向設計指定類別關係(設計模型的類別圖)
4-2-3 物件導向程式設計-說明
 物件導向程式設計(Object-Oriented Programming
,OOP)是使用物件導向程式語言C++、C#和Java
等,將設計模型的類別圖轉換成實作的程式碼,
也就是建立實作模型(Implementation Model)。
4-2-3 物件導向程式設計-範例1
class Registration {
private Courses[] courses;
private Student student;
public boolean checkId() { return false; }
public Courses selectCourse() { return null; }
}
class Student {
private int stdId;
private Class class;
public int getId() { return 0; }
public Class getClass() { return null; }
}
4-2-3 物件導向程式設計-範例2
class Courses {
private int c_no;
private int c_name;
private int c_credit;
public boolean isAvailable() { return false; }
}
class Class {
private Student student;
public void registerCourse(Courses c_no) { }
public int getNumOfClass() { return 0; }
}
4-3 UML的物件導向分析與設計
 4-3-1 UML與物件導向分析與設計
 4-3-2 UML塑模過程的範例
4-3-1 UML與物件導向分析與設計UML塑模過程
 Rational統一流程的主要特點是使用案例驅動(
Use-Case Driven),以UML圖形來說,就是建立使
用案例圖來啟動物件導向分析與設計過程,我們
可以稱之為UML塑模過程,如下圖所示:
4-3-1 UML與物件導向分析與設計UML塑模過程說明1
 需求擷取:我們需要找出使用者的真正需求,也
就是系統提供的功能與服務。
 建立使用案例模型:以UML使用案例圖來描述從
問題領域擷取的系統需求,然後寫出使用案例圖
主要使用案例的描述和情節(Scenarios),也就
是使用案例的詳細故事。我們可以使用UML活動
圖描述流程來完成使用案例模型的建立。
 定義概念模型:在此步驟定義概念模型的類別圖
,這是一種簡化的類別圖。
4-3-1 UML與物件導向分析與設計UML塑模過程說明2
 建立互動圖:使用UML互動圖描述物件之間的訊
息傳遞,以便分析類別的屬性與行為和找出關係
。我們可以針對重要類別建立UML狀態機圖來顯
示狀態的轉換,一般來說,類別擁有3個以上狀態
變更才需要建立狀態機圖。
 定義設計模型:在此步驟是建立設計模型的類別
圖,我們可以從循序圖和通訊圖找出類別關係、
屬性和行為,然後更新概念模型建立設計模型的
類別圖。
4-3-1 UML與物件導向分析與設計UML塑模過程與物件導向分析與設計
 UML塑模過程是一種使用UML圖形來執行物件導
向分析與設計的過程。至於在UML塑模過程的哪
些步驟是物件導向分析?哪些步驟屬於物件導向
設計?如下圖所示:
4-3-2 UML塑模過程的範例-問題
 在這一節筆者準備使用
一個簡單實例來說明
UML塑模過程。因為物
件導向技術的精神是模
擬真實世界的東西,所
以,筆者準備建立一個
模擬電子鬧鐘的軟體程
式,如右圖所示:
4-3-2 UML塑模過程的範例-問題說明
 電子鬧鐘擁有LCD螢幕顯示時間,提供鬧鈴功能和
貪睡裝置,可以調整時間和設定鬧鈴時間。
 電子鬧鐘擁有5個操作按鈕,【設定】鈕可以設定
時間,按【設定鬧鈴】鈕2秒鐘調整鬧鈴時間,按
一下切換是否啟用鬧鈴,加減號鈕調整時間。當
鬧鈴響時,按上方【貪睡】鈕,可以貪睡5分鐘。
4-3-2 UML塑模過程的範例-需求擷取
 從問題領域(Problem Domain)進行需求擷取,
可以定義出系統提供的功能有:
•
•
•
•
1. 電子鬧鐘系統會讀取時間(Read Time)。
2. 電子鬧鐘系統會設定時間(Set Time)。
3. 電子鬧鐘系統會設定鬧鈴時間(Set Alarm Time)。
4. 電子鬧鐘系統會關閉鬧鈴聲(Cancel Alarm)。
4-3-2 UML塑模過程的範例建立使用案例模型(使用案例圖)
 在此步驟是繪出使用案
例圖來描述參與系統的
動作者和系統功能的使
用案例,這是以客戶與
使用者角度來顯示系統
功能,如右圖所示:
4-3-2 UML塑模過程的範例建立使用案例模型(使用案例規格)
 然後我們可以寫出主要
使用案例的詳細描述,
稱為使用案例規格(Use
Case Specifications)。筆
者僅以設定時間(Set
Time)使用案例為例,
其使用案例規格如右所
示:
4-3-2 UML塑模過程的範例建立使用案例模型(UML活動圖)
 情節是使用文字敘述描
述主流程。如果需要,
我們可以使用UML活動
圖來描述主流程,如右
圖所示:
4-3-2 UML塑模過程的範例-定義概念模型
 在這個步驟可以找出系統的類別,我們可以從使用案例規
格的描述中找出系統的物件,然後抽象化成類別來建立概
念模型,如下圖所示:
4-3-2 UML塑模過程的範例建立互動圖(說明)
 在此步驟的主要工作是描述物件之間的訊息傳遞
來找出類別屬性與行為的詳細設計,和進一步的
類別關係。UML互動圖的循序圖和通訊圖都可以
描述物件之間的訊息傳遞,其差異為循序圖是以
時間軸顯示物件之間的訊息傳遞;通訊圖是以空
間角度顯示物件之間訊息傳遞的路徑。
4-3-2 UML塑模過程的範例建立互動圖(循序圖)
 例如:設定電子鬧鐘時
間的循序圖,如下圖所
示:
4-3-2 UML塑模過程的範例建立互動圖(狀態機圖)
 UML狀態機圖可以顯示
物件的狀態變化,我們
可以透過狀態機圖來進
一步分析物件的狀態轉
變。例如:設定時間時
,LCDDisplay螢幕類別的
物件擁有多個閃爍狀態
,此物件的狀態機圖,
如右圖所示:
4-3-2 UML塑模過程的範例-定義設計模型
 在建立概念模型和循序圖等互動圖後,我們就可以從循序
圖找出類別屬性和行為的細節來更新概念模型,建立出最
後設計模型的類別圖,如下圖所示:
4-4 使用SIM執行UML塑模
 Software Ideas Modeler(SIM)塑模工具可以幫助
我們執行UML塑模,因為在同一個SIM專案可以建
立多個模型,以不同觀點來檢視系統,而且在每
一個模型之下,可以包含多個描述此模型的UML
圖形。
 基本上,我們可以使用兩種方式來執行UML塑模
,如下所示:
• 在SIM專案分別建立使用案例模型、概念模型(或分析
模型)和設計模型。
• 在SIM專案使用UML的4+1觀點,替每一個觀點建立模
型。