第九章 物件導向技術
內容大綱 學習目標 第一節 導論 第二節 物件導向的基本概念 第三節 物件導向的系統開發方法 第四節 物件導向分析與設計及塑模工具 第五節 結論
學習目標 詳讀本章,你至少能瞭解: 物件導向的基本概念。 物件導向系統開發的過程與產出。 物件導向分析與設計的塑模工具。
導論 物件導向技術是繼結構化技術之後,系統開發上的另一新思維典範。 物件導向之觀念起源於模擬語言,以物件模式來描述真實系統,並將資料抽象化、封裝、繼承、同名異式與超荷的觀念融入於物件系統開發中。
物件導向的基本觀念(1/9) 物件導向的重要基本觀念 物件 類別 封裝 繼承 同名異式 超荷
物件導向的基本觀念(2/9) 物件 物件是物件導向的基本思維單位,物件是一個具有狀態、行為與識別的實體或抽象化概念,且其行為會影響其狀態者。 物件包括 名稱 屬性 操作或稱方法 例如李四之物件,有年齡、朋友、雙手與雙腿等為其屬性,而跳躍與走路為其操作。
物件導向的基本觀念(3/9) 類別 類別是具有相同結構及行為的物件所組成的集合。一個類別是一種定義、樣板或模型,它描述一群具有相同特徵(例如,屬性、操作、語意)的物件。 類別是物件經分類或抽象化後所得的結果,也就是將物件抽象化,剔除物件間的差異而只考慮其相同的性質後,將這些物件組成一個群體稱為類別。例如,人。
圖9-1 類別之表示
物件導向的基本觀念(4/9) 類別使用一組相同的屬性和操作來描述一個或多個物件,包含如何從類別中建立新的物件。類別有時亦稱為物件類型,類別中的任一物件稱為該類別之案例,因此物件與案例常被互用(視為同義詞)。
物件導向的基本觀念(5/9) 封裝 物件導向技術將資料及操作此資料的所有方法包裝成一個物件,稱之為「封裝」。封裝所形成的物件,其結構可分為兩部分,一是定義物件外觀行為的介面部分;另一則是存放抽象化的結果以及如何達成外觀行為的實作部分。
物件導向的基本觀念(6/9) 封裝將物件的實作細節隱藏,使其與外界環境隔離,而只允許該物件所包含之操作修改其資訊,稱為資訊隱藏。物件之操作執行物件之行為,並可修改物件之資訊。 使用物件時,僅需知道物件提供何種操作,而不需知道其內部之資訊或行為是如何表達或執行。外界之物件僅能透過訊息傳遞,要求該物件提供服務,而無法逕自改變該物件之資料內容。 封裝之特性使物件導向的系統較容易維護。
物件導向的基本觀念(7/9) 繼承 繼承是類別間之關係,在此關係中,某類別之資料結構與行為可供其關係中之類別分享。 繼承之特性可利用一般化與特殊化的原則,萃取相關子類別的相同屬性和操作,並將之歸類為一個父類別來達成。 在物件導向技術中,繼承概念之運用對軟體工程有革命性之影響,如達成程式碼再用與減少重複描述,產生可靠度較高的軟體等。
圖9-2 類別間之繼承關係
物件導向的基本觀念(8/9) 同名異式與超荷 同名異式意指「多種型式」,簡稱「多型」,即利用相同名稱的操作,但以不同的方式處理不同類別的資料。 超荷就是在同一個類別中,用相同名稱的操作處理資料,然而每個操作的參數個數、參數資料類型不可完全相同。超荷有時又稱靜態多型。
圖9-3 類別間之繼承關係與多型
物件導向的基本觀念(9/9) 運用多型或超荷之特性在程式設計上,可允許不同(或相同)的物件(或類別)定義相同的操作名稱,俟程式執行時依動態連結的方法,判斷訊息參數的個數、種類與資料類型來決定運作的物件或操作。運用多型或超荷之目的,是希望以相同的介面來處理不同的物件或相同的物件但不同的操作方式,以簡化系統發展的複雜性並增加其彈性。
物件導向的系統開發方法(1/13) Grady Booch於1986年,率先發表物件導向的系統開發方法,以開啟物件導向在軟體工程上應用的新頁。接著,又有許多物件導向系統分析與設計方法論陸續的被發表,使物件導向的觀念在軟體工程上的應用更臻完整,其中較著名的如: Rambaugh, J.的物件塑模技術 Jacobson, I.的物件導向軟體工程 RUP模式
物件導向的系統開發方法(2/13) Booch方法
圖9-4 Booch之物件導向開發程序
物件導向的系統開發方法(3/13) 邏輯模式定義系統的邏輯概念,以類別圖與物件圖表示之;實體模式表達系統之軟硬體架構,以模組圖和處理圖表示之。 上述兩模式均屬於靜態模式,僅能表達系統之靜態行為,因此Booch另提出動態模式,並以狀態轉移圖和互動圖來描述系統之動態行為。
物件導向的系統開發方法(4/13) 上述六種圖示中,類別圖從系統邏輯的觀點,描述與系統有關之類別和類別間之關係;物件圖用於表示在系統之邏輯設計上,存在之物件和物件間之互動與訊息傳遞之關係;而互動圖用於追蹤物件圖中情節的執行,例如訊息傳遞與操作之關係。 處理圖用以表示系統實體設計上,處理器間及其處理間之配置,單純的處理圖可表達一個系統的處理架構 (Booch, 1994)。處理圖之三個重要元件是:處理器(以 表示) 、設備(以 表示)與連結(以線條表示)。
物件導向的系統開發方法(5/13) 例如把一個大系統分解成四個部分,分別稱為A、B、C與D,每個部分由一個工作站來完成,且僅A可分別與B、C、D連結,B、C與D間不能直接互通。為簡化圖示,設備可不表示,因此該處理圖可表示成如圖9-5。
圖9-5 處理圖範例
物件導向的系統開發方法(6/13) 模組圖用以表示系統之實體設計上,模組內類別與物件的配置。模組圖有四個主要元件:主程式(以 表示)、規格(以 表示)、主體(以 表示)與子系統(以 表示)。 假設有六個模組分別稱為A、B、C、D、E與F,其中A與B表示規格說明,且僅提供共同之類型與限制,而其他四個模組表示規格與主體且組成一群,其中D與B相依於C;E與F相依於D;A相依於D、E與F,則其模組圖可表示成圖9-6。
圖9-6 模組圖範例
物件導向的系統開發方法(7/13) 狀態轉移圖用於表示在已知之類別狀態中,讓類別從某一狀態轉移到另一狀態之事件,以及因狀態改變而導致之行動,也就是用它來表示系統之資料被存取與功能被執行的程序中,時間相依的系統行為。 在 On-line 系統與 Real-time 系統,狀態轉移圖常被用於塑模功能與資料間之時間相依關係。
圖9-7 狀態轉移圖範例
物件導向的系統開發方法(8/13) Rumbaugh 之OMT方法 觀念形成主要是以環境圖描述系統範圍,並以使用個案描述行為者與系統之互動。 物件導向分析是以觀念形成階段之結果,進一步的建構物件模式、動態模式與功能模式等。 物件導向設計包含系統設計與物件設計。
物件導向的系統開發方法(9/13) Jacobson方法 Jacobson的方法將系統開發過程分成分析、建構與測試三個階段,如圖9-8所示。 分析過程主要瞭解系統之功能需求,進一步發展成一個完整且可修改與維護之物件架構,並產出需求模式與分析模式。 建構過程主要依分析過程產生之模式建構系統,該過程分成設計與實施兩個步驟,並分別產出設計模式與實施模式。
圖9-8 Jacobson的系統開發過程與產出
物件導向的系統開發方法(10/13) 上述各模式中,需求模式包括使用個案模式與介面描述,其表達針對系統之功能需求,例如系統的行為與限制。 分析模式將需求模式中之系統表達成一個完整、穩健且具備更改彈性的物件架構,包括系統擁有之資訊、行為與系統對外界之介面,且以物件圖或類別圖表示之。分析模式之表達應獨立於真實的實施環境,因為許多改變之情況是來自於實施環境之改變。
物件導向的系統開發方法(11/13) RUP模式於1998年由Jacobson等人提出。該模式結合螺旋模式的概念,以反覆與漸增的軟體發展原理進行軟體開發,且每一次的反覆需產出一個可運作的系統版本,並在每一個反覆週期評估風險,以盡早發現問題。 RUP模式可由動態與靜態兩個構面來說明系統開發專案之實施階段與核心工作。
物件導向的系統開發方法(12/13) RUP模式的動態面把軟體開發依序分成四個主要階段:初始、詳述、建構與轉移。這四個階段構成一個週期,週期可反覆進行,每個週期內之各階段也可以視情況反覆進行。 RUP模式的靜態面結構主要表達成九個核心工作流程:企業模型、需求、分析與設計、實作、測試、配置、專案管理、組態管理與變動管理、環境等。其中,前六項是軟體工程工作,而後六項是管理支援工作。
物件導向的系統開發方法(13/13) 一項核心流程元素主要描述誰做了什麼、如何做和什麼時候做。 RUP模式用四種塑模元件來描述每個核心流程工作:工作人員、活動、產出、工作流程。
圖9-9 RUP模式的構面
表9-1 RUP模式生命週期階段、 目標與里程碑
物件導向分析與設計及塑模工具(1/16) 統一塑模語言是Rational公司整合Booch、Rumbaugh與Jacobson三種方法而提出的物件導向塑模工具,該語言最早可說起源於Booch 與 Rumbaugh在1995年10月提供給OOPSLA的統一方法,當初的版本是 Version 0.8。 1996年,Rational公司將統一方法加入Jacobson的研究(例如使用個案模式等)及其他,並將版本更新為Version 0.9,且正式改名稱為統一塑模語言。
圖9-10 UML之版本與年代演進
物件導向分析與設計及塑模工具(2/16) 統一塑模語言是一種規格化、視覺化及文件化的軟體塑模語言,共使用以下圖形進行塑模: 使用個案圖 類別圖 物件圖 循序圖 合作圖 狀態圖 活動圖 元件圖 部署圖
物件導向分析與設計及塑模工具(3/16) 使用個案圖 UML之使用個案圖是引用Jacobson方法中的使用個案模式,從使用者之觀點描述系統的行為者與系統間之互動行為與關係。從內部觀點來看,使用個案可描述系統做什麼?從外部觀點來看,它可描述行為者與系統如何互動?
物件導向分析與設計及塑模工具(4/16) 類別圖 UML之類別圖是引用Booch與Rumbaugh方法論的類別圖,主要用以表示系統存在之物件型態(或稱類別)及各物件型態間的靜態資料結構與邏輯關係,也表達類別之屬性、操作與類別間連結之限制等。 物件圖 UML之物件圖是用來描述一系統於某一時間點的靜態資料結構,該圖由一群相關之物件及其連結所組成,以表示系統在某一時間點之例子。
物件導向分析與設計及塑模工具(5/16) 循序圖 UML之循序圖是結合Booch的互動圖與Rumbaugh的訊息追蹤圖而成,主要用以描述系統運作時物件間的互動行為,且著重以時間之先後順序為主軸,以表達物件間的訊息傳遞與處理程序。一個循序圖會有一個與之對應的合作圖,但表達的重點與方式不同。
物件導向分析與設計及塑模工具(6/16) 合作圖 UML之合作圖是從 Booch的物件互動圖與 Rumbaugh 的物件導向資料流程圖改進而成,該圖主要表達相關物件間之連結結構,並能同時展現物件間的資料流程、控制流程與訊息傳遞的活動。因此,合作圖是一個巨觀的總流程,能同步表達資料的產生與資料轉變的過程,以改進傳統資料流程圖中只著重資料流的缺點。
物件導向分析與設計及塑模工具(7/16) 狀態圖 UML之狀態圖是結合 Booch 的狀態轉移圖與 Rumbaugh 的動態模式而成,用以表達物件在其生命週期中的狀態變化。狀態圖是以微觀物件為主,細分物件所發生的各項事件,並表達物件生命週期之狀態轉變及活動結果。 活動圖 UML之活動圖是狀態圖的一種變異,該圖表達涉及於執行某一作業行為中之活動。一個活動圖描述一群循序與同步的活動,一個活動狀態表示一個工作流程步驟或一個運算的執行活動。
物件導向分析與設計及塑模工具(8/16) 元件圖 UML之元件圖起源於 Booch 的模組圖,用以說明系統設計過程各類別與物件的配置,以及敘述軟體元件間的組織架構和相依關係。元件是開發和執行過程之實際物件類別,將可分解的實際基本單位模組化,這些基本單位包括模組並擁有特性和明確定義的介面。 部署圖 UML之部署圖起源於 Booch 的處理圖,它用來說明系統各處理器、處理元件的配置、關聯,以及同一處理器內執行處理的時程安排等。
物件導向分析與設計及塑模工具(9/16) Booch 等人(1999)從概念面提出五個連鎖觀點的軟體系統結構(參考圖9-11)︰ 使用個案觀點 設計觀點 流程觀點 實施觀點 部署觀點
圖9-11 五個連鎖觀點的軟體系統結構
物件導向分析與設計及塑模工具(10/16) 使用個案觀點 由描述系統行為的使用個案組成,這些系統行為是由使用者、系統分析師、測試者的觀點來描述,並不實際描述軟體系統的組織。 設計觀點 由類別、介面與合作組成,這些是來自於描述問題及其解決方法中之詞彙描述。這個觀點主要支援系統的功能需求,表達系統應提供給使用者之服務。
物件導向分析與設計及塑模工具(11/16) 流程觀點 由執行緒與流程所組成,這些是來自於系統的平行與同步機制,這個觀點主要表達系統之績效、產出與可擴充性。 實施觀點 由可以不同方式組裝實際可運作系統之獨立的元件與檔案所組成,這個觀點主要表達系統版本的結構配置管理。 部署觀點 由構成系統之硬體類型的節點所組成,這個觀點主要表達組成實際系統之零件的分配、傳遞訊息與安裝。
物件導向分析與設計及塑模工具(12/16) 應用UML,使用個案觀點的靜態面可用使用個案圖表示;設計觀點的靜態面可用類別圖與物件圖表示;流程觀點的靜態面可用類別圖與物件圖表示,但以主動類別表達執行緒與流程;實施觀點的靜態面可用元件圖表示;部署觀點的靜態面可用部署圖表示。而上述各觀點的動態面均由互動圖(循序圖與合作圖之統稱)、狀態圖與活動圖表示。
物件導向分析與設計及塑模工具(13/16) 從系統實作面來說,上述五個觀點配合物件導向的分析與設計(包括需求分析、系統分析與設計)之活動,可具體地將之分成六種塑模: 需求塑模 物件資料結構塑模 物件互動行為塑模 作業行為塑模 使用者介面塑模 系統元件與結構塑模
物件導向分析與設計及塑模工具(14/16) 需求塑模 主要是應用使用個案圖、活動圖(或流程圖)、藍圖、資料詞彙與介面元件等工具進行使用者與企業需求塑模,此活動可包含處理使用個案觀點靜態面之工作。 物件資料結構塑模 主要的工具是類別圖與物件圖,此活動可包含處理設計觀點靜態面之工作。
物件導向分析與設計及塑模工具(15/16) 物件互動行為塑模 主要的工具是循序圖與合作圖。 作業行為塑模 主要的塑模工具是活動圖與狀態圖。 物件互動行為塑模與作業行為塑模,這兩個活動可包含處理各觀點之動態面工作。
物件導向分析與設計及塑模工具(16/16) 使用者介面塑模 主要的塑模工具是介面結構圖、介面藍圖與元件規格、狀態圖與轉換表。 系統元件與結構塑模 主要的工具是元件圖與部署圖,這個活動可包含實施觀點與部署觀點之靜態工作。 上述有關之物件導向塑模活動及塑模工具摘述如圖 9-12。
圖9-12 物件導向塑模活動及塑模工具
圖9-13 物件導向分析與設計與塑模工具之關係
結論 物件導向之系統開發過程是一種反覆的程序,主要包括需求分析、系統分析與設計、實施與測試等階段。 其中,需求分析主要以使用個案圖作為表達工具;而系統分析與設計主要以類別圖、物件圖、循序圖、合作圖、狀態圖、活動圖、元件圖與部署圖等表達。 物件導向應用一些重要的觀念包括物件、類別、封裝、繼承與同名異式及超荷等,使物件導向系統有別於結構化之系統。由於物件導向技術之引進,使軟體之開發與維護更有效率,亦提升了程式的再用性與可維護性。
圖9-14 分析與設計和塑模工具:結構化vs.物件導向