如何繪制「UML類(lèi)圖」?附內(nèi)容詳解和優(yōu)質(zhì)實(shí)例分析!

0 評(píng)論 4816 瀏覽 14 收藏 12 分鐘

下面這篇文章是筆者整理分析的關(guān)于如何繪制「UML類(lèi)圖」的相關(guān)內(nèi)容,大家一起來(lái)看看吧!

UML圖有很多種,但是并非必須掌握所有的UML圖,才能完整系統(tǒng)分析和設(shè)計(jì)工作。一般說(shuō)來(lái),在UML圖中,只要掌握類(lèi)圖、用例圖、時(shí)序圖的使用,就能完成大部分的工作。也就是說(shuō),掌握UML的20%,就能做80%的事情。

對(duì)于程序員來(lái)說(shuō),最頻繁使用的莫過(guò)于類(lèi)圖。因此,這里我們只講解UML類(lèi)圖。至于其它UML圖,請(qǐng)?jiān)谝院蟮墓ぷ髦袇㈤喐郩ML學(xué)習(xí)資料繼續(xù)學(xué)習(xí)。

類(lèi)圖是面向?qū)ο笙到y(tǒng)建模中最常用和最重要的圖,是定義其它圖的基礎(chǔ)。類(lèi)圖主要是用來(lái)顯示系統(tǒng)中的類(lèi)、接口以及它們之間的靜態(tài)結(jié)構(gòu)和關(guān)系的一種靜態(tài)模型。類(lèi)圖中最基本的元素是類(lèi)、接口。軟件設(shè)計(jì)師設(shè)計(jì)出類(lèi)圖后,程序員就可以用代碼實(shí)現(xiàn)類(lèi)圖中包含的內(nèi)容。

一、UML類(lèi)圖簡(jiǎn)介

類(lèi)圖以反映類(lèi)的結(jié)構(gòu)(屬性、操作)以及類(lèi)之間的關(guān)系為主要目的,描述了軟件系統(tǒng)的結(jié)構(gòu),是一種靜態(tài)建模方法。類(lèi)圖用來(lái)描述系統(tǒng)中有意義的概念,包括具體的概念、抽象的概念、實(shí)現(xiàn)方面的概念等,是對(duì)現(xiàn)實(shí)世界中事物的抽象。

類(lèi)圖的主要作用是對(duì)系統(tǒng)的詞匯進(jìn)行建模、對(duì)簡(jiǎn)單的協(xié)作進(jìn)行建模和對(duì)邏輯數(shù)據(jù)庫(kù)模式進(jìn)行建模。

二、類(lèi)圖基本屬性

類(lèi)圖概括起來(lái)主要由兩部分組成:類(lèi)和類(lèi)之間的關(guān)系,其中對(duì)類(lèi)的定義如下圖所示,主要由三部分組成,它們分別是類(lèi)名、類(lèi)的屬性、類(lèi)的方法,對(duì)應(yīng)圖中的三個(gè)分區(qū)內(nèi)容。

類(lèi)名:圖中最上面的矩形框中為類(lèi)名。如果字體為斜體,表示為抽象類(lèi)

  • 類(lèi)的屬性:類(lèi)名下方的區(qū)域
  • 類(lèi)的方法:圖中的下面部分

*符號(hào)解釋

說(shuō)明:屬性和方法前面的“+”“-”和“#”表示訪問(wèn)級(jí)別,以下對(duì)這些符號(hào)進(jìn)行解釋說(shuō)明。

  • +:public,公用的,對(duì)所有類(lèi)可見(jiàn)
  • -:private,私有的,只對(duì)該類(lèi)本身可用
  • #:protected,受保護(hù)的,對(duì)該類(lèi)的子孫可見(jiàn)
  • ~:package,包的,只對(duì)同一包聲明的其他類(lèi)可見(jiàn)
  • =:表示默認(rèn)值
  • 下劃線:static
  • 斜體:抽象 (注意也可以用兩個(gè)尖括號(hào)包裹來(lái)表示抽象,比如 —— <<我是抽象類(lèi)or接口>>)

