深入淺出UML類圖(一)
在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)三種,在類圖中分別用符號+、-和#表示。
- “名稱”表示屬性名,用一個字串表示。
- “型別”表示屬性的資料型別,可以是基本資料型別,也可以是使用者自定義型別。
- “預設值”是一個可選項,即屬性的初始值。
(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】
相關文章
- 深入淺出UML類圖
- 深入淺出UML類圖(五)
- 深入淺出UML類圖(三)
- 深入淺出UML類圖(二)
- UML類圖詳解
- UML類圖總結
- UML類圖關係
- 透過一份經典的UML類圖來學會如何讀懂UML類圖
- 【UML之物件圖VS類圖】物件
- Tomcat深入淺出(一)Tomcat
- 深入淺出OOD(一) (轉)
- 深入淺出FE(十四)深入淺出websocketWeb
- UML 類圖及關係
- UML基礎系列:類圖
- 看懂UML類圖和時序圖時序圖
- PostgreSQL VACUUM 之深入淺出 (一)SQL
- ActiveX深入淺出(一) (轉)
- UML類圖--類之間的關係
- 設計模式之UML類圖設計模式
- 全面認識UML類圖元素
- 深入淺出 Runtime(一):初識
- 深入淺出記憶體馬(一)記憶體
- 深入淺出Websocket(一)Websocket協議Web協議
- 深入淺出RxJava(一:基礎篇)RxJava
- UML類圖(上):類、繼承和實現繼承
- UML類圖與類的關係詳解
- 深入淺出——MVCMVC
- 深入淺出mongooseGo
- HTTP深入淺出HTTP
- 深入淺出IO
- 深入淺出 RabbitMQMQ
- 深入淺出PromisePromise
- ArrayList 深入淺出
- mysqldump 深入淺出MySql
- 深入淺出decorator
- 深入淺出 ZooKeeper
- 機器學習深入淺出機器學習
- 深入淺出HTTPHTTP