註明:本文畫圖工具爲StarUML
一、概述
1.1、類圖介紹
首先介紹下類圖,定義一個Person類,如下:
public class Person {
private String name;
private int age =1;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name=name;
}
public void setAge(int age) {
this.age=age;
}
}
定義了兩個字段name和age,其中age有一個初始化值1,另外定義name和age的set、get方法。然後我們來看下這個類在UML類圖中是如何表示的:
可以看到我們畫了一個矩形,然後從上到下分割成三格,第一格爲類名,第二格爲類中字段屬性,這裏屬性的表達也是有一定格式的,如下:
權限 屬性名:類型 [ = 默認值 ]
由於這裏我們的name和age都是私有的,所以在前面加一個-,另外還有其他幾種權限:public 、protected、default,它們分別對應+、#、~。由於我們這裏的age有一個默認值1,所以在類型後面再加上‘=1’來表示。接下來來看下第三格,第三格爲類的方法,其格式如下:
權限 方法名稱(參數列表) [ : 返回類型]
中括號代表可選項。
1.2、類與類之間的關係
在畫類圖時,首先要清晰類和類之間的關係。類與類的關係總共有以下幾種:泛化(Generalization)、實現(Realization)、依賴(Dependence)、關聯(Association)、聚合(Aggregation)、組合(Composition)。
這6種關係的強弱順序爲:泛化=實現>組合>聚合>關聯>依賴;
二、類關係詳解
2.1、泛化
泛化表示is-a的關係,在Java中也叫作繼承關係,在UML中用帶空心三角形的直線來表示,箭頭從子類指向父類,是對象之間耦合度最大的一種關係。
增加兩個類,一個Studen類,一個警察Policemen類,兩個類均繼承自Person類,那麼他們的類關係圖表示如下:
2.2、實現
這裏的實現關係就是Java中類與接口的實現關係,在UML中用帶空心三角形的虛線表示。
由於Student和Policeman都職業,學生的職業就是學習,而警察的職業爲保護人民。所有這裏我們定義一個接口,裏面有一個職業的方法:
public interface ICareer{
void career();
}
這個接口用UML類圖表示如下:
可以看到在接口名字上多了一個<>字符來表示這個爲接口。接下來我們讓Student和Policeman都實現這個接口,UML類圖如下:
2.3、依賴
依賴是對象之間最弱的一種關聯方式,是臨時性的關聯。代碼中一般指由局部變量、函數參數、返回值建立的對於其他對象的調用關係。一個類調用被依賴類中的某些方法而得以完成這個類的一些職責。在類圖使用帶箭頭的虛線表示,箭頭從使用類指向被依賴的類。
這裏學生撿到錢交給警察叔叔,學生和警察叔叔就是一種依賴關係。因爲學生撿到錢給警察是一種偶然的事情,交給警察後他們之間就沒有關係了。我們在學生類中加入一個交錢的方法,在警察類中加入一個收錢的方法,當調用學生的交錢方法時,就調用警察的收錢方法。Student的代碼如下:
public class Student{
public Policemen policemen;
public void sendCoin(){
policemen.receiveCoin();
}
}
可以看到Student類中引用了Policemen類,也就是說Student依賴了Policemen,這種依賴關係我們用帶箭頭的虛線表示,箭頭指向被依賴對象,這裏也就是Policemen,UML類圖表示如下:
2.4、關聯
關聯是一種比較強的關係,他們的關係是比較持久的,穩定的。比如學生從家裏出來,學生和家就是一種關聯關係。這種關係是比較穩定的。
關聯分單向關聯和雙向關聯,如果一個類知道或者引用了另一個類,而另一個類不知道或者沒有引用這個類,則這兩個類是單向關聯的。比如這裏學生與家的關係就是單向關聯的,因爲每個學生都是有個家的(不考慮孤兒),但不能說每個家裏都有學生。
單向關聯我們用帶箭頭的實線表示,箭頭指向被引用或者被包含的類,這裏也就是家這個類。示例如下:
雙向關聯是兩個類彼此都知道對方的存在,比如老師與學生的關係就是雙向的。小明的語文老師是張老師,張老師的學生有小明。雙向關聯用不帶箭頭的實線來連接兩個類。示例如下:
2.5、聚合
聚合關係表示has-a的關係,是一種不穩定的包含關係。強調的是整體和部分的關係,其中部分可以脫離整體而存在。比如雁羣和一隻大雁的關係,就是聚合關係,大雁離開雁羣還是可以獨立存在的。再比如警察與制服的關係,制服也是警察的一部分,制服可以脫離警察而存在。
在UML類圖中聚合用帶空心菱形的直線表示,其中菱形從局部指向整體。
2.6、組合
組合表示contains-a的關係,是一種強烈的包含關係。它與聚合關係很像,也是強調整體與部分的關係,不同的是部分無法脫離整體存在。比如學生用手撿錢,其中手就是學生的一部分,但是手不能脫離學生而單獨存在。這裏稱學生與手爲組合關係,用帶實心的菱形直線表示,其中菱形指向整體: