UML類圖詳解

註明:本文畫圖工具爲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的關係,是一種強烈的包含關係。它與聚合關係很像,也是強調整體與部分的關係,不同的是部分無法脫離整體存在。比如學生用手撿錢,其中手就是學生的一部分,但是手不能脫離學生而單獨存在。這裏稱學生與手爲組合關係,用帶實心的菱形直線表示,其中菱形指向整體:
在這裏插入圖片描述

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