UML類圖
在UML的靜態機制中類圖是一個重點,它不但是設計人員關心的核心,更是實現人員關注的核心。建模工具也主要根據類圖來產生代碼。類圖在UML的9個圖中占據了一個相當重要的地位。
James Rumbaugh對類的定義是:類是具有相似結構、行為和關系的一組對象的描述符。類是面向對象系統中最重要的構造塊。類圖顯示了一組類、接口、協作以及他們之間的關系。在UML中問題域最終要被逐步轉化,通過類來建模,通過編程語言構建這些類從而實現系統。類加上他們之間的關系就構成了類圖,類圖中還可以包含接口、包等元素,也可以包括對象、鏈等實例。接口在類圖中通過版型來表示<<interface>>,下面的介紹將主要介紹類,接口和類類似。
A. 類的UML表示
類的命名盡量應用領域中的術語,應明確、無岐義,以利于相互交流和理解。類的屬性、操作中的可見性使用+、#、-分別表示public、protected、private。
screen.width-461) window.open('/uploads/allimg/c090720/124P5P23930-12231.jpg');" alt="" src="http://www.itest.cc/uploads/allimg/c090720/124P5P23930-12231.jpg" border=0>
B.類之間的關系
類之間的關系是類圖中比較復雜的內容。有關聯、聚合、組合、范化、依賴。
關聯:是模型元素之間的一種語義聯系,是類之間的一種很弱的聯系。關聯可以有方向,可以是單向關聯,也可以是雙向關聯??梢越o關聯加上關聯名來描述關聯的作用。關聯兩端的類也可以以某種角色參與關聯,角色可以具有多重性,表示可以有多少個對象參與關聯??梢酝ㄟ^關聯類進一步描述關聯的屬性、操作以及其他信息。關聯類通過一條虛線與關聯連接。對于關聯可以加上一些約束,以加強關聯的含義。如下圖所示:
screen.width-461) window.open('/uploads/allimg/c090720/124P5P26420-21Z5.jpg');" alt="" src="http://www.itest.cc/uploads/allimg/c090720/124P5P26420-21Z5.jpg" border=0>
聚合是一種特殊的關聯,聚合表示整體與部分的關系。通常在定義一個整體類后,再去分析這個整體類的組成結構。從而找出一些組成類,該整體類和組成類之間就形成了聚合關系。例如艦隊是由一系列的艦船組成。需求描述中“包含”、“組成”、“分為….部分”等詞常意味著聚合關系。
組合也是一種特殊的關聯,也表示類之間整體和部分的關系,但是組合關系中部分和整體具有統一的生存期。一旦整體對象不存在,部分對象也將不存在。部分對象與整體對象之間具有共生死的關系。
聚合和組合的區別:聚合關系是“has-a”關系,組合關系是“contains-a”關系;聚合關系表示整體與部分的關系比較弱,而組合比較強;聚合關系中代表部分事物的對象與代表聚合事物的對象的生存期無關,一旦刪除了聚合對象不一定就刪除了代表部分事物的對象。組合中一旦刪除了組合對象,同時也就刪除了代表部分事物的對象。
泛化定義了一般元素和特殊元素之間的分類關系,類之間的這種泛化關系也就是繼承關系。泛化關系是“a-kind-of”關系,定義一般元素和特殊元素之間的分類關系。下圖是一個泛化關系的例子。
screen.width-461) window.open('/uploads/allimg/c090720/124P5P2bP-33245.jpg');" alt="" src="http://www.itest.cc/uploads/allimg/c090720/124P5P2bP-33245.jpg" border=0>
有兩個元素如果修改X的定義可能會導致對Y的定義,則認為Y依賴X。依賴關系可能由各種原因引起,如一個類向另一個類發送消息,或者一個類是另一個類的數據成員類型,或者一個類是另一個類的操作的參數類型等。有時依賴關系和關聯關系比較難區分。如果類A和類B有關聯關系,它們之間必然有依賴關系。如果兩個類之間有關聯關系時不用再表示出這兩個類之間的依賴關系。
C.建立類圖
在軟件開發不同階段使用的類圖具有不同的抽象層次,即概念層、說明層、和實現層。使用UML進行應用建模也應該是一個迭代的過程,所以我們應該建立一個類圖的層次的概念。
概念層類圖描述應用領域中的概念,這些概念與實現它們的類有聯系。通常沒有直接的映射關系。畫概念層類圖時很少考慮或不考慮實現問題,因此概念層類圖應獨立于具體的編程語言。下面是一個概念層類的表示。
screen.width-461) window.open('/uploads/allimg/c090720/124P5P31060-43327.jpg');" alt="" src="http://www.itest.cc/uploads/allimg/c090720/124P5P31060-43327.jpg" border=0>
說明層類圖。此時我們考察的是類的接口部分,而不是實現部分。這個接口可能因為實現環境、運行特性等有多種不同的實現。下面是一個說明層類的表示。
screen.width-461) window.open('/uploads/allimg/c090720/124P5P34530-5P35.jpg');" alt="" src="http://www.itest.cc/uploads/allimg/c090720/124P5P34530-5P35.jpg" border=0>
實現層類圖才真正考慮類的實現問題,提供實現的細節。此時的類的概念才應該是真正的嚴格意義上的類。它揭示了軟件實體的構成情況。實現層的類是最常用的,在很多的時候說明層的類更有助于人們對軟件的理解。
screen.width-461) window.open('/uploads/allimg/c090720/124P5P410Z-A037.jpg');" alt="" src="http://www.itest.cc/uploads/allimg/c090720/124P5P410Z-A037.jpg" border=0>
UML的最終目標是識別出所有必須的類,并分析這些類之間的關系,類的識別貫穿于整個建模過程,分析階段主要識別問題域相關的類,在設計階段需要加入一些反映設計思想、方法的類以及實現問題域所需要的類,在編碼實現階段,因為語言的特點,可能需要加入一些其他的類。
原文轉自:http://www.anti-gravitydesign.com