物件導向技術 - 長榮大學資訊管理學系

Download Report

Transcript 物件導向技術 - 長榮大學資訊管理學系

物件導向技術
Object Oriented Technology
1
內容大綱
• 導論
– 物件導向的基本概念
– 物件導向分析與設計及塑模工具
– 物件導向的系統開發方法
• 使用個案(Use Case)塑模
• 物件類別塑模
• 結論
2
導論
• 物件導向的基本概念
• 物件導向的演進(p.18-28可略)
• 物件導向的系統開發方法:Rational Unified
Process(RUP)
• 分析與設計及塑模工具:統一塑模語言(Unified
Modeling Language, UML)
3
Costs and Benefits of Reuse(再用或重用)
4
4
結構化vs.物件導向方法論
• 結構化的方法論
– 主要是以處理(Process,或稱流程)及資料為中心。
– 將問題分解成為一群處理。對於每個處理,如果其執行邏
輯還是很複雜,可以再將它分解成為更小的處理。
– 對於資料也是如此。
•物件導向的方法論
– 強調物件以及物件跟物件之間的關係。
– 物件將資料與處理(在物件導向的世界,稱為操作或是方
法)封裝起來。
5
物件導向技術
• 物件導向分析
– 定義出系統的模型。主要是利用類別或是概念模型以及物
件的觀點來分析、檢驗系統的需求。
• 物件導向設計
– 定義出一個以物件為設計規範的系統實作藍圖。主要在勾
勒出邏輯的、具體的,以及靜態的、和動態的系統模型。
• 物件導向程式設計
– 使用物件導向程式語言,依據分析與設計的要求與規範來
開始實作系統。
6
物件(Object)
• 物件導向的基本思維單位
• 物件是一個具有狀態、行為與識別的實體或抽象化
概念,且其行為會影響其狀態者。
– 狀態:物件在任何時間點的狀況,影響著它會如何進行。
– 行為:物件可以做些什麼?它如何回應事件與刺激?
– 辨識性:每個物件都是獨一無二的。
7
物件(Object)
• 將前述狀態、行為與識別結構化後,物件包括
– 名稱
– 屬性
– 操作或稱方法(Method)
• 例如李四之物件,有年齡、朋友、雙手與雙腿等為
其屬性,而跳躍與走路為其操作。
8
類別(Class)
• 定義:具有相同結構及行為的物件所
組成的集合。具一種定義、樣板或模
型,描述一群具有相同特徵(例如,
屬性、操作、語意)的物件。
– 是物件經分類或抽象化後所得的結果,也
就是剔除物件間的差異而只考慮其相同的
性質後,將這些物件組成一個群體稱為類
別。例如,人。
– 使用一組相同的屬性和操作來描述一個或
多個物件,包含如何從類別中建立新的物
件。
– 有時亦稱為物件類型,類別中的任一物件
稱為該類別之案例,因此物件與案例常被
互用(視為同義詞)。
9
分類(Classification)與繼承(Inheritance)
• 分類:萬事萬物基本上是依層級來分類,如界門綱目科
屬種。
• 類別間之關係可利用一般化(generalization)與特殊化
(specialization)的原則,找出繼承之特性,萃取相關子
類別的相同屬性和操作,並將之歸類為一個父類別來達
成。
10
特殊化層級架構
更一般化
父(supper或譯為超)
類別
人
員工
月薪人員
客戶
週薪人員
駕駛
清潔工
供應商
時薪人員
業務助理
更特殊化
子(sub)類別
分類(Classification)與繼承(Inheritance)
• 此概念之運用對軟體工程有
革命性之影響
– 使用一般化,能建立邏輯結
構,讓類別間的相似或相異
程度更為精確。
– 層級架構可以延伸,使得適
應變動狀況相對簡單。
– 達成程式碼再用與減少重複
描述,產生可靠度較高的軟
體等。
12
分類(Classification)與繼承(Inheritance)
13
封裝(Encapsulation)
• 將資料及操作此資料的所有方法包裝成一個物件,
稱之為「封裝」。封裝所形成的物件結構可分為兩
部分:
– 定義物件外觀行為的介面部分;
– 存放抽象化的結果以及如何達成外觀行為的實作部分。
• 封裝將物件的實作細節隱藏,使其與外界環境隔離,
而只允許該物件所包含之操作修改其資訊,稱為資
訊隱藏(Information Hiding)。
• 使用物件時,僅需知道物件提供何種操作,而不需
知道其內部之資訊或行為是如何表達或執行。外界
之物件僅能透過訊息傳遞,要求該物件提供服務,
而無法逕自改變該物件之資料內容。
• 封裝之特性使物件導向的系統較容易維護。
14
同名異式(Polymorphism)與超荷(Overload)
同名異式:指「多種型式」,簡稱「多型」,即利用相同名
稱的操作,但以不同的方式處理不同類別的資料。
超荷:在同一個類別中,用相同名稱的操作處理資料,然而
每個操作的參數個數、參數資料類型不可完全相同。有時
又稱靜態多型。
運用多型或超荷之特性在程式設計上,可允許不同(或相同)
的物件(或類別)定義相同的操作名稱,俟程式執行時依
動態連結的方法,判斷訊息參數的個數、種類與資料類型
來決定運作的物件或操作。
運用多型或超荷之目的,是希望以相同的介面來處理不同的
物件或相同的物件但不同的操作方式,以簡化系統發展的
複雜性並增加其彈性。
15
類別間之繼承關係與多型
16
Polymorphism in Resize Operations
<<entity>>
Campaign
title
campaignStartDate
campaignFinishDate
getCampaignAdverts()
addNewAdvert()
<<entity>>
Campaign
title
campaignStartDate
campaignFinishDate
getCampaignAdverts()
addNewAdvert()
17
OO演進
18
物件導向的系統開發方法之啟始
• Grady Booch於1986年,率先發表物件導向的系
統開發方法,以開啟物件導向在軟體工程上應用
的新頁。
• 許多物件導向系統分析與設計方法論陸續發表,
較著名如:
– Rambaugh, J.的物件塑模技術
– Jacobson, I.的物件導向軟體工程
– RUP模式
19
物件導向的系統開發方法-Booch方法
• 將系統開發過程分成觀念期、分析期、設計期、
進化期與維護期等反覆的階段。
– 觀念期:確定軟體之核心需求,例如找出系統之行為
者、使用個案與問題描述等。
– 分析階段:從問題領域的字彙中發掘類別與物件;
– 設計階段:應用邏輯模式與實體模式,幫助建構系統
架構。
20
物件導向的系統開發方法
• 靜態模式表達系統之靜態行為
– 邏輯模式以類別圖與物件圖定義系統的邏輯概念;
– 實體模式以模組圖和處理圖表達系統之軟硬體架構。
• 動態模式
– 以狀態轉移圖和互動圖來描述系統之動態行為。
• 上述六種圖示中,類別圖從系統邏輯的觀點,描
述與系統有關之類別和類別間之關係;物件圖用
於表示在系統之邏輯設計上,存在之物件和物件
間之互動與訊息傳遞之關係;而互動圖用於追蹤
物件圖中情節的執行,例如訊息傳遞與操作之關
係。
21
物件導向的系統開發方法-處理圖
• 用以表示系統實體設計上,處理器間
之配置,單純的處理圖可表達一個系
統的處理架構 。三個重要元件是:
– 處理器以
表示
– 設備(以
表示)
– 連結(以線條表示)。
例如把一個大系統分解成四個部分,分
別稱為A、B、C與D,每個部分由一
個工作站來完成,且僅A可分別與B、
C、D連結,B、C與D間不能直接互
通。為簡化圖示,設備可不表示如右。
22
物件導向的系統開發方法-模組圖
• 用以表示系統之實體設計上,模組
內類別與物件的配置。有四元件:
–
–
–
–
主程式
規格
主體
子系統
• 假設有六個模組分別為A、B、C、
D、E與F,其中A與B表示規格說明,
且僅提供共同之類型與限制,而其
他四個模組表示規格與主體且組成
一群,其中D與B相依於C;E與F相
依於D;A相依於D、E與F。
23
物件導向的系統開發方法-狀態轉移圖
• 用於表示在已知之類別狀態中,類別從某一狀態轉
移到另一狀態之事件,以及因狀態改變而導致之行
動,也就是用它來表示系統之資料被存取與功能被
執行的程序中,時間相依的系統行為。
• 在 On-line 系統與 Real-time 系統,常用於塑模功
能與資料間之時間相依關係。
24
物件導向的系統開發方法-Rumbaugh 之
OMT方法
• 將系統開發過程分成三階段。
• 觀念形成:以環境圖描述系統範圍,並以使用個案
描述行為者與系統之互動。
• 物件導向分析:以觀念形成階段之結果,進一步的
建構物件模式、動態模式與功能模式等。
• 物件導向設計:包含系統設計與物件設計。
25
物件導向的系統開發方法-Jacobson方法
• 將系統開發過程分成三階段:
– 分析過程:瞭解系統功能需求,發展成一個完整且可修改
與維護之物件架構,並產出:
• 需求模式:包括使用個案模式與介面描述,
• 分析模式:將需求模式中之系統以物件圖或類別圖表達
成一個完整、穩健且具備更改彈性的物件架構,包括系
統擁有之資訊、行為與系統對外界之介面。
– 建構過程:依分析過程產生之模式建構系統,該過程分成
設計與實施兩步驟,並分別產出設計模式與實施模式。
26
物件導向的系統開發方法-RUP (Rational
Unified Process)模式
• 於1998年由Jacobson等人提出。
• 結合螺旋模式的概念,以反覆與漸增的原理進行軟
體開發,每一次的反覆需產出一個可運作的系統版
本,並評估風險,以盡早發現問題。
• 可分動態與靜態兩個構面說明:
– 動態面:分初始、詳述、建構與轉移四主要軟體發展階段,
構成一個反覆週期。
– 靜態面:包括企業模型、需求、分析與設計、實作、測試、
配置、專案管理、組態管理與變動管理、環境等九個核心
流程。其中,前六項是軟體工程工作,而後六項是管理支
援工作。
27
物件導向的系統開發方法-RUP模式(cont’d)
• 一項核心流程元素主要描述
– 誰做了什麼
– 如何做
– 什麼時候做
• 每個核心流程以四種塑模元件來描述:
–
–
–
–
工作人員
活動
產出
工作流程
28
物件導向的系統開發方法
29
Rational Unified Process(RUP)
• Grady Booch, Jim Rumbaugh以及Ivar Jacobson於1998
年提出了Rational Unified Process (RUP) - 物件導
向系統開的方法論。
• 強調重點
– 由使用案例驅動(Use-Case Driven)
• 從使用者的角度,捕捉系統提供的功能
– 以架構為中心(Architecture Centric)
• 定義分明的(4+1觀點)系統架構藍圖
– 反覆且漸進(Iterative and Incremental)
• 週期性的、小型、循序式的開發過程。每期的結果做為
下個週期的輸入。
30
RUP模式的構面
• 水平軸代表時間,顯示進行中的動態組成面,並且從循環(cycle),階段(phase),
反覆(iteration)等觀念來描述。
• 垂直軸代表進行中的靜態組成面,利用活動,產出,工作流程等觀念來描述
31
RUP模式生命週期階段、目標與里程碑
32
統一塑模語言(Unified Modeling
Language)
33
物件導向分析與設計及塑模工具-統一塑模語
言(Unified Modeling Language)
• Rational公司整合Booch、Rumbaugh與
Jacobson三種方法而提出的物件導向塑模工具,
該語言最早可說起源於Booch 與 Rumbaugh在
1995年10月提供給OOPSLA的統一方法,當初的
版本是 Version 0.8。
• 1996年,Rational公司將統一方法加入Jacobson
的研究(例如使用個案模式等)及其他,並將版
本更新為Version 0.9,且正式定名。
34
UML之版本與年代演進
35
UML五 (4+1)連鎖觀點
• Booch 等人(1999)從概念面提出的軟體系統結構
觀點(view)︰
36
UML五 (4+1)連鎖觀點
• 使用個案觀點(Use Case View)
– 從系統外部的使用者角度,表達系統所提供的功能。並不實際描述軟
體系統的組織。
• 設計觀點(Design View)
– 描繪系統的靜態結構及動態行為,作為系統應提供使用者之服務及功
能的解答。圍繞在類別,介面以及物件的合作等等設計問題上。
• 流程觀點(Process View)
– 描繪出組成系統的平行以及同步機制之執行緒(thread)以及程序
(process)。強調系統的性能、擴充性等非功能性需求。
• 實施觀點(Implementation View)
– 以模組或元件來顯示設計觀點的物件是在那一個模組或元件中實作。
• 部署觀點(Deployment View)
– 描繪系統在執行時,各個組成元件的實際佈置與安裝。強調系統執行
環境的硬體拓樸結構。
37
UML五 (4+1)連鎖觀點之靜態vs.動態結構
• 4+1中的每一個觀點又可區分為靜態面以及動態面,
均用UML的九種圖形來表達。
靜態模型
動態模型
使用案例觀點
使用案例圖
互動圖、狀態圖、活動圖
設計觀點
類別圖、物件圖
互動圖、狀態圖、活動圖
處理流程觀點
類別圖、物件圖
互動圖、狀態圖、活動圖
實作觀點
元件圖
互動圖、狀態圖、活動圖
部署觀點
部署圖
互動圖、狀態圖、活動圖
UML九種塑模圖形
• 使用個案圖
• 類別圖
• 物件圖
• 循序圖
• 合作圖
• 狀態圖
• 活動圖
• 元件圖
• 部署圖
39
UML塑模工具
• 使用個案圖
– 從使用者之觀點描述系統的行為者與系統間之互動行為與關係。
從內部觀點來看,使用個案可描述系統做什麼?從外部觀點來看,
它可描述行為者與系統如何互動?
• 類別圖
– 用以表示系統存在之物件型態(或稱類別)及各物件型態間的靜
態資料結構與邏輯關係,也表達類別之屬性、操作與類別間連結
之限制等。
• 物件圖
– 用來描述一系統於某一時間點的靜態資料結構,該圖由一群相關
之物件及其連結所組成,以表示系統在某一時間點之例子。
40
UML塑模工具
• 循序圖
– 描述系統運作時物件間的互動行為,且著重以時間之先
後順序為主軸,以表達物件間的訊息傳遞與處理程序。
一個循序圖會有一個與之對應的合作圖,但表達的重點
與方式不同。
• 合作圖
– 從 Booch的物件互動圖與 Rumbaugh 的物件導向資料
流程圖改進而成,該圖主要表達相關物件間之連結結構,
並能同時展現物件間的資料流程、控制流程與訊息傳遞
的活動。因此,合作圖是一個巨觀的總流程,能同步表
達資料的產生與資料轉變的過程,以改進傳統資料流程
圖中只著重資料流的缺點。
41
UML塑模工具
• 狀態圖
– 結合 Booch 的狀態轉移圖與 Rumbaugh 的動態模式而
成,用以表達物件在其生命週期中的狀態變化。狀態
圖是以微觀物件為主,細分物件所發生的各項事件,
並表達物件生命週期之狀態轉變及活動結果。
• 活動圖
– 狀態圖的一種變異,該圖表達涉及於執行某一作業行
為中之活動。一個活動圖描述一群循序與同步的活動,
一個活動狀態表示一個工作流程步驟或一個運算的執
行活動。
42
UML塑模工具
• 元件圖
– 起源於 Booch 的模組圖,用以說明系統設計過程各類
別與物件的配置,以及敘述軟體元件間的組織架構和
相依關係。元件是開發和執行過程之實際物件類別,
將可分解的實際基本單位模組化,這些基本單位包括
模組並擁有特性和明確定義的介面。
• 部署圖
– 起源於 Booch 的處理圖,它用來說明系統各處理器、
處理元件的配置、關聯,以及同一處理器內執行處理
的時程安排等。
43
物件導向分析與設計塑模
• 需求塑模
– 主要是應用使用個案圖、活動圖(或流程圖)、藍圖、
資料詞彙與介面元件等工具進行使用者與企業需求塑
模,此活動可包含處理使用個案觀點靜態面之工作。
• 物件資料結構塑模
– 主要的工具是類別圖與物件圖,此活動可包含處理設
計觀點靜態面之工作。
• 物件互動行為塑模
– 主要的工具是循序圖與合作圖。
44
物件導向分析與設計塑模
• 作業行為塑模
– 主要的塑模工具是活動圖與狀態圖。
– 物件互動行為塑模與作業行為塑模,這兩個活動可包
含處理各觀點之動態面工作。
• 使用者介面塑模
– 主要的塑模工具是介面結構圖、介面藍圖與元件規格、
狀態圖與轉換表。
• 系統元件與結構塑模
– 主要的工具是元件圖與部署圖,這個活動可包含實施
觀點與部署觀點之靜態工作。
45
物件導向塑模活動及塑模工具
46
物件導向分析與設計與塑模工具之關係
47
使用案例圖
Use Case
48
使用案例(Use Case)
• 針對使用者在不同情境下,對系統需求所產生的
系統行為或系統功能描述。
• 參與者(Actors):與系統互動的外部實體。包含能
與系統交換資訊的人和物。
• 使用者(Users)是任何使用系統的人,而參與者則
代表著使用者所扮演的角色。同一個使用者可以
扮演多種角色。例如:威廉同時扮演著老師和指
導教授兩種角色。
49
使用案例
50
Definitions and Symbols符號與定義
Use Case使用案例
Actor參與者
Boundary系統範圍
Connection連結
<<include>>
Include relationship
Extend relationship
<<extend>>
51
51
符號與定義
• 系統範圍內包含所有相關的使用案例。
–
–
–
–
系統範圍為系統和外部環境的分隔線。
使用案例在系統範圍內。
參與者在系統範圍外。
以方形形狀代表。
• 連結為參與者和使用案例間的關聯。
–
–
–
–
描述使用的關係。
連結並非資料流。
以線條連結參與者和使用案例。
使用案例間的連結為箭號。
52
符號與定義
• 延伸(Extend)關係:一個使用案例會為另外一個使
用案例增加新的行為或動作。
– 藉由新增行為或動作以延伸使用案例。
– 特殊的使用案例可延伸通用的使用案例。
• 包含(Include)關係:一個使用案例使用另一個使用
案例的功能。
– 標明該使用案例可為另一個使用案例使用。
– 連結到共用功能, 可為任一個使用案例使用。
53
使用案例延伸關係
• 「客戶新增訂單,但只有在執行了確認訂購的動
作後,「倉庫出貨清單」以及「計算訂購金額與
營業稅」才會被延伸(或安插)到新增訂單的使
用案例中。
執行ATM交易
_______
extension points
選擇
顧客
顧客使用自動提款機
(ATM)時,可以選擇
線上輔助說明,以查看
相關操作明細
《extends》
使用線上輔助說明
54
使用案例包含(include)關係
• 一個使用案例A在執行的過程中,一定會使用到使用案例
B,案例A會包含(使用)案例B
《include》
案例A(包含者)
案例B(被包含者)
提款
《include》
顧客
更新帳戶餘額
55
使用案例相依關係
指一個使用案例必須等待另一個使用案例執行完後才能執行
的關係 。
–有助於確定使用案例的發展
順序。
–以帶有箭頭的直線表示,開
始於一個使用案例,並指向
它所依賴的使用案例。
–相依關係標記為
<<depends on>>。
56
繼承
使用案例繼承關係
當兩個或以上的角色分享相同行為時,亦即啟動相同的使用
案例()
57
使用案例繼承關係(補充)
建立一個共同的使用案例,讓其他專
屬的使用案例繼承此一共同使用案例
可做的活動內容
建立一個共同的抽象角色,讓其他專
屬角色繼承此一抽象角色可做的行為
使用案例1
訂票
使用案例2
動作項目3
電話訂票
網路訂票
使用案例3
動作項目1
58
動作項目2
動作項目4
撰寫使用案例
• 使用案例的內容可用一段簡單的文字來描述它。
也有人建議使用樣板(template)來讓使用案例呈現
該具備的重要資訊。
• 其他需要的資料包含:
– 使用案例撰寫的詳細程度(詳細到簡略)。
– 組織內部或外部的哪些成員是系統成功的關鍵人員。
– 哪些組織或環境事件可能觸發使用案例以及系統無法
運作時可能產生的後果。
59
電子商務應用:塑模過程使用使用案例
• 吉姆決定嘗試以使用案例圖來對松谷家具的網路商
店系統進行塑模。
– 他找出六個高階的系統功能作為使用案例。
– 他詳細列出了網路商店網站的主要特色與相對應功能(如
表6-5) 。
– 這些功能代表網路商店的活動。
60
圖 6-26 網路商店使用案例圖
61
物件與類別圖
Object and Class Diagram
62
物件與類別圖
• 物件:一個在應用領域有明確定義的實體,並且
有狀態(資料)、行為和識別特性。
• 狀態:包含物件的特性(屬性和關係)以及這些
特性的值。
• 行為:一個物件如何行動和反應的表示方法。
• 身分:獨特性,沒有任何兩個物件是相同的。
• 物件類別(或簡稱類別)具有相同(或相似)屬
性、關聯和行為(方法)的邏輯物件群組。
63
物件與類別的表示方式
• 類別圖:顯示物件導向模型的靜態結構:物件類
別、類別內部的結構以及類別間關係。
• 類別如同E-R中的實體。
• 操作:由類別的所有實例,藉由訊息的傳送引發
物件的行為,所提供的功能或服務。
• 封裝:以外在介面呈現物件,而隱藏內部實作的
細節之技術。
64
操作的種類
• 建構子操作:建立類別的新實體的操作。
• 查詢操作:可存取物件狀態但是不能改變狀態的
操作。
• 更新操作:改變物件態的操作。
• 範圍操作:應用於類別而非用於物件實體操作。
65
關聯的表示方式
• 關聯:物件類別的實例間的關係。
• 關聯角色:每個關聯會有兩個端點,於端點上標
示角色名稱。
• 多重性:指明有多少個物件參與關聯。
– 0…10 代表最小為0最大為10
– 1,2 代表可為1或2
– * 代表任何數字
• UML中的關聯如同E-R中關係,而UML中的多重
性如同E-R中的基數。
66
關聯的表示方式
圖 8-24 不同關係度下的關聯範例
67
關聯類別的表示方式
• 關聯類別:當關聯本身具有屬性、操作或是當它
參與其他類別間關係。
– UML中的關聯類別如同E-R中的關聯實體。
– 一般化和繼承透過UML中的父類別/子類別實作,在
E-R中則是超型態/子型態。
68
一般化的表示方式
• 抽象類別:本身無直接實例,但是它們子類別卻
卻可以有直接實例。
• 具象類別:擁有直接實例的類別。
69
一般化的表示方式
• UML字彙
–
–
–
–
重疊: 繼承者可以繼承一個以上的子類別。
分離:繼承者無法繼承一個以上的子類別。
完全:所有子類別皆已定義。
非完全:部分子類別已經被定義,但是已知子類別清
單並不完整。
• 類別範圍屬性:描述全體類別的共用數值,而非
單一實例的特定數值。
• 抽象操作:定義操作的形式或協定,但不包含真
正的實作方法。
• 方法:操作的實作。
70
一般化的表示方式
圖 8-30 多型、抽象操作,類別範圍屬性和排序
71
聚合的表示方式
• 聚合:一種元件物件聚合物件間的從屬關係。
– 在聚合端使用空心的菱形來表示。
• 組合:只屬於一個整體物件的零件物件,與整體
物件同生共死。
– 實心的菱形代表兩個物件的關係是組合。
72
聚合和組合
圖 8-31 聚合和組合
73
結論
• 物件導向之系統開發過程是一種反覆的程序,主要包
括需求分析、系統分析與設計、實施與測試等階段。
• 需求分析主要以使用個案圖作為表達工具;而系統分
析與設計主要以類別圖、物件圖、循序圖、合作圖、
狀態圖、活動圖、元件圖與部署圖等表達。
• 物件導向應用一些重要的觀念包括物件、類別、封裝、
繼承與同名異式及超荷等,使物件導向系統有別於結
構化之系統。由於物件導向技術之引進,使軟體之開
發與維護更有效率,亦提升了程式的再用性與可維護
性。
74
結構化vs.物件導向塑模工具
75