七張圖搞懂UML中的類圖

類圖

概念與解析

  • 類圖的構造,類圖由四部分構成,分別爲:類名、屬性層、方法層、性質層,其中除了類名必須存在,其它層能夠省略。markdown

  • 類圖中的類名若是是正體則說明該類是具體的,若是是斜體字,則代表類是抽象的spa

  • 類圖的第二層是屬性層,屬性能夠是public、private、protected,若是一個屬性的左邊是加號(+)則該屬性是public,左邊若是是減號(-)則該類是private,左邊若是是井號(#)則該屬性是protected。3d

  • 第三層是方法層,方法層中也分爲public、private、protected,區別跟屬性層中一致。同時若是一個方法下面有下劃線,則代表該方法爲靜態方法。code

  • 接口的類圖與類的類圖惟一的區別在於類名中加了interface,標誌該類圖是一個接口的類圖。orm

類圖中的關係

在類與類之間會有連線指明它們之間的關係。類和類、類與接口、接口和接口之間能夠創建如下幾種關係:通常化關係、關聯關係、聚合關係、合成關係和依賴關係,另外這幾種關係都是靜態的。對象

  • 通常化關係:通常化關係表示類與類之間的繼承關係(Java中的extends),接口與接口之間的繼承關係(Java中的extends關鍵字,一個接口能夠extends多個關鍵字,可是不能implements任何接口),或者類與接口的實現關係(Java中的implements關鍵字)。因此通常化關係在Java中的實現經過extens或者implements,extends描述類與類、接口與接口關係,implemens描述類與接口的關係。繼承

 (上圖實現了類與類、類與接口、接口與接口之間的通常化關係)接口

  • 關聯關係:關聯關係是類與類之間的聯接,這種聯接使一個類能夠知道另外一個類的屬性和方法。同時關聯能夠是雙向的,也能夠是單向的。關聯關係在Java中是經過類中的實例變量實現的,例如司機與汽車的相關類,問題與答案的相關類。而且在關聯關係中每一個關聯的端點還能夠有一個基數,代表這一端的類能夠有幾個實例,也就是在Java中所對應的一對1、一對多、多對多的問題。好比一個司機能夠有多輛汽車,一個問題能夠有多個答案,一個答案又可能對應多個問題。生命週期

圖片 (單向關係)圖片

 (雙向關係)

  • 聚合關係:聚合關係是關聯關係的一種,是強的關聯關係,能夠理解爲一個總體必須須要哪些個體,好比一臺電腦必需要有CPU、硬盤、主板、內存等,因此理解成聚合關係就是電腦類必需要關聯CPU類、硬盤類、主板類、內存類等必須的類,從而保證電腦總體的完整性。所以這裏聚合關係與關聯關係的區別在於對於總體性與個體的判斷,在關聯關係中所涉及的類都是平等的,可是在聚合關係中涉及的類不是同一層次的,其中一個表明總體,其它的表明個體。

 (聚合關係的體現)

  • 合成關係:合成關係也是關聯關係的一種,而且它是比聚合關係還要強的一種關係, 合成關係的強主要體如今表明總體的對象負責表明部分對象的生命週期,而且合成關係是不能共享的。表明總體的對象須要保持部分對象的存活。例如美猴王和它的四肢以及金箍棒之間的關係,美猴王和金箍棒是聚合關係,而美猴王和它的四肢關係則更強,是合成關係,由於美猴王的四肢徹底由美猴王本身負責,而且不能共享。

 (合成關係的體現)

  • 依賴關係:依賴關係是類與類之間的鏈接,依賴老是單向的。依賴關係表示一個類依賴與另外一個類,也就是一個類須要經過依賴的類來實現,這樣構成一個依賴關係。好比Person類依賴於Car類和House類,這樣Car類和House類就須要在Person類的引用中進行實現,而且Person類中沒有Car或者House類型的屬性,Car和House的實例是以參數的形式傳入到Person類中的引用方法中的。

 (依賴關係的體現)

既然Car和House類是以參數的形式傳遞到Person類中的引用方法中的,那麼在Java中這種依賴就體如今局部變量、請求參數、以及靜態方法的調用。

相關文章
相關標籤/搜索