UML類圖的圖形表示,你學(xué)會(huì)了嗎?
在UML類圖表示類的圖形:
表示類的圖形有三層:
- 第一層是類名字;
- 第二層是類的成員變量;
- 第三層是類的方法。
成員變量以及方法前的訪問修飾符用符號(hào)來表示:
- “+”表示 public
- “-”表示 private
- “#”表示 protected
- 不帶符號(hào)表示 default
注意:
如果是抽象類和抽象方法,那么用斜體字體表示
在UML類圖表示接口:
接口在類圖中的第一層頂端用構(gòu)造型 <>表示,下面是接口的名字,第二層是字段常量,第三層是抽象方法。(如果用兩層表示,那就只是表示接口名和方法)。
第二種表示接口的方法是“棒棒糖表示法”:
類上面的一根棒棒糖(圓圈+實(shí)線)。圓圈旁為接口名稱,接口方法在實(shí)現(xiàn)類中出現(xiàn)。
在UML類圖中表示包:
類和接口一般都出現(xiàn)在包中,UML類圖中包的表示形式如下圖所示。package表示包名。
在UML類圖中表示關(guān)系:
繼承(泛化):
泛化關(guān)系(Generalization)是指對(duì)象與對(duì)象之間的繼承關(guān)系。如果對(duì)象A和對(duì)象B之間的“is a”關(guān)系成立,那么二者之間就存在繼承關(guān)系,對(duì)象B是父對(duì)象,對(duì)象A是子對(duì)象。例如:一只大雁“is a” 動(dòng)物,很顯然,大雁是和動(dòng)物是繼承關(guān)系。
實(shí)現(xiàn):
實(shí)現(xiàn)關(guān)系是指接口及其實(shí)現(xiàn)類之間的關(guān)系,實(shí)現(xiàn)關(guān)系用空心三角和虛線組成的箭頭來表示,從實(shí)現(xiàn)類指向接口
關(guān)聯(lián):
關(guān)聯(lián)關(guān)系(Association)是指對(duì)象和對(duì)象之間的連接,它使一個(gè)對(duì)象知道另一個(gè)對(duì)象的屬性和方法。
在Java中,關(guān)聯(lián)關(guān)系的代碼表現(xiàn)形式為一個(gè)對(duì)象含有另一個(gè)對(duì)象的引用。也就是說,如果一個(gè)對(duì)象的類代碼中,包含有另一個(gè)對(duì)象的引用,那么這兩個(gè)對(duì)象之間就是關(guān)聯(lián)關(guān)系。
關(guān)聯(lián)關(guān)系有單向關(guān)聯(lián)和雙向關(guān)聯(lián)。
雙向關(guān)聯(lián):如果兩個(gè)對(duì)象都知道(即可以調(diào)用)對(duì)方的公共屬性和操作,那么二者就是雙向關(guān)聯(lián)。
單項(xiàng)關(guān)聯(lián):如果只有一個(gè)對(duì)象知道(即可以調(diào)用)另一個(gè)對(duì)象的公共屬性和操作,那么就是單向關(guān)聯(lián)。
大多數(shù)關(guān)聯(lián)都是單向關(guān)聯(lián),單向關(guān)聯(lián)關(guān)系更容易建立和維護(hù),有助于尋找可重用的類。
一個(gè)對(duì)象可以持有其它對(duì)象的數(shù)組或者集合,在UML中,通過放置多重性(multipicity)表達(dá)式在關(guān)聯(lián)線的末端來表示。多重性表達(dá)式可以是一個(gè)數(shù)字、一段范圍或者是它們的組合。多重性允許的表達(dá)式示例如下:
- 數(shù)字:精確的數(shù)量
- *或者0..*:表示0到多個(gè)
- 0..1:表示0或者1個(gè),在Java中經(jīng)常用一個(gè)空引用來實(shí)現(xiàn)
- 1..*:表示1到多個(gè)
關(guān)聯(lián)關(guān)系又分為依賴關(guān)聯(lián)、聚合關(guān)聯(lián)和組合關(guān)聯(lián)三種類型。
依賴:
如果對(duì)象A用到對(duì)象B,但是和B的關(guān)系不是太明顯的時(shí)候,就可以把這種關(guān)系看作是依賴關(guān)系。比如說A類的方法形參用到了B類。
public class BClass{ } public class AClass{ private BClass b1; // 依賴關(guān)系情況1:成員變量. 這也是關(guān)聯(lián)關(guān)系 public void doWork(BClass b2){ // 依賴關(guān)系情況2: 方法參數(shù) } public void doWork(){ BClass b3; // 依賴關(guān)系情況3: 方法內(nèi)的局部變量 } }
聚合:
- 聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是整體與部分,是一種“弱擁有”的關(guān)系,即has-a的關(guān)系。聚合是整體和個(gè)體之間的關(guān)系。
- 例如,汽車類與引擎類、輪胎類,以及其它的零件類之間的關(guān)系便整體和個(gè)體的關(guān)系。
- 與關(guān)聯(lián)關(guān)系一樣,聚合關(guān)系 也是通過實(shí)例變量實(shí)現(xiàn)的。但是關(guān)聯(lián)關(guān)系所涉及的兩個(gè)類是處在同一層次上的,而在聚合關(guān)系中,兩個(gè)類是處在不平等層次上的,一個(gè)代表整體,另一個(gè)代表部分。
- 聚合關(guān)系表示整體和個(gè)體的關(guān)系,整體和個(gè)體可以相互獨(dú)立存在,一定是有兩個(gè)模塊分別管理整體和個(gè)體。
- 在UML類圖中,聚合通常使用空心菱形+實(shí)線箭頭表示
組合:
- 也是整體與部分之間的關(guān)系,但是整體會(huì)影響到部分的生存周期,只要整體對(duì)象不存在了,部分對(duì)象也隨之消亡。如,公司和部門、貓和貓的腿。
- 組合關(guān)系是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是一種contains-a(包含)的關(guān)系,這種關(guān)系比聚合更強(qiáng),也稱為強(qiáng)聚合。
- 它要求普通的聚合關(guān)系中代表整體的對(duì)象負(fù)責(zé)代表部分對(duì)象的生命周期,組合關(guān)系是不能共享的。代表整體的對(duì)象需要負(fù)責(zé)保持部分對(duì)象和存活,在一些情況下將負(fù)責(zé)代表部分的對(duì)象湮滅掉。代表整體的對(duì)象可以將代表部分的對(duì)象傳遞給另一個(gè)對(duì)象,由后者負(fù)責(zé)此對(duì)象的生命周期。換言之,代表部分的對(duì)象在每一個(gè)時(shí)刻只能與一個(gè)對(duì)象發(fā)生組合關(guān)系,由后者排他地負(fù)責(zé)生命周期。部分和整體的生命周期一樣。
- 整體和個(gè)體不能獨(dú)立存在,一定是在一個(gè)模塊中同時(shí)管理整體和個(gè)體,生命周期必須相同(級(jí)聯(lián))。
- 在UML類圖中,組合通常使用實(shí)心菱形+實(shí)線箭頭表示