天天看點

UML面向對象分析與模組化-【4】類圖和對象圖

一、概述

UML的類圖和對象圖表達的是對象模型的靜态結構方面。

類圖描述的是一種靜态關系,在系統的整個生命周期都是有效的。通過分析問題域和用例,就可以得到相關的類,然後再把邏輯上相關的類封裝成包。這樣就可以很好地展現系統的分層結構,使人們對系統層次關系一目了然。

對象圖是類圖的執行個體,它的表示方式與類圖基本相似。它們的不同之處在于對象圖顯示類圖的多個對象執行個體,而不是實際的類。一個對象圖是類圖的一個執行個體,對象圖隻能在系統的某一時間存在。

二、對象類

對象類簡稱類,是一種重要的分類器,用來描述結構和行為特性的機制,包括類、接口、資料類型、信号、元件、節點、用例和子系統。類是一組具有相同屬性、操作關系和語義的對象的描述。

在UML模組化時,不僅要抽象出形成系統的對象類,還必須描述對象類之間存在的連結關系,這種連結關系可以用一種叫做關聯的結構來進行描述。對象類之間的關聯有自返關聯、二進制關聯和N元關聯。自返關聯就是一個對象類自身與自身的關聯,即一個對象類的兩個對象之間的聯系。二進制關聯是在兩個對象類之間發生的關聯。N元關聯是在3個或多個對象類之間發生的關聯,N元關聯的每一個執行個體是被關聯的類的對象的多元組。

聚合群組合是對象類之間的一種特殊的關聯關系,它主要用來描述對象類之間的整體與部分之間的關系。聚合用于表示事物的整體及部分關系較弱的情況,它描述了has-a關系,即整體對象擁有部分對象。組合表示事物的整體與部分關系較強的情況,它描述了contains-a關系。

泛化是一般事物(稱為超類或父類)和該事物較為特殊的種類(稱為子類)之間的關系,子類繼承父類的屬性和操作,或者修改了父類的某些操作。

依賴是兩個模型元素之間的語義聯系,指一個模型元素(提供者)的變化必然影響另一個模型元素(客戶)。對于依賴可以加上構造型,規定依賴的含義和作用,常用的構造型有<<use>>(使用)<<call>>(調用)<<instantiate>>(執行個體)<<friend>>(友元)等。

在UML中用對象圖來描述參與一個互動的各對象在互動過程中某一時刻的狀态。對象圖實質上是對象類圖的執行個體。對象圖當機了系統的某一瞬間,表達系統的對象在該時刻的具體狀态(屬性值和操作)。

接口是一組外部可以通路的操作,用于為對象類或元件提供服務。接口可以看成是一種特殊的抽象類,不含屬性,它的操作也沒有方法,即沒有操作的實作。

三、進階對象類

抽象類是指不能直接産生執行個體的對象類,抽象類的執行個體對象隻能通過一個非抽象類的子類産生。抽象類的作用僅僅是為了其他的非抽象類對象類繼承和重用它所說明的屬性、操作及其它性質。

模闆對象類又稱參數對象類,是一個尚未完全具體說明的類。模闆中提供參數表,利用參數表向模闆傳遞資訊可最終形成使用者需要的具體類。參數可以是類,也可以是整數、布爾型等基本類型。

四、對象類模組化

一般情況下,建立對象類圖包含以下步驟。

(1)       研究和分析問題域,确定系統的需求。

(2)       發現、識别、确定系統中的類和對象,明确它們的含義和責任,确定屬性和操作。

(3)       找出類之間存在的靜态聯系。重點分析類之間存在的一般與特殊、部分與整體關系,研究類之間的繼承性和多态性,把類之間的這種聯系用泛化、聚合群組合、關聯、依賴等關聯表達出來。

(4)       對已經發現的類之間存在的聯系進行調整和優化,去除可能存在的命名沖突和功能重複等問題。

(5)       繪制對象類圖并編制相應的說明。

在UML中,可以把例外情況的處理用一個專門的類—信号來表達。其模組化步驟如下。

(1)       對每一個對象類和接口,找出可能出現的例外情況及其出現條件。

(2)       将每一個例外情況用一個信号類來描述,類名前加上構造型<<exception>>。

(3)       建立例外情況的層次結構,将一般性的例外情況置于頂層,把特殊性的例外情況置于底層。

(4)       找出每一個操作可能出現的例外情況,将操作和它的例外情況的信号圖示之間用一條虛箭頭線連接配接,其上标出構造型<<send>>,表示操作到它的例外情況的send依賴。

當對大型系統進行模組化時,經常需要處理大量的類、接口、元件、節點和圖,這時就有必要将這些元素進行分組,即把那些語義相近并傾向于一起變化的元素組織起來加入同一個包,這樣友善了解和處理整個模型。建立包圖的一般步驟如下。

(1)    識别系統中的模型元素(通常是對象類),把概念上或語義上相近的模型元素納入一個包。

(2)    對于每一個模型元素,标出其模型元素的可視性(公共、保護或私有)。

(3)    确定包與包之間的依賴關系。

(4)    确定包與包之間的泛化聯系,确定包元素的多态性和重載。

(5)    繪制并精化包圖。

五、例子

(1)       一個公司可以雇傭多人,人也可以為多個公司工作。每個公司有一個總經理,公司中的每個雇員有一個經理,經理可以管理多個下屬的雇員。請用對象類圖描述上述模型。

(2)       客戶想供應商發出一個訂單,訂單訂購各種不同的零件。一個訂單由若幹訂單行組成,每行制定供應商目錄中的一種特定零件,并說明要訂購多少。作為對訂單的響應,供應商安排一次交貨,由所有訂購的零件組成。請用對象類圖描述上述模型。

    參考文獻:

     [1] 唐學忠等著. UML面向對象分析與模組化. 電子工業出版社. 2008

     [2] 蔡敏等著. UML基礎與ROSE模組化教程. 人民郵電出版社. 2006

     [3] Carlo Ghezzi等著. 施平安譯. 軟體工程基礎(第2版) 清華大學出版社. 2003

     [4] 參考網站:

上一篇: jQuery和微軟
下一篇: 随筆 - 淚

繼續閱讀