一、引言
UML —— Unified modeling language UML (統一建模語言),是一種用於軟件系統分析和設計的語言工具,它用於幫助軟件開發人員進行思考和記錄思路的結果。
在我們的設計過程中,經常需要畫一些類圖,來說明系統的架構組成。但在平時的需求開發中,一般程序員很少用到,因爲設計一般與他們無關,最多也就是參與需求的評審,至於系統的設計或者產品的社會,並不是他們關係的事情。那爲什麼要了解一下UML呢?可能有如下兩個原因:
(1)、努力讓自己提升設計系統的能力,嘗試着去畫一些UML圖;
(2)、在學習過程中,經常會看到一些類圖,特別是在學習設計模式和閱讀源碼的時候;(我屬於這一種,哈哈~~~)
二、畫UML圖的工具
1、可以使用Rational Rose
2、Eclipse插件AmaterasUML:(還有其他的插件,想裝的,自行百度哈~~~~)
安裝AmaterasUML前,需要先安裝GEF ;
(1)、第一步、Help -----> Install new software ----> Work with 輸入:
http://download.eclipse.org/tools/gef/updates/releases/
(2)、 第二步、AmaterasUML 安裝,下載地址:
http://sourceforge.jp/projects/amateras/downloads/56447/AmaterasUML_1.3.4.zip/
下載完後,將 AmaterasUML 裏的3個jar包拷到Eclpise的plugins文件下
(3)、第三步、重啓Eclipse,如下圖:
注意:經過上述三個步驟,在Eclipse中應該能看到 AmaterasUML 了,如果沒有,可以考慮把Eclipse升級。本人之前用的Eclipse Mars版本,2015年的,太老了,死活裝不了,於是順便升級一下,完美~~
三、UML圖的分類
UML本身是一套符號的規定,就像數學符號和化學符號一樣,這些符號用於描述軟件模型中的各個元素和他們之間的關係,比如類、接口、實現、泛化、依賴、組合、聚合等。
1、UML圖分類:
(1)、 用例圖 (use case)
(2)、 靜態結構圖:類圖、對象圖、包圖、組件圖、部署圖
(3)、 動態行爲圖:交互圖(時序圖與協作圖)、狀態圖、活動圖
說明:類圖是描述類與類之間的關係的,是UML圖中最核心的
四、UML類圖的六大關係
UML類圖是用於描述系統中的類(對象)本身的組成和類(對象)之間的各種靜態關係。類之間的關係:依賴、泛化(繼承)、實現、關聯、聚合與組合,需要注意各個關係所用的符號
1、類圖—依賴關係(Dependency):只要是在類中用到了對方,那麼它們之間就存在依賴關係。
public class Person{
private Integer id;
private String name;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
public class PersonServiceBean {
private PersonDao personDao;
public void save(Person person){}
public IDCard getIDCard(Integer personid){}
public void modify(){
Department department = new Department();
}
}
class PersonDao{}
class IDCard{}
class Person{}
class Department{}
以下關係,都屬於依賴關係:
1)、 類的成員屬性
2)、 方法的返回類型
3)、 方法接收的參數類型
4)、 方法中使用到
2、類圖—泛化關係(generalization): 泛化關係實際上就是繼承關係,它是依賴關係的特例。
public abstract class DaoSupport{
public void save(Object entity){
}
public void delete(Object id){
}
}
public class PersonServiceBean extends Daosupport{
}
如果A類繼承了B類,我們就說A和B存在泛化關係
3、類圖—實現關係(Implementation) : 實現關係實際上就是A類實現B接口,它是依賴關係的特例。
public interface PersonService {
public void delete(Interger id);
}
public class PersonServiceBean implements PersonService {
public void delete(Interger id){}
}
4、類圖—關聯關係(Association): 關聯關係實際上就是類與類之間的聯繫,它是依賴關係的特例
關聯具有導航性:即雙向關係或單向關係。關係具有多重性:如“1”(表示有且僅有一個),“0…”(表示0個或者多個),“0,1”(表示0個或者一個),“n…m”(表示n到 m個都可以),“m…*”(表示至少m個)。
單向一對一關係
public class Person {
private IDCard card;
}
class IDCard{}
雙向一對一關係
public class Person {
private IDCard card;
}
public class IDCard{
private Person person
}
5、類圖—聚合關係(Aggregation)
表示的是整體和部分的關係,整體與部分可以分開。聚合關係是關聯關係的特例,所以他具有關聯的導航性與多重性。
例如:一臺電腦由鍵盤(keyboard)、顯示器(monitor),鼠標等組成,組成電腦的各個配件是可以從電腦上分離出來的。下面的代碼的形式,大家肯定都見過,就是類中有一個屬性,通過set方法爲其賦值。這樣的方式就是聚合關係
public class Computer{
private Mouse mouse;
private Monitor monitor;
public void setMouse(Mouse mouse){
this.mouse = mouse;
}
public void setMonitor(Monitor monitor){
this.monitor = monitor;
}
}
class Mouse{}
class Monitor{}
6、類圖—組合關係(Composition)
該關係也是整體與部分的關係,但是整體與部分不可以分開。
再看一個案例:定義實體:Person與IDCard、Head, 那麼 Head 和 Person 就是組合關係,IDCard 和 Person 就是聚合關係。
public class Person{
private IDCard card; //聚合
private Head head = new Head(); //組合
public void setIDCard(IDCard card){
this.card = card;
}
}
class IDCard{}
class Head{}
解釋一下:IDCard不會隨着Person的創建而創建,只有用到它的時候,可以通過set方法賦值,但是Head不一樣,只要Person創建,Head一定會被創建,這就是聚合和組合的區別。
注意:如果在程序中Person實體中定義了對IDCard進行級聯刪除,即刪除Person時連同IDCard一起刪除,那麼IDCard 和 Person 就是組合了。
五、小結
本文介紹了UML類圖中的六種關係,都不難理解,我們在分析類和類的關係時,可以參考。
在畫類圖時,對於各個關係的符號,要記住哦~~~~這裏強調一下,聚合和組合的圖標:
有菱形的一頭指向的是整體!!!