1. 程式人生 > 其它 >UML類圖及類圖之間的關係

UML類圖及類圖之間的關係

在 UML 2.0 的 13 種圖中,類圖(Class Diagrams)是使用頻率最高的 UML 圖之一。類圖描述系統中的類,以

及各個類之間的關係的靜態檢視,能夠讓我們在正確編寫程式碼之前對系統有一個全面的認識。類圖是一種模型類

型,確切地說,是一種靜態模型型別。類圖表示類、介面和它們之間的協作關係,用於系統設計階段。

一、類、介面和類圖

1. 類

類(Class)是指具有相同屬性、方法和關係的物件的抽象,它封裝了資料和行為,是面向物件程式設計(OOP)的基礎,具有封裝性、繼承性和多型性等三大特性。在 UML 中,類使用包含類名、屬性和操作且帶有分隔線的矩形來表示。

(1) 類名(Name)是一個字串,例如,Student。

(2) 屬性(Attribute)是指類的特性,即類的成員變數。UML 按以下格式表示:

[可見性]屬性名:型別[=預設值]

例如:-name:String

注意:“可見性”表示該屬性對類外的元素是否可見,包括公有(Public)、私有(Private)、受保護(Protected)和朋友(Friendly)4 種,在類圖中分別用符號+、-、#、~表示。

(3) 操作(Operations)是類的任意一個例項物件都可以使用的行為,是類的成員方法。UML 按以下格式表示:

[可見性]名稱(引數列表)[:返回型別]

例如:+display():void。

如下所示是學生類的 UML 表示。

類圖用 3 個矩形拼接表示,最上面的部分標識類的名稱,中間的部分標識類的屬性,最下面的部分標識類的方法。

類圖中,需注意以下幾點:

  • 抽象類或抽象方法用斜體表示
  • 如果是介面,則在類名上方加 <>
  • 欄位和方法返回值的資料型別非必需
  • 靜態類或靜態方法加下劃線

2. 介面

介面(Interface)是一種特殊的類,它具有類的結構但不可被例項化,只可以被子類實現。它包含抽象操作,但不包含屬性。它描述了類或元件對外可見的動作。在 UML 中,介面使用一個帶有名稱的小圓圈來進行表示。

如下所示是圖形類介面的 UML 表示。

3. 類圖

類圖(ClassDiagram)是用來顯示系統中的類、介面、協作以及它們之間的靜態結構和關係的一種靜態模型。它主要用於描述軟體系統的結構化設計,幫助人們簡化對軟體系統的理解,它是系統分析與設計階段的重要產物,也是系統編碼與測試的重要模型依據。

類圖中的類可以通過某種程式語言直接實現。類圖在軟體系統開發的整個生命週期都是有效的,它是面向物件系統的建模中最常見的圖。如下所示是“計算長方形和圓形的周長與面積”的類圖,圖形介面有計算面積和周長的抽象方法,長方形和圓形實現這兩個方法供訪問類呼叫。

二、類之間的關係

UML 將事物之間的聯絡歸納為 6 種,並用對應的圖形類表示。下面根據類與類之間的耦合度從弱到強排列。UML 中的類圖有以下幾種關係:依賴關係、關聯關係、聚合關係、組合關係、泛化關係和實現關係。其中泛化和實現的耦合度相等,它們是最強的。

1. 依賴關係

依賴(Dependency)關係是一種使用關係,它是物件之間耦合度最弱的一種關聯方式,是臨時性的關聯。在程式碼中,某個類的方法通過區域性變數、方法的引數或者對靜態方法的呼叫來訪問另一個類(被依賴類)中的某些方法來完成一些職責。

在 UML 類圖中,依賴關係使用帶箭頭的虛線來表示,箭頭從使用類指向被依賴的類。如下是人與手機的關係圖,人通過手機的語音傳送方法打電話。

2. 關聯關係

關聯(Association)關係是物件之間的一種引用關係,用於表示一類物件與另一類物件之間的聯絡,如老師和學生、師傅和徒弟、丈夫和妻子等。關聯關係是類與類之間最常用的一種關係,分為一般關聯關係、聚合關係和組合關係。我們先介紹一般關聯。

關聯可以是雙向的,也可以是單向的。在 UML 類圖中,雙向的關聯可以用帶兩個箭頭或者沒有箭頭的實線來表示,單向的關聯用帶一個箭頭的實線來表示,箭頭從使用類指向被關聯的類。也可以在關聯線的兩端標註角色名,代表兩種不同的角色。

在程式碼中通常將一個類的物件作為另一個類的成員變數來實現關聯關係。如下是老師和學生的關係圖,每個老師可以教多個學生,每個學生也可向多個老師學,他們是雙向關聯。

3. 聚合關係

聚合(Aggregation)關係是關聯關係的一種,是強關聯關係,是整體和部分之間的關係,是 has-a 的關係。

聚合關係也是通過成員物件來實現的,其中成員物件是整體物件的一部分,但是成員物件可以脫離整體物件而獨立存在。例如,學校與老師的關係,學校包含老師,但如果學校停辦了,老師依然存在。

在 UML 類圖中,聚合關係可以用帶空心菱形的實線來表示,菱形指向整體。如下是大學和教師的關係圖。

4.組合關係

組合(Composition)關係也是關聯關係的一種,也表示類之間的整體與部分的關係,但它是一種更強烈的聚合關係,是 cxmtains-a 關係。

在組合關係中,整體物件可以控制部分物件的生命週期,一旦整體物件不存在,部分物件也將不存在,部分物件不能脫離整體物件而存在。例如,頭和嘴的關係,沒有了頭,嘴也就不存在了。

在 UML 類圖中,組合關係用帶實心菱形的實線來表示,菱形指向整體。如下是頭和嘴的關係圖。

5.泛化關係

泛化(Generalization)關係是物件之間耦合度最大的一種關係,表示一般與特殊的關係,是父類與子類之間的關係,是一種繼承關係,是 is-a 的關係。

在 UML 類圖中,泛化關係用帶空心三角箭頭的實線來表示,箭頭從子類指向父類。在程式碼實現時,使用面向物件的繼承機制來實現泛化關係。例如,Student 類和 Teacher 類都是 Person 類的子類,其類圖如下所示。

6.實現關係

實現(Realization)關係是介面與實現類之間的關係。在這種關係中,類實現了介面,類中的操作實現了介面中所宣告的所有的抽象操作。

在 UML 類圖中,實現關係使用帶空心三角箭頭的虛線來表示,箭頭從實現類指向介面。例如,汽車和船實現了交通工具,其類圖如下所示。