java UML類圖的使用

類圖 是用于描述系統(tǒng)中所包含的類以及它們之間的相互關系,幫助人們簡化對系統(tǒng)的理解,它是系統(tǒng)分析和設計階段的重要產物,也是系統(tǒng)編碼和測試的重要模型依據。學習好類圖的繪制,是一位合格的軟件工程師應有的技能。

1.類的UML圖示

在UML中,類使用包含類名,屬性和方法且?guī)в蟹指艟€的長方形來表示

例如定義一個Person類,包含屬性name,age,擁有eating方法,則UML類圖如下圖示:


Person類

對應的java代碼為:

public class Person {  
    private String name;  
    private int age;   
      
    public void eating() {  
        ......  
    }  
}  

在UML類圖中,類一般由三部分組成:
(1) 第一部分是類名:每個類都必須有一個名字,類名是一個字符串。
(2) 第二部分是類的屬性(Attributes):屬性是指類的性質,即類的成員變量。一個類可以有任意多個屬性,也可以沒有屬性。
UML規(guī)定屬性的表示方式為:

可見性 名稱:類型 [=缺省值]

其中:
?“可見性”表示該屬性對于類外的元素而言是否可見,包括公有(public)私有(private),友好的(friendly,代表package)受保護(protected)三種,在類圖中分別用符號+、-,~#表示。
? “名稱”表示屬性名,用一個字符串表示。
? “類型”表示屬性的數據類型,可以是基本數據類型,也可以是用戶自定義類型。
? “缺省值”是一個可選項,即屬性的初始值。
(3) 第三部分是類的操作(Operations):操作是類的任意一個實例對象都可以使用的行為,是類的成員方法。
UML規(guī)定操作的表示方式為:
可見性 名稱(參數列表) [ : 返回類型]
其中:
? “可見性”的定義與屬性的可見性定義相同。
?“名稱”即方法名,用一個字符串表示。
?“參數列表”表示方法的參數,其語法與屬性的定義相似,參數個數是任意的,多個參數之間用逗號“,”隔開。
? “返回類型”是一個可選項,表示方法的返回值類型,依賴于具體的編程語言,可以是基本數據類型,也可以是用戶自定義類型,還可以是空類型(void),如果是構造方法,則無返回類型。

2.類之間的關系

類不是孤立存在的,類與類之間存在各種關系包括:關聯(lián)關系,聚合關系,組合關系,依賴關系,泛化關系。每種關系對應i不同的圖示

(1)依賴關系
依賴關系是類與類之間最弱的關系,是指一個類(依賴類)使用或知道另外一個類(目標類)。它是一個典型的瞬時關系,依賴類和目標類進行簡單的交互,但是依賴類并不維護目標類的對象,僅僅是零時使用而已。例如對于窗體類window,當它關閉時會發(fā)送一個類windowclosingevent對象,這里也就可以說窗體類window使用了類windowclosingevent,他們之間的依賴關系如下圖示:

依賴關系.PNG

依賴關系用虛線箭頭表示

(2)關聯(lián)關系
關聯(lián)關系是一種比依賴關系更強的關系,是指一個類“擁有”另一個類,表示類之間的一種持續(xù)一段時間的合作關系,包括有單向關聯(lián)和雙向關聯(lián)關系。
單向關聯(lián):類A與類B是單向關聯(lián)關系,是指類A包含類B對象的引用,但是類B并不包含類A對象的引用,例如銀行用戶類(client)包含賬戶類(Bankacount)的引用,但是反過來卻不是。在類圖中,通過從類A畫一條帶箭頭的單向實線到類B來表示他們之間的單項關聯(lián)關系,箭頭方向指向B。如下圖:

單向關聯(lián).PNG

在上圖中,連接兩個類的箭頭線兩頭的數字即代表它們之間的數量關系,例如上圖,代表一個client類包含了0到多個BankAcount類的引用,并且BankAcount類在client中的引用是私有變量:accounts.

表達數量的形式有:

