摘要:從零開始單排學(xué)設(shè)計模式的國服排位之旅,今天正式開啟目前段位定級賽這篇文章來總結(jié)下類圖,本來不打算講類圖的,因為我在學(xué)習(xí)設(shè)計模式的時候,一遇到有關(guān)的就會自動忽略,一看感覺就很復(fù)雜。關(guān)聯(lián)關(guān)系用實現(xiàn)箭頭來表示。
閱讀本文大概需要 3.5 分鐘。
本篇是設(shè)計模式系列的開篇,雖然之前也寫過相應(yīng)的文章,但是因為種種原因后來斷掉了,而且發(fā)現(xiàn)之前寫的內(nèi)容也很渣,不夠系統(tǒng)。
所以現(xiàn)在打算重寫,加上距離現(xiàn)在也有一段時間了,也算是自己的一個回顧吧!
學(xué)而時習(xí)之,不亦說乎。
從零開始單排學(xué)設(shè)計模式的國服排位之旅,今天正式開啟!
目前段位:定級賽
這篇文章來總結(jié)下UML類圖,本來不打算講UML類圖的,因為我在學(xué)習(xí)設(shè)計模式的時候,一遇到有關(guān)UML的就會自動忽略,一看感覺就很復(fù)雜。
但是隨著學(xué)習(xí)的深入,發(fā)現(xiàn)不掌握UML類圖,對設(shè)計模式或者某一個框架沒有整體的把控。所以與其逃避,不如敢于面對,今天就讓我們一起來了解下什么是UML類圖。
Let"s Go!
前言
設(shè)計模式不是語法,是一種巧妙的寫法,能把程序變的更加靈活。架構(gòu)模式比設(shè)計模式大,架構(gòu)模式是戰(zhàn)略,而設(shè)計模式是戰(zhàn)術(shù)。
設(shè)計模式分為3大類型:創(chuàng)建型,行為型,結(jié)構(gòu)型,總共有23種。
UML類圖
類圖描述系統(tǒng)中類的靜態(tài)結(jié)構(gòu),它不僅定義系統(tǒng)中的類,描述類之間的聯(lián)系,如關(guān)聯(lián)、依賴、聚合等,還包括類的內(nèi)部結(jié)構(gòu)(類的屬性和操作)。
類圖描述的是靜態(tài)關(guān)系,在系統(tǒng)的整個生命周期中都是有效的。
對象圖是類圖的實例,它們的不同之處在于對象圖顯示類圖的多個對象實例,而不是實際的類。由于對象存在生命周期,所以對象圖只能在系統(tǒng)某一時間存在。
UML基本圖示法
虛線箭頭指向依賴;
實線箭頭指向關(guān)聯(lián);
虛線三角指向接口;
實線三角指向父類;
空心菱形能分離而獨立存在,是聚合;
實心菱形精密關(guān)聯(lián)不可分,是組合;
上面是UML的語法,在畫類圖的時候,清理類和類之間的關(guān)系是重點。
類的關(guān)系有泛化(Generalization)、實現(xiàn)(Realization)、依賴(Dependency)和關(guān)聯(lián)(Association)。
其中關(guān)聯(lián)又分為一般關(guān)聯(lián)關(guān)系和聚合關(guān)系(Aggregation),合成關(guān)系(Composition)。
基本概念
類圖(Class Diagram):類圖是面向?qū)ο笙到y(tǒng)建模中最常見和最重要的圖,是定義其他圖的基礎(chǔ)。
類圖的主要是用來顯示系統(tǒng)中的類、接口以及它們之間的靜態(tài)結(jié)構(gòu)和關(guān)系的一種靜態(tài)模型。
類圖的3個基本組件:類名、屬性、方法。
詳細(xì)解析
注:下面圖片實例中的代碼為C#代碼,非Java代碼!
繼承關(guān)系
首先看到上圖這個“動物”矩形框,它就代表一個類(Class)。
類圖分三層
第一層顯示類的名稱,如果是抽象類,則就用斜體顯示。
第二層是類的特性,通常就是字段和屬性。
第三層是類的操作,通常是方法或行為。
在看到上圖中的“飛翔”,它表示一個接口圖,與類圖的區(qū)別主要是頂端有<
第一行是接口名稱,第二行是接口方法。
接口還有另一種表示方法,俗稱棒棒糖表示法,就是唐老鴨類實現(xiàn)了“講人話”的接口。
鴨子本來也有語言,只不過只有唐老鴨是能講人話的鴨子。
注意動物、鳥、鴨、唐老鴨之間的關(guān)系符號,你就會發(fā)現(xiàn)它們都是繼承的關(guān)系。
繼承關(guān)系用空心三角形+實現(xiàn)來表示。
這里列舉的幾種鳥中,大雁是最能飛的,我讓它實現(xiàn)了飛翔接口。
實現(xiàn)接口用空心三角形+虛線來表示。
在看下圖中企鵝和氣候兩個類,企鵝是很特別的鳥,會游不會飛。更重要的是,它與氣候有很大的關(guān)聯(lián)。我們不去討論為什么北極沒有企鵝,為什么它們要每年長途跋涉。
總之,企鵝需要“知道”氣候的變化,需要“了解”氣候規(guī)律。
當(dāng)一個類“知道”另一個類時,可以用關(guān)聯(lián)(association)。
關(guān)聯(lián)關(guān)系用實現(xiàn)箭頭來表示。
我們再來看上圖中大眼與雁群這兩個類,大雁是群居動物,每只大雁都屬于一個雁群,一個雁群可以又很多只大雁。
所以它們之間就滿足聚合(Aggregation)關(guān)系。
聚合表示一種弱的“擁有”關(guān)系,體現(xiàn)的是A對象可以包含B對象,但B對象不是A對象的一部分。
聚合關(guān)系用實心的菱形+實線箭頭來表示。
合成(Composition,也有翻譯成“組合”的)是一種強的“擁有”關(guān)系,體現(xiàn)了嚴(yán)格的部分和整體的關(guān)系,部分和整體的聲明周期一樣。
在這里鳥和其翅膀就是合成(組合)關(guān)系,因為它們是部分和整體的關(guān)系,并且翅膀和鳥的聲明周期是相同的。
合成關(guān)系用實心的菱形+實現(xiàn)箭頭來表示。
另外,你會注意到合成關(guān)系的連線兩端還有一個數(shù)字“1”和數(shù)字“2”,這被稱為基數(shù)。表明這一段的類可以有幾個實例,很顯然,一個鳥應(yīng)該有兩只翅膀。
如果一個類可能有無數(shù)個實例,則就用“n”來表示。關(guān)聯(lián)關(guān)系、聚合關(guān)系也可以有基數(shù)的。
動物幾大特征,比如有新陳代謝,能繁殖。而動物要有生命力,需要氧氣、水以及食物等。也就是說,動物依賴于氧氣和水。
他們之間是依賴關(guān)系(Dependency),用虛線箭頭來表示。
結(jié)語
編程是一門技術(shù),更加是一門藝術(shù)!
不能只滿足于寫完代碼運行結(jié)構(gòu)正確就完事,時??紤]如何讓代碼更加簡練,更加容易維護,容易擴展和復(fù)用,只有這樣才能可以真正得到提高。
切身感悟:自己幾個月之前寫完的代碼,現(xiàn)在再來回顧,你會發(fā)現(xiàn)這代碼簡直了...,一團糟,甚至懷疑這代碼不是出自自己之手(絕對是自己寫的)。想著手優(yōu)化,進行改進,又怕本來沒問題的功能,改出問題,影響使用,然后又進入惡性循環(huán)了。。。這種情況要切記,一定要盡可能的避免!
寫出優(yōu)雅的代碼也是一種很爽的事情?。?!
往期精彩回顧
房東:你敢申報,我就漲房租!京東取消年終獎!
一千行MySQL詳細(xì)學(xué)習(xí)筆記(值得學(xué)習(xí)與收藏)
你女朋友是高可用么?
在Java中如何優(yōu)雅地判空
最近整個業(yè)內(nèi)狀態(tài)不太好,注意提防一些公司的小九九!
Java爬取并下載酷狗TOP500歌曲
如何計算服務(wù)器能夠承受多大的pv?
程序員們,別再學(xué)習(xí)框架了!
??瞥绦騿T與本科程序員之間有什么區(qū)別?
程序員的一天是怎樣過的?
從 0 開始手寫一個Tomcat,7 步搞定!
關(guān)注我的公眾號閱讀更多精彩?。。?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/73253.html
摘要:前言只有光頭才能變強好的,今天我們要上鉑金段位了,如果還沒經(jīng)歷過青銅和白銀和黃金階段的,可以先去蹭蹭經(jīng)驗再回來從零單排學(xué)青銅從零單排學(xué)白銀從零單排學(xué)黃金這篇文章主要講的是主從復(fù)制。 前言 只有光頭才能變強 好的,今天我們要上鉑金段位了,如果還沒經(jīng)歷過青銅和白銀和黃金階段的,可以先去蹭蹭經(jīng)驗再回來: 從零單排學(xué)Redis【青銅】 從零單排學(xué)Redis【白銀】 從零單排學(xué)Redis【黃金...
摘要:可以通過以下兩個配置盡量減少數(shù)據(jù)丟失的可能從零單排學(xué)鉑金三,敬請期待參考資料設(shè)計與實現(xiàn)實戰(zhàn)如果你覺得我寫得還不錯,了解一下堅持原創(chuàng)的技術(shù)公眾號。 前言 只有光頭才能變強 好的,今天我們要上【鉑金二】了,如果還沒有上鉑金的,趕緊先去蹭蹭經(jīng)驗再回來(不然不帶你上分了): 從零單排學(xué)Redis【青銅】 從零單排學(xué)Redis【白銀】 從零單排學(xué)Redis【黃金】 從零單排學(xué)Redis【鉑金一...
摘要:當(dāng)被監(jiān)聽的準(zhǔn)備好執(zhí)行連接應(yīng)答讀取等等操作時,與操作相對應(yīng)的文件事件就會產(chǎn)生,根據(jù)文件事件來為關(guān)聯(lián)對應(yīng)的事件處理器,從而實現(xiàn)功能。服務(wù)器使用單線程單進程的方式處理命令請求。 前言 只有光頭才能變強 好的,今天我們要上黃金段位了,如果還沒經(jīng)歷過青銅和白銀階段的,可以先去蹭蹭經(jīng)驗再回來: 從零單排學(xué)Redis【青銅】 從零單排學(xué)Redis【白銀】 看過相關(guān)Redis基礎(chǔ)的同學(xué)可以知道Re...
閱讀 1964·2021-11-19 09:40
閱讀 2148·2021-10-09 09:43
閱讀 3304·2021-09-06 15:00
閱讀 2821·2019-08-29 13:04
閱讀 2776·2019-08-26 11:53
閱讀 3539·2019-08-26 11:46
閱讀 2330·2019-08-26 11:38
閱讀 398·2019-08-26 11:27