重溫 UML 類圖

image

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 圖標: 實線+空箭頭

image


實現(xiàn)關系

實現(xiàn)關系 不用說了检激,就是實現(xiàn)接口

UML 圖標: 虛線+空箭頭

image

依賴關系

定義: 如果類中用到了對方肴捉,那么他們之間就存在依賴關系

舉例 1: A 中有個成員變量 B,那么就可以說 A 依賴了 B

舉例 2: Person 類依賴了 IDCard

class Person {
  IDCard _idCard;
}

class IDCard {
  String info;
}

UML 圖標: 虛線+短箭頭

image

特殊說明:

  1. 并不是只有成員變量才可以成為依賴叔收,不管你在哪里用到的這個對象齿穗,都可以稱為依賴,包括以下情境饺律,只要滿足下面的使用情境窃页,就可以稱為:依賴
    • 類中用到了對方
    • 類的成員屬性
    • 方法的返回類型
    • 方法的參數(shù)類型
    • 方法中使用到
  1. 因為 關聯(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;
}
image

舉例 2: 多向一對一

class Person {
  IDCard _idCard;
}

class IDCard {
  Person _person;
  String info;
}
image

聚合關系

定義: 整體和部分之間的關系

特性: 同樣只描述成員屬性械姻、并且整體和部分是可以分開的,通常表現(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 {}
image

總結

  1. 雖然所有的類于屬性自之間的關系都可以用依賴表示,但是對于成員變量來說来累,我們更傾向于使用關聯(lián)砚作、聚合、組合嘹锁,剩下的可以用到依賴的時候就是方法傳參葫录,返回值的情況居多了,所以大家注意

  2. 實線比虛線更能表示類之間的緊密關系 - 繼承用的實線兼耀,接口實線用的虛線压昼,繼承的關系可比接口關系近多了。依賴是虛線瘤运,關聯(lián)是實現(xiàn)窍霞,自然描述作為成員屬性的關聯(lián)自然比只剩下方法可以參數(shù)返回值可以描述的依賴要和類的關系更加緊密了

  3. 實心表示不可分割,空心表示可以分離 - 這點從聚合和組合就能看出來拯坟,除了組合之外但金,誰用實心的了


?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市郁季,隨后出現(xiàn)的幾起案子冷溃,更是在濱河造成了極大的恐慌,老刑警劉巖梦裂,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件似枕,死亡現(xiàn)場離奇詭異,居然都是意外死亡年柠,警方通過查閱死者的電腦和手機凿歼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人答憔,你說我怎么就攤上這事味赃。” “怎么了虐拓?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵心俗,是天一觀的道長。 經(jīng)常有香客問我蓉驹,道長城榛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任态兴,我火速辦了婚禮吠谢,結果婚禮上,老公的妹妹穿的比我還像新娘诗茎。我一直安慰自己,他們只是感情好献汗,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布敢订。 她就那樣靜靜地躺著,像睡著了一般罢吃。 火紅的嫁衣襯著肌膚如雪楚午。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天尿招,我揣著相機與錄音矾柜,去河邊找鬼。 笑死就谜,一個胖子當著我的面吹牛怪蔑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丧荐,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缆瓣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了虹统?” 一聲冷哼從身側響起弓坞,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎车荔,沒想到半個月后渡冻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡忧便,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年族吻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡呼奢,死狀恐怖宜雀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情握础,我是刑警寧澤辐董,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站禀综,受9級特大地震影響简烘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜定枷,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一孤澎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧欠窒,春花似錦覆旭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荐虐,卻和暖如春七兜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背福扬。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工腕铸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铛碑。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓狠裹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親亚茬。 傳聞我的和親對象是個殘疾皇子酪耳,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容