2.UML類圖基本介紹
阿新 • • 發佈:2021-01-08
1. UML 基本介紹
-
UML——Unified modeling language UML(統一建模語言),是一種用於軟體系統分析和設計的語言工具,它用於幫助軟體開發人員進行思考和記錄思路的結果
-
UML本身是一套符號的規定,就像數學符號和化學符號一樣,這些符號用於描述軟體模型中的各個元素和他們之間的關係,比如類、介面、實現、泛化、依賴、組合、聚合等,如下圖
-
使用UML來建模,常用的工具有 RationalRose , 也可以使用一些外掛來建模
相關概念:
- Note:物件UML 進行註釋說明
- Class:表示類,可以新增屬性和方法
- Interface:表示介面,可以新增抽象方法
- Dependency:表示依賴(使用)
- Association:表示關聯
- Generalization:表示泛化(繼承)
- Realization:表示實現
- Aggregation:表示聚合
- Composite:表示組合
2. UML 圖
畫UML圖與寫文章差不多,都是把自己的思想描述給別人看,關鍵在於思路和條理,UML圖分類:
- 用例圖(use case)
- 靜態結構圖: 類圖、物件圖、包圖、元件圖、部署圖
- 動態行為圖:互動圖(時序圖與協作圖)、狀態圖、活動圖
類圖是描述類與類之間的關係的,是UML圖中最核心的
2.1 類圖
- 用於描述系統中的類(物件)本身的組成和類(物件)之間的各種靜態關係。
- 類之間的關係: 依賴、泛化(繼承)、實現、關聯、聚合與組合
舉例:
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{}
類圖(虛線箭頭表示):
依賴關係小結:類中用到了對方,他們就存在依賴關係
- 類的成員屬性
- 方法的返回型別
- 方法接收的引數型別
- 方法中使用的區域性變數
3.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.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”(表示有且僅有一個),“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)
- 聚合關係(Aggregation)表示的是整體和部分的關係,整體與部分可以分開。 聚合關係是關聯關係的特例,所以他具有關聯的導航性與多重性。
- 如:一臺電腦由鍵盤(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)
- 組合關係:也是整體與部分的關係,但是整體與部分不可以分開。
- 在程式中我們定義實體: 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 就是組合了
總結:
- 聚合是一種特殊的關聯形式,它是類(或實體)之間的單向單向關係,例如錢包和錢錢包有錢,但錢不需要錢包,所以它是一個單向的關係。在這種關係中,兩者可以互相獨立工作,並不是缺一不可在我們的示例中,如果電腦 和 鍵盤滑鼠都是可以互相工作
- 組合是一種受限制的聚合形式,其中兩個實體高度依賴於彼此。 例如,人類和自己的頭。人類需要頭生存,頭需要人體才有意義 。 換句話說,當類彼此依賴並且它們的壽命相同時(如果一個人死了,那麼另一個也是),那麼它就是一個組合。 如果沒有人類,頭就沒有意義(刑天除外)