Java設計模式——UML類圖

一、引言

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類圖中的六種關係,都不難理解,我們在分析類和類的關係時,可以參考。
在畫類圖時,對於各個關係的符號,要記住哦~~~~這裏強調一下,聚合和組合的圖標:
有菱形的一頭指向的是整體!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章