深入淺出UML類圖(一)

Liuwei-Sunny發表於2012-08-08

       UML 2.013種圖形中,類圖是使用頻率最高的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類,它包含屬性nameageemail,以及操作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)三種,在類圖中分別用符號+-#表示。
  •       “名稱”表示屬性名,用一個字串表示。
  •       “型別”表示屬性的資料型別,可以是基本資料型別,也可以是使用者自定義型別。
  •       “預設值”是一個可選項,即屬性的初始值。

      (3) 第三部分是類的操作(Operations):操作是類的任意一個例項物件都可以使用的行為,是類的成員方法。

      UML規定操作的表示方式為:

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

      其中:

  •       “可見性”的定義與屬性的可見性定義相同。
  •       “名稱”即方法名,用一個字串表示。
  •       “引數列表”表示方法的引數,其語法與屬性的定義相似,引數個數是任意的,多個引數之間用逗號“,”隔開。
  •       “返回型別”是一個可選項,表示方法的返回值型別,依賴於具體的程式語言,可以是基本資料型別,也可以是使用者自定義型別,還可以是空型別(void),如果是構造方法,則無返回型別。

      在類圖2中,操作method1的可見性為public(+),帶入了一個Object型別的引數par,返回值為空(void);操作method2的可見性為protected(#),無引數,返回值為String型別;操作method3的可見性為private(-),包含兩個引數,其中一個引數為int型別,另一個為int[]型別,返回值為int型別。

2 類圖操作說明示意圖

      由於在Java語言中允許出現內部類,因此可能會出現包含四個部分的類圖,如圖3所示:

3 包含內部類的類圖

【作者:劉偉  http://blog.csdn.net/lovelion