【UML】類圖


一、什么是類圖

  類圖(Class diagram)主要用於描述系統的結構化設計。類圖也是最常用的UML圖,用類圖可以顯示出類、接口以及它們之間的靜態結構和關系。

二、類圖的元素

  在類圖中一共包含了以下幾種模型元素,分別是:類(Class)、接口(Interface)以及類之間的關系。

2.1 類(Class)

  在面向對象(OO) 編程中,類是對現實世界中一組具有相同特征的物體的抽象。

  

修飾符:+表示public;-表示private;#表示protected;省略表示包可見性。
如果屬性/方法具有下划線,則說明它是靜態的。
描述信息使用 << >> 包裹。

  代碼如下:

 1 public abstract class Person {
 2     public String name;
 3     private int age;
 4     protected double weight;
 5     double height;
 6     public static char sex;
 7 
 8     public void eat(Object food){}
 9 
10     protected void drink(){}
11 
12     private void walk(){}
13 
14     void run(){}
15 
16     public abstract void study();
17 
18     public boolean openMac(){
19         return false;
20     }
21 
22     public static void playGame(){}
23 }
View Code

  書寫規范

  • 類名:正體字說明類是可被實例化的,斜體字說明類為抽象類。
  • 屬性:<修飾符> <<描述信息>> <屬性名>: <類型>
  • 方法:<修飾符> <<描述信息>> <方法名> (<參數:類型 ...>): <返回類型>

2.2 接口(Interface)

  接口是一種特殊的類,具有類的結構但不可被實例化,只可以被實現(繼承)。

  接口的表示有大概兩種方式。具體畫法如下:

  矩形表示法:在接口名稱頂端加上<<Interface>> 

     

  棒棒糖表示法:使用一個帶有名稱的小圓圈來進行表示。

  

  接口代碼如下

1 public interface Worker {
2     public void worker1();
3     public void worker2();
4     public void worker3();
5 }
View Code

三、類與類之間關系

3.1 依賴(Dependency)關系

  依賴(Dependency)關系是一種使用關系,它是對象之間耦合度最弱的一種關聯方式,是臨時性的關聯。在代碼中,某個類的方法通過局部變量、方法的參數或者對靜態方法的調用來訪問另一個類(被依賴類)中的某些方法來完成一些職責。

  依賴是一種弱關聯,只要一個類用到另一個類,但是和另一個類的關系不是太明顯的時候,就可以使用依賴關系  

  【依賴關系】:是一種使用的關系,即一個類的實現需要另一個類的協助,所以要盡量不使用雙向的互相依賴

  【代碼表現】:局部變量、方法的參數或者對靜態方法的調用

  【箭頭及指向】:帶箭頭的虛線,指向被使用者

  【示例】:動物依賴氧氣和水。調用新陳代謝方法需要氧氣類與水類的實例作為參數

  

3.2 關聯(Composition)關系

  關聯(Association)關系是對象之間的一種引用關系,用於表示一類與另一類之間的聯系,如老師和學生、師傅和徒弟、丈夫和妻子等。關聯關系是類與類之間最常用的一種關系,分為一般關聯關系、聚合關系和組合關系。我們先介紹一般關聯。

  表示類與類之間的連接。它使一個類的可見屬性和方法被另一個類使用。是兩個類、或者類與接口之間語義級別的一種強依賴關系,不存在依賴關系的偶然性、臨時性。一般是長期性的,而且雙方的關系一般是平等的。

  【關聯關系】:是一種擁有的關系,它使一個類知道另一個類的屬性和方法;關聯可以是雙向的,也可以是單向的。雙向的關聯的箭頭是可選的,單向的箭頭指向遍歷或者查詢的方向。

  【代碼體現】:成員變量

  【箭頭及指向】:帶普通箭頭的實心線,指向被擁有者

  【示例】:企鵝需要‘知道’氣候的變化,需要‘了解’氣候規律。當一個類‘知道’另一個類時,可以用關聯。

  

  注:在關聯關系中可以使用附加的基數來說明類之間對應的個數:

基數 含義
0..1 零個或者一個實例
0..* 沒有限制,任意
* 沒有限制,任意
1 有且只能一個實例
1..* 至少有一個實例

   依賴和關聯區別:我用錘子修了一下桌子,我和錘子之間就是一種依賴,我和我的同事就是一種關聯。依賴是一種弱關聯,只要一個類用到另一個類,但是和另一個類的關系不是太明顯的時候(可以說是“uses”了那個類),就可以把這種關系看成是依賴,依賴也可說是一種偶然的關系,而不是必然的關系。關聯是類之間的一種關系,例如老師教學生,老公和老婆這種關系是非常明顯的。依賴是比較陌生,關聯是我們已經認識熟悉了。