表達方式 數量說明
1..1 表示另一個類的一個對象只與該類的一個對象有關系
0..* 表示另一個類的一個對象與該類的零個或多個對象有關系
1..* 表示另一個類的一個對象與該類的一個或多個對象有關系
0..1 表示另一個類的一個對象沒有或只與該類的一個對象有關系
m..n 表示另一個類的一個對象與該類最少m,最多n個對象有關系 (m≤n

雙向關聯(lián):類A與類B如果包含對方的引用,則稱類A與類B是雙向關聯(lián)的關系。例如,在一個需求描述中,一個學生(student)可以擁有其選秀的六門課程的信息,一門課程(course)可以包含選修該門課程的任意多個學生的信息。如下圖:

雙向關聯(lián)

雙向關聯(lián)用雙向箭頭連接兩個類

(3)聚合關系
聚合(Aggregation)關系表示整體與部分的關系。在聚合關系中,成員對象是整體對象的一部分,但是成員對象可以脫離整體對象獨立存在。在UML中,聚合關系用帶空心菱形的直線表示。例如:汽車發(fā)動機(Engine)是汽車(Car)的組成部分,但是汽車發(fā)動機可以獨立存在,因此,汽車和發(fā)動機是聚合關系,如下圖所示:

聚合關系

在代碼實現聚合關系時,成員對象通常作為構造方法、Setter方法或業(yè)務方法的參數注入到整體對象中:

public class Car {  
    private Engine engine;  
  
    //構造注入  
    public Car(Engine engine) {  
        this.engine = engine;  
    }  
      
    //設值注入  
public void setEngine(Engine engine) {  
    this.engine = engine;  
}  
……  
}  
  
public class Engine {  
    ……  
}  

(4)組合關系
組合(Composition)關系也表示類之間整體和部分的關系,但是在組合關系中整體對象可以控制成員對象的生命周期,一旦整體對象不存在,成員對象也將不存在,成員對象與整體對象之間具有同生共死的關系。在UML中,組合關系用帶實心菱形的直線表示。例如:人的頭(Head)與嘴巴(Mouth),嘴巴是頭的組成部分之一,而且如果頭沒了,嘴巴也就沒了,因此頭和嘴巴是組合關系,如下圖所示:

組合關系

在代碼實現組合關系時,通常在整體類的構造方法中直接實例化成員類

public class Head {  
    private Mouth mouth;  
  
    public Head() {  
        mouth = new Mouth(); //實例化成員類  
    }  
……  
}  
  
public class Mouth {  
    ……  
}  

(5)泛化關系
泛化(Generalization)關系也就是繼承關系,用于描述父類與子類之間的關系,父類又稱作基類或超類,子類又稱作派生類。在UML中,泛化關系用帶空心三角形的直線來表示,如下圖:

泛化關系

***在UML中,類與接口之間的實現關系用帶空心三角形的虛線來表示
接口實現關系

以上便是UML類圖的一些簡單實用了,希望對你有幫助,另外,此文章參考了csdn版主劉偉老師的博客

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,619評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 99,155評論 3 425
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,635評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,539評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,255評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,646評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,655評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,838評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 49,399評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,146評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,338評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,893評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,565評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,983評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,257評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,059評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,296評論 2 376

推薦閱讀更多精彩內容

  • 在UML 2.0的13種圖形中,類圖是使用頻率最高的UML圖之一。Martin Fowler在其著作《UML Di...
    雷雷_zll閱讀 13,305評論 0 14
  • 國家電網公司企業(yè)標準(Q/GDW)- 面向對象的用電信息數據交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,067評論 6 13
  • 忘記了uml類圖連線之間的關系,記錄一下。 1. 關聯(lián)關系 關聯(lián)(Association)關系是類與類之間最常用的...
    cutieagain閱讀 1,852評論 0 2
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 134,814評論 18 139
  • 冬天來了,我的憂郁癥又犯了。 報紙上說,是冬天的陽光太少了。 是啊,我曬不到太陽。 我開始營養(yǎng)不良。 你怎么樣? ...
    zheng1閱讀 205評論 0 4