前言
關(guān)于UML類圖的這篇文章氢烘,我覺得把它放在設(shè)計(jì)模式專欄的篇首最為合適,因?yàn)樵趯W(xué)習(xí)設(shè)計(jì)模式的時(shí)候宠叼,經(jīng)常會(huì)遇到有關(guān)UML類圖,沒有去專門學(xué)過的童鞋肯定會(huì)感覺很復(fù)雜其爵。學(xué)到后面冒冬,發(fā)現(xiàn)不掌握UML類圖,對(duì)設(shè)計(jì)模式或者某一個(gè)框架沒有整體的把控醋闭。所以學(xué)好UML類圖窄驹,你將會(huì)更加有自信!
如果你對(duì)類之間的依賴证逻、聚合乐埠、關(guān)聯(lián)、組合等關(guān)系還很抵制的話囚企,那么這篇文章就很有必要看了丈咐,隨著對(duì)設(shè)計(jì)模式的慢慢深入了解,或許你也會(huì)發(fā)現(xiàn)龙宏,UML類圖就顯得格外重要了棵逊,是的,UML類圖主要是用來描述類之間的輪廓圖银酗,而類之間的常見關(guān)系就是泛化(Generalization)辆影、實(shí)現(xiàn)(Realization)徒像、依賴(Dependence)、關(guān)聯(lián)(Association)蛙讥、聚合(Aggregation)锯蛀、組合(Composition)等。類之間關(guān)系的強(qiáng)弱:依賴 < 關(guān)聯(lián) < 聚合 < 組合 < 泛化(繼承)
@[toc]
1次慢、啥是UML類圖旁涤?
首先來看一個(gè)專業(yè)一點(diǎn)的定義【來自維基百科】
UML即統(tǒng)一建模語言(Unified Modeling Language),它是一種開放的方法,用于說明迫像、可視化劈愚、構(gòu)建和編寫一個(gè)正在開發(fā)的、面向?qū)ο蟮奈偶恕④浖芗到y(tǒng)的制品的開放方法菌羽。UML展現(xiàn)了一系列最佳工程實(shí)踐,這些最佳實(shí)踐在對(duì)大規(guī)模由缆,復(fù)雜系統(tǒng)進(jìn)行建模方面算凿,特別是在軟件架構(gòu)層次已經(jīng)被驗(yàn)證有效。
不得不說犁功,越專業(yè)的描述越讓人看得越發(fā)懵逼...
其實(shí)吧,簡單的說就是UML它也是一種語言婚夫,只不過這種語言比較特殊浸卦,UML圖有很多種,其中最為重要的就是UML類圖了案糙,所以我們的重心就是UML類圖限嫌。uml類圖是一種靜態(tài)的結(jié)構(gòu)圖,描述了系統(tǒng)的類的集合时捌,類的屬性和類之間的關(guān)系怒医,可以簡化了人們對(duì)系統(tǒng)的理解.
2、UML類圖有啥用奢讨?
這么說吧稚叹,2019年11月27號(hào),程序員宜春給程序員老王打電話拿诸,兩哥們聊著聊著就聊起了設(shè)計(jì)模式扒袖,宜春說了一大堆關(guān)于工廠模式的應(yīng)用場景舉例,有場景有實(shí)例亩码,可謂聲情并茂季率。然而老王卻是聽的一臉懵逼:你尋思啥啊,說了一大堆 * 話描沟,別嗶嗶了飒泻,直接給我畫上UML類圖就得了鞭光,一天天的就會(huì)裝b,我忍你很久了...
是的泞遗,通過上面的這段對(duì)話惰许,我相信各位也應(yīng)該能身臨其境的體會(huì)到UML類圖的核心作用了,那我就不再多嗶嗶了...
3刹孔、正式理解UML類圖
絕大多數(shù)的類圖分為三個(gè)部分啡省。部分類圖有五個(gè)部分。我們這里主要講絕大多數(shù)的類圖髓霞。
UML類圖的構(gòu)建有很多種工具或者插件卦睹,可以用PowerDesign 來構(gòu)建 UML圖,當(dāng)然像我這么優(yōu)(懶)秀(癌)的人肯定是用idea自帶的功能自動(dòng)生成方库,同時(shí)eclipse也是支持的结序!
4、使用idea畫第一個(gè)UML類圖
首先去Setting中設(shè)置一下UML類圖的顯示設(shè)置纵潦,上一節(jié)也說過徐鹤,絕大部分類圖都是前三部分,因此勾選前三個(gè)勾就OK了邀层,操作如下:
下面宜春就以身試水用idea來展示一段簡單的UML圖:
首先編寫一段簡單的Weixin類代碼:
classWeiXin{? ? public int a;//公有的public屬性? ====1private int b;//私有的private屬性 ====2publicStringWXInfo(){//成員方法====3}}
然后把剛編寫的Weixin類進(jìn)行如下操作:
這也忒簡單了吧返敬,小白們都笑出聲來了。當(dāng)然也可以在idea中安裝一些UML圖插件寥院,這里就不再闡述了劲赠。
5、類之間的關(guān)系圖【必須牢記】
UML類圖主要是用來描述類之間的輪廓圖秸谢,而類之間的常見關(guān)系就是泛化凛澎、實(shí)現(xiàn)、依賴估蹄、關(guān)聯(lián)塑煎、聚合、組合等臭蚁。表示關(guān)系的強(qiáng)弱:依賴 < 關(guān)聯(lián) < 聚合 < 組合 < 泛化(繼承)
在講解類之間的關(guān)系之前最铁,我們很有必要來了解關(guān)系線條圖,這個(gè)特別重要簡直就是UML類圖的靈魂【必須牢記】:
6刊棕、類之間的關(guān)系
有了上面關(guān)系線條圖的概念后炭晒,我們正式開始來學(xué)習(xí)類之間的關(guān)系!
6.1甥角、依賴
依賴關(guān)系是類與類之間最弱的關(guān)系网严,B調(diào)用A的方法或者屬性,A變化會(huì)影響B(tài)嗤无,反之不成立震束。依賴差不多就是使用的意思怜庸,B使用了A的方法或?qū)傩赃@個(gè)時(shí)候我們就稱為B依賴A。說簡單點(diǎn)就是一個(gè)類使用了另一個(gè)類垢村,這種關(guān)系具有臨時(shí)性特征割疾,一個(gè)類的改變由于另一類而受影響。
classA{? ? publicvoidmethodA(){ }}classB{? public A a;? publicvoidmethodB(){? ? a.methodA();? }}
上面代碼:? B依賴A
依賴小結(jié):
1嘉栓、依賴就是類中使用到了對(duì)方
2宏榕、使用可以包括:使用其成員屬性、作為返回類型侵佃、作為參數(shù)類型麻昼、方法中使用到
6.2、泛化
泛化就是繼承馋辈,注意一點(diǎn)就是泛化也是依賴關(guān)系的一種特例
6.3抚芦、實(shí)現(xiàn)
實(shí)現(xiàn)就是接口的實(shí)現(xiàn),太簡單了迈螟,小白都笑了....
6.4叉抡、關(guān)聯(lián)
關(guān)聯(lián)關(guān)系是一種比較強(qiáng)的關(guān)系,同樣也是依賴關(guān)系的特例答毫,關(guān)聯(lián)具有導(dǎo)航型:單向關(guān)聯(lián)褥民、雙向關(guān)聯(lián)
怎么理解呢,比如有兩個(gè)類洗搂,一個(gè)Person類轴捎,一個(gè)身份證IDcard類
單向關(guān)聯(lián)
classIDcard{}classPerson{? private IDcard card;}
雙向關(guān)聯(lián)
classIDcard{? private Person person;}classPerson{? private IDcard card;}
在這里插入圖片描述
6.5、聚合
聚合關(guān)系是一種特殊的關(guān)聯(lián)關(guān)系蚕脏,聚合關(guān)系強(qiáng)調(diào)的是整體和部分的關(guān)系,其中部分可以脫離整體而存在侦锯。比如電視機(jī)和遙控器驼鞭。
classTV{}classTelecontrol{//遙控器類private TV tv;}
在這里插入圖片描述
6.6、組合
組合關(guān)系也是一種特殊的關(guān)聯(lián)關(guān)系尺碰,它與聚合關(guān)系很像挣棕,組合關(guān)系強(qiáng)調(diào)的也是整體和部分的關(guān)系,其中部分不可以脫離整體而存在亲桥。有種同生共死的意思洛心!比如:高尚的說就是宜春可以沒有頭發(fā)但是不能沒有腦袋,可憐一點(diǎn)的說就是宜春可以沒有手和腳但是不能沒有腦袋题篷!頭發(fā)词身、手、腳這些并不是必須要有的番枚,組合強(qiáng)調(diào)的是不可分離而可以存在法严!如果你在大街上看到宜春沒有頭發(fā)损敷,不是很正常嘛?沒有手沒有腳也能接受理解深啤。那你在大街上看到宜春沒有腦袋拗馒,這....(這例子舉的我自己都服了)
classHair{//頭發(fā)}classHead{//腦袋}classYiChun{//宜春Head head =newHead();//Head與宜春同生共死private Hair hair;}
在這里插入圖片描述
7、簡單總結(jié)類之間的六種關(guān)系
1溯街、依賴就是類中使用到了對(duì)方诱桂。使用:使用其成員屬性、作為返回類型呈昔、作為參數(shù)類型挥等、方法中使用到2、泛化就是繼承韩肝,泛化也是依賴關(guān)系的一種特例3触菜、實(shí)現(xiàn)就是接口的實(shí)現(xiàn),太簡單了哀峻,小白都笑了....4涡相、關(guān)聯(lián)是一種比較強(qiáng)的關(guān)系,是依賴關(guān)系的特例剩蟀,關(guān)聯(lián)具有導(dǎo)航型:單向關(guān)聯(lián)催蝗、雙向關(guān)聯(lián)5、聚合是一種特殊的關(guān)聯(lián)關(guān)系育特,聚合強(qiáng)調(diào)整體和部分的關(guān)系丙号,可有可無!6缰冤、組合是一種特殊的關(guān)聯(lián)關(guān)系犬缨,與聚合關(guān)系很像,同生共死棉浸!
類之間關(guān)系的強(qiáng)弱:依賴 < 關(guān)聯(lián) < 聚合 < 組合 < 泛化(繼承)
如果本文對(duì)你有一點(diǎn)點(diǎn)幫助怀薛,那么請(qǐng)點(diǎn)個(gè)贊唄,謝謝~
最后迷郑,若有不足或者不正之處枝恋,歡迎指正批評(píng),感激不盡嗡害!如果有疑問歡迎留言焚碌,絕對(duì)第一時(shí)間回復(fù)!
歡迎各位關(guān)注我的公眾號(hào)霸妹,一起探討技術(shù)十电,向往技術(shù),追求技術(shù),說好了來了就是盆友喔...
在這里插入圖片描述