冒號(hào)前是方法名/變量名(根據(jù)有無(wú)括號(hào)區(qū)分),冒號(hào)后是返回參數(shù)/變量類(lèi)型(根據(jù)有無(wú)括號(hào)區(qū)分),如果沒(méi)有冒號(hào)的話表示方法返回空(也有人通過(guò):void表示返空)

三、類(lèi)圖中具體類(lèi)、抽象、接口和包的表示法

UML類(lèi)圖中具體類(lèi)、抽象類(lèi)、接口和包有不同的表示方法。

1. 在UML類(lèi)圖中表示具體類(lèi)

具體類(lèi)在類(lèi)圖中用矩形框表示,矩形框分為三層:

  • 第一層是類(lèi)名字。
  • 第二層是類(lèi)的成員變量。
  • 第三層是類(lèi)的方法。

成員變量以及方法前的訪問(wèn)修飾符用符號(hào)來(lái)表示:

  • “+”表示 public;
  • “-”表示 private;
  • “#”表示 protected;
  • 不帶符號(hào)表示 default。

2. 在UML類(lèi)圖中表示抽象類(lèi)

抽象類(lèi)在UML類(lèi)圖中同樣用矩形框表示,但是抽象類(lèi)的類(lèi)名以及抽象方法的名字都用斜體字表示。

3. 在UML類(lèi)圖中表示接口

接口在類(lèi)圖中也是用矩形框表示,但是與類(lèi)的表示法不同的是,接口在類(lèi)圖中的第一層頂端用構(gòu)造型 <<interface>>表示,下面是接口的名字,第二層是方法。此外,接口還有另一種表示法,俗稱棒棒糖表示法,就是類(lèi)上面的一根棒棒糖(圓圈+實(shí)線)。圓圈旁為接口名稱,接口方法在實(shí)現(xiàn)類(lèi)中出現(xiàn)。

4. 在UML類(lèi)圖中表示包

類(lèi)和接口一般都出現(xiàn)在包中,UML類(lèi)圖中包的表示形式。

四、類(lèi)之間的關(guān)系

類(lèi)之間的關(guān)系主要包括泛化(繼承)、依賴、關(guān)聯(lián)、聚合、組合和實(shí)現(xiàn)6種關(guān)系,下面對(duì)它們進(jìn)行一一闡釋。

1. 泛化關(guān)系

泛化關(guān)系是一種繼承關(guān)系,子類(lèi)繼承父類(lèi)的所有行為和屬性,子類(lèi)可以新增新的功能或者重寫(xiě)父類(lèi)功能。

表示方法:空心三角+實(shí)線,箭頭指向父類(lèi)

2. 依賴關(guān)系

依賴關(guān)系表示一個(gè)類(lèi)使用(依賴)另一個(gè)類(lèi)的服務(wù)或信息。當(dāng)一個(gè)類(lèi)的改變會(huì)影響到另一個(gè)類(lèi)時(shí),兩個(gè)類(lèi)之間存在依賴關(guān)系。一般來(lái)說(shuō),依賴總是單向的,不應(yīng)該存在雙向依賴。

表示方法:尖括號(hào)+虛線

3. 關(guān)聯(lián)關(guān)系

關(guān)聯(lián)關(guān)系是一種擁有的關(guān)系,它使一個(gè)類(lèi)知道另一個(gè)類(lèi)的屬性和方法。它體現(xiàn)不同類(lèi)的一種強(qiáng)依賴關(guān)系,比如我和我的朋友,這種關(guān)系比依賴更強(qiáng),不存在依賴關(guān)系中的偶然性,關(guān)系也不是臨時(shí)的,一般是長(zhǎng)期性的。

關(guān)聯(lián)關(guān)系分為單向關(guān)聯(lián)或雙向關(guān)聯(lián),也可以有多重性(一對(duì)多),雙向的關(guān)聯(lián)可以有兩個(gè)箭頭或者沒(méi)有箭頭,單向的關(guān)聯(lián)有一個(gè)箭頭。

表示方法:尖括號(hào)+實(shí)線,箭頭指向被擁有者

4. 聚合關(guān)系

聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種,表示一種“弱”的“擁有”關(guān)系,是整體與部分的關(guān)系,且部分可以離開(kāi)整體而單獨(dú)存在,如車(chē)和輪胎是整體和部分的關(guān)系,輪胎離開(kāi)車(chē)仍然可以單獨(dú)存在。

表示方法:空心菱形+實(shí)線,菱形指向整體

5. 組合關(guān)系

組合關(guān)系也是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系還要強(qiáng)的關(guān)系,是整體與個(gè)體的關(guān)系,但個(gè)體不能離開(kāi)整體而單獨(dú)存在。如公司和部門(mén)是整體和部分的關(guān)系,沒(méi)有公司就不存在部門(mén)。它要求普通的聚合關(guān)系中代表整體的對(duì)象負(fù)責(zé)代表部分的對(duì)象的生命周期。

表示方法:實(shí)心菱形+實(shí)線

6. 實(shí)現(xiàn)關(guān)系

實(shí)現(xiàn)關(guān)系是一種類(lèi)與接口的關(guān)系,表示類(lèi)是接口所有特征和行為的實(shí)現(xiàn)。

表示方法:空心三角+虛線

五、類(lèi)圖案例分析

為了幫助大家更好的理解類(lèi)之間的6種關(guān)系,下面使用例子輔助大家學(xué)習(xí)和消化吸收。

汽車(chē)類(lèi)圖

汽車(chē)類(lèi)圖說(shuō)明:

  • 車(chē)與小汽車(chē)和自行車(chē)之間是「實(shí)現(xiàn)」】關(guān)系,使用帶空心箭頭的虛線表示。
  • 小汽車(chē)與SUV之間的關(guān)系為泛化關(guān)系,使用帶空心箭頭的實(shí)線表示。
  • 小汽車(chē)與發(fā)動(dòng)機(jī)和輪胎之間是「組合」】關(guān)系,使用實(shí)心菱形箭頭的實(shí)線表示。
  • 學(xué)生上學(xué)需要用到自行車(chē),與自行車(chē)是一種「依賴」】關(guān)系,使用帶箭頭的虛線表示。
  • 學(xué)生與班級(jí)之間是「聚合」】關(guān)系,使用帶空心菱形箭頭的實(shí)線表示。
  • 學(xué)生與身份證之間為「關(guān)聯(lián)」】關(guān)系,使用尖箭頭的實(shí)線表示。

如果你能快速的看懂并理解以上案例,說(shuō)明你基本上已經(jīng)把類(lèi)圖弄懂了,再去多結(jié)合一些代碼和對(duì)應(yīng)的類(lèi)圖鞏固一下,以后再看到類(lèi)圖就不會(huì)懵了。

六、如何繪制類(lèi)圖?

ProcessOn支持多種圖形的繪制,當(dāng)然也包括UML圖啦,用ProcessOn繪制類(lèi)圖的方法很簡(jiǎn)單,只要掌握了類(lèi)圖繪制的知識(shí)點(diǎn),研究明白了類(lèi)圖案例,相信每個(gè)人都可以快速學(xué)會(huì)畫(huà)類(lèi)圖。

  • Step1:注冊(cè)登錄ProcessOn,新建UML圖形。
  • Step2:在左側(cè)工具欄中選擇類(lèi)的標(biāo)志,拖拽到右側(cè)編輯區(qū),寫(xiě)上類(lèi)名、屬性和方法。
  • Step3:根據(jù)類(lèi)之間的關(guān)系,標(biāo)注箭頭和線。

注:ProcessOn每個(gè)圖標(biāo)之間的連線默認(rèn)都是實(shí)線箭頭,大家根據(jù)需要可以在上方工具欄中調(diào)整連線樣式、連線類(lèi)型、連線顏色、箭頭方向和箭頭樣式等。如果你想讓自己的圖更美觀一些,可以把文本、圖標(biāo)、線條等填充不同顏色、相同的圖標(biāo)盡可能大小相同。

本文由 @觀察月亮的小白羊 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來(lái)自Unsplash,基于CC0協(xié)議。

該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 目前還沒(méi)評(píng)論,等你發(fā)揮!