前言 關於UML類圖的這篇文章,我以爲把它放在設計模式專欄的篇首最爲合適,由於在學習設計模式的時候,常常會遇到有關UML類圖,沒有去專門學過的童鞋確定會感受很複雜。學到後面,發現不掌握UML類圖,對設計模式或者某一個框架沒有總體的把控。因此學好UML類圖,你將會更加有自信!javascript
若是你對類之間的依賴、聚合、關聯、組合等關係還很抵制的話,那麼這篇文章就頗有必要看了,隨着對設計模式的慢慢深刻了解,或許你也會發現,UML類圖就顯得格外重要了,是的,UML類圖主要是用來描述類之間的輪廓圖,而類之間的常見關係就是泛化(Generalization)、實現(Realization)、依賴(Dependence)、關聯(Association)、聚合(Aggregation)、組合(Composition)等。類之間關係的強弱:依賴 < 關聯 < 聚合 < 組合 < 泛化(繼承)java
@[toc]程序員
首先來看一個專業一點的定義【來自維基百科】設計模式
UML即統一建模語言(Unified Modeling Language),它是一種開放的方法,用於說明、可視化、構建和編寫一個正在開發的、面向對象的、軟件密集系統的製品的開放方法。UML展示了一系列最佳工程實踐,這些最佳實踐在對大規模,複雜系統進行建模方面,特別是在軟件架構層次已經被驗證有效。架構
不得不說,越專業的描述越讓人看得愈加懵逼...框架
其實吧,簡單的說就是UML它也是一種語言,只不過這種語言比較特殊,UML圖有不少種,其中最爲重要的就是UML類圖了,因此咱們的重心就是UML類圖。uml類圖是一種靜態的結構圖,描述了系統的類的集合,類的屬性和類之間的關係,能夠簡化了人們對系統的理解.eclipse
這麼說吧,2019年11月27號,程序員宜春給程序員老王打電話,兩哥們聊着聊着就聊起了設計模式,宜春說了一大堆關於工廠模式的應用場景舉例,有場景有實例,可謂聲情並茂。然而老王倒是聽的一臉懵逼:你尋思啥啊,說了一大堆 * 話,別嗶嗶了,直接給我畫上UML類圖就得了,一每天的就會裝b,我忍你好久了...ide
是的,經過上面的這段對話,我相信各位也應該能身臨其境的體會到UML類圖的核心做用了,那我就再也不多嗶嗶了...工具
絕大多數的類圖分爲三個部分。部分類圖有五個部分。咱們這裏主要講絕大多數的類圖。 學習
UML類圖的構建有不少種工具或者插件,能夠用PowerDesign 來構建 UML圖,固然像我這麼優(懶)秀(癌)的人確定是用idea自帶的功能自動生成,同時eclipse也是支持的!首先去Setting中設置一下UML類圖的顯示設置,上一節也說過,絕大部分類圖都是前三部分,所以勾選前三個勾就OK了,操做以下:
下面宜春就以身試水用idea來展現一段簡單的UML圖:首先編寫一段簡單的Weixin類代碼:
class WeiXin{
public int a; //公有的public屬性 ====1
private int b; //私有的private屬性 ====2
public String WXInfo(){ //成員方法====3
}
}
複製代碼
而後把剛編寫的Weixin類進行以下操做:
這也忒簡單了吧,小白們都笑出聲來了。固然也能夠在idea中安裝一些UML圖插件,這裏就再也不闡述了。UML類圖主要是用來描述類之間的輪廓圖,而類之間的常見關係就是泛化、實現、依賴、關聯、聚合、組合等。表示關係的強弱:依賴 < 關聯 < 聚合 < 組合 < 泛化(繼承)
在講解類之間的關係以前,咱們頗有必要來了解關係線條圖,這個特別重要簡直就是UML類圖的靈魂【必須牢記】:
有了上面關係線條圖的概念後,咱們正式開始來學習類之間的關係!
依賴關係是類與類之間最弱的關係,B調用A的方法或者屬性,A變化會影響B,反之不成立。依賴差很少就是使用的意思,B使用了A的方法或屬性這個時候咱們就稱爲B依賴A。說簡單點就是一個類使用了另外一個類,這種關係具備臨時性特徵,一個類的改變因爲另外一類而受影響。
class A{
public void methodA(){ }
}
class B{
public A a;
public void methodB(){
a.methodA();
}
}
複製代碼
上面代碼: B依賴A
依賴小結: 一、依賴就是類中使用到了對方 二、使用能夠包括:使用其成員屬性、做爲返回類型、做爲參數類型、方法中使用到
泛化就是繼承,注意一點就是泛化也是依賴關係的一種特例
實現就是接口的實現,太簡單了,小白都笑了....
關聯關係是一種比較強的關係,一樣也是依賴關係的特例,關聯具備導航型:單向關聯、雙向關聯 怎麼理解呢,好比有兩個類,一個Person類,一個身份證IDcard類
單向關聯
class IDcard{
}
class Person{
private IDcard card;
}
複製代碼
雙向關聯
class IDcard{
private Person person;
}
class Person{
private IDcard card;
}
複製代碼
聚合關係是一種特殊的關聯關係,聚合關係強調的是總體和部分的關係,其中部分能夠脫離總體而存在。好比電視機和遙控器。
class TV{
}
class Telecontrol{ //遙控器類
private TV tv;
}
複製代碼
組合關係也是一種特殊的關聯關係,它與聚合關係很像,組合關係強調的也是總體和部分的關係,其中部分不能夠脫離總體而存在。有種同生共死的意思!好比:高尚的說就是宜春能夠沒有頭髮可是不能沒有腦殼,可憐一點的說就是宜春能夠沒有手和腳可是不能沒有腦殼!頭髮、手、腳這些並非必需要有的,組合強調的是不可分離而能夠存在!若是你在大街上看到宜春沒有頭髮,不是很正常嘛?沒有手沒有腳也能接受理解。那你在大街上看到宜春沒有腦殼,這....(這例子舉的我本身都服了)
class Hair{ //頭髮
}
class Head{ //腦殼
}
class YiChun{ //宜春
Head head = new Head(); //Head與宜春同生共死
private Hair hair;
}
複製代碼
類之間關係的強弱:依賴 < 關聯 < 聚合 < 組合 < 泛化(繼承)
若是本文對你有一點點幫助,那麼請點個讚唄,謝謝~
最後,如有不足或者不正之處,歡迎指正批評,感激涕零!若是有疑問歡迎留言,絕對第一時間回覆!
歡迎各位關注個人公衆號,一塊兒探討技術,嚮往技術,追求技術,說好了來了就是盆友喔...