在UML 2.0的13種圖形中,類圖是使用頻率最高的UML圖之一。Martin Fowler在其著作《UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition》(《UML精粹:標準對象建模語言簡明指南(第3版)》)中有這麼一段:“If someone were to come up to you in a dark alley and say, 'Psst, wanna see a UML diagram?' that diagram would probably be a class diagram. The majority of UML diagrams I see are class diagrams.”(“如果有人在黑暗的小巷中向你走來並對你說:‘嘿,想不想看一張UML圖。’那麼這張圖很有可能就是一張類圖,我所見過的大部分的UML圖都是類圖”),由此可見類圖的重要性。
類圖用於描述系統中所包含的類以及它們之間的相互關係,協助人們簡化對系統的理解,它是系統分析和設計階段的重要產物,也是系統編碼和測試的重要模型依據。
1. 類
類(Class)封裝了資料和行為,是物件導向的重要組成部分,它是具有相同屬性、操作、關係的對象集合的總稱。在系統中,每個類都具有一定的職責,職責指的是類要完成什麼樣的功能,要承擔什麼樣的義務。一個類可以有多種職責,設計得好的類一般只有一種職責。在定義類的時候,將類的職責分解成為類的屬性和操作(即方法)。類的屬性即類的資料職責,類的操作即類的行為職責。設計類是物件導向設計中最重要的組成部分,也是最複雜和最耗時的部分。
在軟體系統運行時,類將被執行個體化成對象(Object),對象對應於某個具體的事物,是類的執行個體(Instance)。
類圖(Class Diagram)使用出現在系統中的不同類來描述系統的靜態結構,它用來描述不同的類以及它們之間的關係。
在系統分析與設計階段,類通常可以分為三種,分別是實體類(Entity Class)、控制類(Control Class)和邊界類(Boundary Class),下面對這三種類加以簡要說明:
(1) 實體類:實體類對應系統需求中的每個實體,它們通常需要儲存在永久儲存體中,一般使用資料庫表或檔案來記錄,實體類既包括儲存和傳遞資料的類,還包括操作資料的類。實體類來源於需求說明中的名詞,如學生、商品等。
(2) 控制類:控制類用於體現應用程式的執行邏輯,提供相應的業務操作,將控制類抽象出來可以降低介面和資料庫之間的耦合度。控制類一般是由動賓結構的短語(動詞+名詞)轉化來的名詞,如增加商品對應有一個商品增加類,註冊對應有一個使用者註冊類等。
(3) 邊界類:邊界類用於對外部使用者與系統之間的互動對象進行抽象,主要包括介面類,如對話方塊、視窗、菜單等。
在物件導向分析和設計的初級階段,通常首先識別出實體類,繪製初始類圖,此時的類圖也可稱為領域模型,包括實體類及其它們之間的相互關係。
2. 類的UML圖示
在UML中,類使用包含類名、屬性和操作且帶有分隔線的長方形來表示,如定義一個Employee類,它包含屬性name、age和email,以及操作modifyInfo(),在UML類圖中該類如圖1所示:
圖1 類的UML圖示
圖1對應的Java程式碼片段如下:
public class Employee {private String name;private int age;private String email;public void modifyInfo() {......}}
在UML類圖中,類一般由三部分組成:
(1) 第一部分是類名:每個類都必須有一個名字,類名是一個字串。
(2) 第二部分是類的屬性(Attributes):屬性是指類的性質,即類的成員變數。一個類可以有任意多個屬性,也可以沒有屬性。
UML規定屬性的表示方式為:
其中: “可見度”表示該屬性對於類外的元素而言是否可見,包括公有(public)、私人(private)和受保護(protected)三種,在類圖中分別用符號+、-和#表示。 “名稱”表示屬性名稱,用一個字串表示。 “類型”表示屬性的資料類型,可以是基礎資料型別 (Elementary Data Type),也可以是使用者自訂類型。 “預設值”是一個可選項,即屬性的初始值。
(3) 第三部分是類的操作(Operations):操作是類的任意一個執行個體對象都可以使用的行為,是類的成員方法。
UML規定操作的表示方式為:
其中: “可見度”的定義與屬性的可見度定義相同。 “名稱”即方法名,用一個字串表示。 “參數列表”表示方法的參數,其文法與屬性的定義相似,參數個數是任意的,多個參數之間用逗號“,”隔開。 “傳回型別”是一個可選項,表示方法的傳回值類型,依賴於具體的程式設計語言,可以是基礎資料型別 (Elementary Data Type),也可以是使用者自訂類型,還可以是空類型(void),如果是構造方法,則無傳回型別。
在類圖2中,操作method1的可見度為public(+),帶入了一個Object類型的參數par,傳回值為空白(void);操作method2的可見度為protected(#),無參數,傳回值為String類型;操作method3的可見度為private(-),包含兩個參數,其中一個參數為int類型,另一個為int[]類型,傳回值為int類型。
圖2 類圖操作說明示意圖
由於在Java語言中允許出現內部類,因此可能會出現包含四個部分的類圖,如圖3所示:
圖3 包含內部類的類圖
【作者:劉偉 http://blog.csdn.net/lovelion】