1. 程式人生 > 實用技巧 >2.UML類圖基本介紹

2.UML類圖基本介紹

1. UML 基本介紹

  1. UML——Unified modeling language UML(統一建模語言),是一種用於軟體系統分析和設計的語言工具,它用於幫助軟體開發人員進行思考和記錄思路的結果

  2. UML本身是一套符號的規定,就像數學符號和化學符號一樣,這些符號用於描述軟體模型中的各個元素和他們之間的關係,比如類、介面、實現、泛化、依賴、組合、聚合等,如下圖

  3. 使用UML來建模,常用的工具有 RationalRose , 也可以使用一些外掛來建模

相關概念:

  1. Note:物件UML 進行註釋說明
  2. Class:表示類,可以新增屬性和方法
  3. Interface:表示介面,可以新增抽象方法
  4. Dependency:表示依賴(使用)
  5. Association:表示關聯
  6. Generalization:表示泛化(繼承)
  7. Realization:表示實現
  8. Aggregation:表示聚合
  9. Composite:表示組合

2. UML 圖

畫UML圖與寫文章差不多,都是把自己的思想描述給別人看,關鍵在於思路和條理,UML圖分類:

  1. 用例圖(use case)
  2. 靜態結構圖: 類圖、物件圖、包圖、元件圖、部署圖
  3. 動態行為圖:互動圖(時序圖與協作圖)、狀態圖、活動圖

類圖是描述類與類之間的關係的,是UML圖中最核心的

2.1 類圖

  1. 用於描述系統中的類(物件)本身的組成和類(物件)之間的各種靜態關係。
  2. 類之間的關係: 依賴、泛化(繼承)、實現、關聯、聚合與組合

舉例:

public class Person { // 程式碼形式->類圖
	private Integer id;
	private String name;

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}
}

如上程式碼對應的類圖表示為:

3 . 類與類的關係

3.1 依賴關係(Dependency)

只要是在類中用到了對方, 那麼他們之間就存在依賴關係。 如果程式碼中沒有對方, 連編繹都通過不了

程式碼:

public class PersonServiceBean {
    private PersonDao personDao;//成員變數
    
    public void save(Person person){} //作為方法的引數
    
    public IDCard getIDCard(Integer personid){ //方法返回值
        return null;
    }
    
    public void modify(){
    	Department department = new Department(); //區域性變數
    }
} 

public class PersonDao{}

public class IDCard{}

public class Person{}

public class Department{}

類圖(虛線箭頭表示):

依賴關係小結:類中用到了對方,他們就存在依賴關係

  1. 類的成員屬性
  2. 方法的返回型別
  3. 方法接收的引數型別
  4. 方法中使用的區域性變數

3.2 泛化關係(Generalization)

泛化關係實際上就是繼承關係,他是依賴關係的特例

程式碼:

public abstract class DaoSupport{
    public void save(Object entity){
        
    }
    
    public void delete(Object id){
        
    }
}

public class PersonServiceBean extends Daosupport{
    
}

類圖(實線空心三角箭頭表示):

泛化關係小結:

  1. 泛化關係實際上就是繼承關係
  2. 如果 A 類繼承了 B 類, 我們就說 A 和 B 存在泛化關係

3.3 實現關係(Implementation)

實現關係實際上就是 A 類實現 B 介面, 他是依賴關係的特例

程式碼:

public interface PersonService {
	public void delete(Integer id);
} 

public class PersonServiceBean implements PersonService {
	public void delete(Integer id){
        
    }
}

類圖(空心三角形 + 虛線 表示)

3.4 關聯關係(Association)

  1. 關聯關係實際上就是類與類之間的聯絡,他是依賴關係的特例(除了繼承和實現)
  2. 關聯具有導航性:即雙向關係或單向關係
  3. 關係具有多重性:如“1”(表示有且僅有一個),“0…”(表示0個或者多個),“0, 1”(表示0個或者一個),“n…m”(表示n到 m個都可以),“m…*”(表示至少m個)

程式碼示例:

// 單向一對一關係
public class Person {
	private IDCard card;
}

public class IDCard{
    
}


// 雙向一對一關係
public class Person {
	private IDCard card;
}

public class IDCard{
	private Person person
}

類圖:

3.5 聚合關係(Aggregation)

  1. 聚合關係(Aggregation)表示的是整體和部分的關係,整體與部分可以分開聚合關係是關聯關係的特例,所以他具有關聯的導航性與多重性。
  2. 如:一臺電腦由鍵盤(keyboard)、顯示器(monitor),滑鼠等組成;組成電腦的各個配件是可以從電腦上分離出來的, 使用帶空心菱形的實線來表示:

程式碼:

public class Computer {
	private Mouse mouse; // 滑鼠可以和Computer分離
	private Moniter moniter;// 顯示器可以和Computer分離

	public void setMouse(Mouse mouse) {
		this.mouse = mouse;
	}

	public void setMoniter(Moniter moniter) {
		this.moniter = moniter;
	}

}

類圖表示(空心菱形+實線表示)

3.6 組合關係(Aggregation)

  1. 組合關係:也是整體與部分的關係,但是整體與部分不可以分開。
  2. 在程式中我們定義實體: Person與IDCard、 Head,那麼 Head 和Person 就是組合關係, IDCard 和 Person 就是聚合關係。

程式碼:

public class Person {
	private IDCard card; // 聚合關係
	private Head head = new Head(); // 組合關係
}

類圖:聚合(空心菱形 + 實線)、組合(實心菱形 + 實線)

組合關係和聚合關係的區別就是 組合關係為不可分離的

如上一節中Mouse、Monitor和Computer是不可分離的,則升級為組合關係

public class Computer {
	private Mouse mouse = new Mouse(); // 滑鼠可以和Computer不能分離
	private Moniter moniter = new Moniter();// 顯示器可以和Computer不能分離

	public void setMouse(Mouse mouse) {
		this.mouse = mouse;
	}

	public void setMoniter(Moniter moniter) {
		this.moniter = moniter;
	}
}

類圖:

如果在程式中Person實體中定義了對IDCard進行級聯刪除,即刪除Person時連同IDCard一起刪除, 那麼IDCard 和 Person 就是組合了

總結:

  • 聚合是一種特殊的關聯形式,它是類(或實體)之間的單向單向關係,例如錢包和錢錢包有錢,但錢不需要錢包,所以它是一個單向的關係。在這種關係中,兩者可以互相獨立工作,並不是缺一不可在我們的示例中,如果電腦 和 鍵盤滑鼠都是可以互相工作
  • 組合是一種受限制的聚合形式,其中兩個實體高度依賴於彼此。 例如,人類和自己的頭。人類需要頭生存,頭需要人體才有意義 。 換句話說,當類彼此依賴並且它們的壽命相同時(如果一個人死了,那麼另一個也是),那麼它就是一個組合。 如果沒有人類,頭就沒有意義(刑天除外)