3.3 泛化(Generalization)關系

  表示類與類、接口與接口之間的繼承關系。

  【泛化關系】:是一種繼承關系,表示一般與特殊的關系,它指定了子類如何特化父類的所有特征和行為。

  【代碼體現】:父類與子類(extends)

  【箭頭指向】:帶三角箭頭的實線,箭頭指向父類  

  【示例】:鳥類繼承抽象類動物

  

3.4 實現(Realization)關系

  實現關系指定兩個實體之間的一個合同。換言之,一個實體定義一個合同,而另一個實體保證履行該合同。

  【實現關系】:是一種類與接口的關系,表示類是接口所有特征和行為的實現

  【代碼體現】:接口與實現類(implements)

  【箭頭指向】:帶三角箭頭的虛線,箭頭指向接口

  1)矩形表示法

  【示例】:大雁需要飛行,就要實現飛()接口

  帶三角箭頭的虛線

  

  2)棒棒糖表示法

  【示例】:唐老鴨講話,就要實現講話()接口

  不帶箭頭的實線

  

3.5 聚合(Association)關系

  聚合(Aggregation)關系是關聯關系的一種,是強關聯關系,是整體和部分之間的關系,是 has-a 的關系。

  聚合是關聯的一種形式,代表兩個類之間的整體/局部關系,他體現的是一種has-a的關系。聚合暗示着整體在概念上處於比局部更高的一個級別,而關聯暗示兩個類在概念上位於相同的級別。聚合還暗示着實例圖中不存在回路,換言之,只能是一種單向關系。

  【聚合關系】:整體與部分的關系,且部分可以離開整體而單獨存在,可以具有各自的生命周期。關聯和聚合的區別純粹是概念上的,在Java語法上無法分辨。

  【代碼體現】:成員變量

  【箭頭及指向】:帶空心菱形的實心線箭頭,菱形指向整體

  【示例】:大每一只大雁都屬於一個大雁群,一個大雁群可以有多只大雁。當大雁死去后大雁群並不會消失,兩個對象生命周期不同。

   

3.6 組合(Aggregation)關系

  組合(Composition)關系也是關聯關系的一種,也表示類之間的整體與部分的關系,但它是一種更強烈的聚合關系,是 cxmtains-a 關系。

  組合也是關聯關系的一種特例,他體現的是一種contains-a的關系,這種關系比聚合更強,也稱為強聚合;他同樣體現整體與部分間的關系,但此時整體與部分是不可分的,整體的生命周期結束也就意味着部分的生命周期結束;比如你和你的大腦。組合關系是不能共享的。

  【組合關系】:是整體與部分的關系,但部分不能離開整體而單獨存在。它要求普通的聚合關系中代表整體的對象負責代表部分的對象的生命周期。

  【代碼體現】:成員變量

  【箭頭及指向】:帶實心菱形的實線,菱形指向整體

  【示例】:鳥和翅膀就是組合關系,因為它們是部分和整體的關系,並且翅膀和鳥的生命周期是相同的

  

3.7 關系總結

泛化:表示類與類之間的繼承關系、接口與接口之間的繼承關系;

實現:表示類對接口的實現;

依賴:當類與類之間有使用關系時就屬於依賴關系,不同於關聯關系,依賴不具有“擁有關系”,而是一種“相識關系”,只在某個特定地方(比如某個方法體內)才有關系。

關聯:表示類與類或類與接口之間的依賴關系,表現為“擁有關系”;具體到代碼可以用實例變量來表示;

聚合:屬於關聯的特殊情況,體現部分-整體關系,是一種弱擁有關系;整體和部分可以有不一樣的生命周期;

組合:屬於關聯的特殊情況,體現部分-整體關系,是一種強“擁有關系”

關系強弱

泛化=實現>組合>聚合>關聯>依賴

畫法

繼承、實現是三角型箭頭,其他都為箭頭

組合、聚合都有一個菱形端,且都為實線,其他都無菱形端

繼承是實線,實現是虛線;關聯是實線,依賴是虛線

箭頭:指向父類或接口、依賴物、子元素。

四、簡單的類圖示例

  

  

 參考:http://c.biancheng.net/view/8374.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM