UML 肯定有人不熟悉缀蹄,很多人知道但是不會看、會看不會寫膘婶、會寫寫不熟練缺前。這里我很肯定的告訴大家,UML 你用不好竣付,用不熟練诡延,那你就屬于:不入流
的那層次。不管你是拿來裝逼也好古胆,還是真的設計復雜的功能肆良、業(yè)務框架也好,UML 都是飛漲重要逸绎、起決定性的制約因素
我直說一點惹恃,你在公司里分享自己的功能、業(yè)務框架時棺牧,沒有沒 UML 那完全是2個概念巫糙,有的話既能裝逼得滿分,還能讓技術大神認同你颊乘,上到領導参淹,下到同事都認同你醉锄。效果就是這么明顯,所以大家 UML 走起吧
去年我專門寫過 UML 類圖的文章浙值,但是時間久遠都忘的差不多了恳不,當時純自己查資料學習的,看的囫圇吐棗开呐,其中關系不是非常清楚烟勋。這幾天在B站上看到了:
尚硅谷 韓順平 圖解Java設計模式
這個視頻教程,老師講的非常到位筐付,以下就把 UML 類圖其中的6大關系講的非常清楚卵惦、透徹,很贊瓦戚。其實吧完全不會的內(nèi)容沮尿,要是能找到大機構或是N人的視頻講解,真的比純自學強太多了伤极,自學很多時候很多認識都是模糊蛹找。或是錯誤的哨坪。過寫年再回頭看庸疾,真想抽自己嘴巴,寫的都是什么玩意兒...設計模式視頻鏈接:尚硅谷 韓順平 圖解Java設計模式
古人云:B站是個學習網(wǎng)站当编,真是誠不欺我呀届慈!一入B站深似海,從此游戲是路人...
UML 圖分類
UML 圖按照功能可以這么分:
用例圖 use case
-
靜態(tài)結構圖:
類圖忿偷、對象圖金顿、包圖、組件圖鲤桥、部署圖 -
動態(tài)行為圖:
交互圖(時序圖于協(xié)作圖)揍拆、狀態(tài)圖、活動圖
UML 所有的圖如下:
-
類圖(Class Diagram):
描述系統(tǒng)所包含的類茶凳、類內(nèi)部結構及類之間的關系嫂拴。 -
對象圖(Object Diagram):
是類圖的一個具體實例。 -
組件圖(Compoment Diagram):
描述代碼部件的物理結構以及各部件之間的依賴關系贮喧。 -
部署圖(Deployment Diagram):
定義系統(tǒng)中軟筒狠、硬件的物理體系結構。 -
用例圖(Usecase Diagram):
從用戶的角度出發(fā)描述系統(tǒng)的功能箱沦、需求辩恼,展示系統(tǒng)外部的各類角色與系統(tǒng)內(nèi)部的* 各種用例之間的關系。 -
時序圖(Sequence Diagram):
表示對象之間動態(tài)合作的關系。 -
協(xié)作圖(Collaboration Diagram):
描述對象之間的協(xié)作關系灶伊。 -
狀態(tài)圖(Statechart Diagram):
描述一類對象的所有可能的狀態(tài)及事件發(fā)生時狀態(tài)的轉移條件疆前。 -
活動圖(Activity Diagram):
描述系統(tǒng)中各種活動的執(zhí)行順序。
類圖是 UML 中最核心的圖
UML 類圖中類的6種關系
-
依賴
谁帕、泛化(繼承)
峡继、實現(xiàn)
、關聯(lián)
匈挖、聚合
、組合
看著很多啊康愤,但是就起根本儡循,只有3種關系:
類和屬性、參數(shù)之間的相互依賴
類的繼承
接口的實現(xiàn)
其他的關系大家可以這樣理解:
-
關聯(lián)
是更復雜征冷、更詳細表達的特殊依賴
-
聚合
是使用 set 方式傳遞數(shù)據(jù)的特殊關聯(lián)
-
組合
是使用 new 方式產(chǎn)生數(shù)據(jù)的特殊關聯(lián)
ok择膝,UML 中大家費解的類關系其實就是這么回事
泛化關系
泛化關系
就是 繼承關系
,這點就不用說了
UML 圖標:
實線+空箭頭
實現(xiàn)關系
實現(xiàn)關系
不用說了检激,就是實現(xiàn)接口
UML 圖標:
虛線+空箭頭
依賴關系
定義:
如果類中用到了對方肴捉,那么他們之間就存在依賴關系
舉例 1:
A 中有個成員變量 B,那么就可以說 A 依賴了 B
舉例 2:
Person 類依賴了 IDCard
class Person {
IDCard _idCard;
}
class IDCard {
String info;
}
UML 圖標:
虛線+短箭頭
特殊說明:
- 并不是只有成員變量才可以成為依賴叔收,不管你在哪里用到的這個對象齿穗,都可以稱為
依賴
,包括以下情境饺律,只要滿足下面的使用情境窃页,就可以稱為:依賴
類中用到了對方
類的成員屬性
方法的返回類型
方法的參數(shù)類型
方法中使用到
- 因為
關聯(lián)
是依賴
的更詳細說明,關聯(lián)
是專門描述成員屬性的關系复濒,所以依賴中所有涉及成員屬性的地方更適合使用:關聯(lián)脖卖、聚合、組合
巧颈。因為大家看 UML 時看到依賴
畦木,那么肯定就可以排除成員屬性的情況,一般多是方法使用到對方
關聯(lián)關系
定義:
類于類之間的練習砸泛,是依賴關系的特列
特性:
關聯(lián)關系是更具體的依賴關系十籍,關聯(lián)關系只描述:成員變量
,也就是類和其成員屬性之間的關系晾嘶,可以是:單向一對一
妓雾、雙向一對一
。所以關聯(lián)關系的核心是:導航性
垒迂,通過關聯(lián)關系我們只看 UML 就可以精確的了解類之間是怎么組織的了
UML 圖標:
-
單向:
實線+短箭頭
image -
雙向:
實線+沒有箭頭
image
舉例 1:
單向一對一
class Person {
IDCard _idCard;
}
class IDCard {
String info;
}
舉例 2:
多向一對一
class Person {
IDCard _idCard;
}
class IDCard {
Person _person;
String info;
}
聚合關系
定義:
整體和部分之間的關系
特性:
同樣只描述成員屬性械姻、并且整體和部分是可以分開的,通常表現(xiàn)為那些通過 set 方法傳遞數(shù)值的成員變量,需要注意的是聚合關系是關聯(lián)關系的特例
UML 圖標:
-
單向:
實線+空菱形
image
舉例:
電腦和鼠標楷拳、顯示器就是典型的聚合關系绣夺,鼠標和鍵盤都是熱插拔的,沒有鼠標鍵盤不影響開機欢揖,電腦一樣可以跑起來
class Computer {
Keyborad _keyborad;
Monitor _monitor;
set keyborad(Keyborad value) {
_keyborad = value;
}
set monitor(Monitor value) {
_monitor = value;
}
}
class Keyborad {}
class Monitor {}
組合關系
定義:
同樣也是整體和部分之間的關系
特性:
同樣只描述成員屬性陶耍、整體和部分是不可以分開的,通常表現(xiàn)為那些通過 new 創(chuàng)建出來的成員變量她混,需要注意的是組合關系也是關聯(lián)關系的特例烈钞。當然組合還表現(xiàn)為整體若是銷毀了,組件也同樣必須銷毀
UML 圖標:
-
單向:
實線+實心菱形
image
舉例:
電腦和機箱坤按,機箱是電腦的核心所在毯欣,沒有機箱就沒有電腦一說,機箱是電腦永遠不可或缺的部分臭脓,這就是典型的組合關系酗钞,
class Computer {
Keyborad _keyborad;
Monitor _monitor;
Chassis _chassis = Chassis();
set keyborad(Keyborad value) {
_keyborad = value;
}
set monitor(Monitor value) {
_monitor = value;
}
}
class Keyborad {}
class Monitor {}
class Chassis {}
總結
雖然所有的類于屬性自之間的關系都可以用依賴表示,但是對于成員變量來說来累,我們更傾向于使用關聯(lián)砚作、聚合、組合嘹锁,剩下的可以用到依賴的時候就是方法傳參葫录,返回值的情況居多了,所以大家注意
實線比虛線更能表示類之間的緊密關系
- 繼承用的實線兼耀,接口實線用的虛線压昼,繼承的關系可比接口關系近多了。依賴是虛線瘤运,關聯(lián)是實現(xiàn)窍霞,自然描述作為成員屬性的關聯(lián)自然比只剩下方法可以參數(shù)返回值可以描述的依賴要和類的關系更加緊密了實心表示不可分割,空心表示可以分離
- 這點從聚合和組合就能看出來拯坟,除了組合之外但金,誰用實心的了