有朋友反映,一上來直接講設計模式就算理解了,也不知道如何畫出類圖,那么我們就通過一張圖,來圖解如何應用UML正確表示類與類之間的關系。
這張圖完整講述了鳥類的生存。
首先是類:在UML中,我們用分成三欄的長方形表示。第一欄是名稱,第二欄是屬性,第三欄是方法。
繼承:唐老鴨屬於鴨的一種,或者說是鴨的細化划分,而鴨屬於鳥類,鳥類屬於動物,這里無論表達成“是”還是屬於,就是這樣一個直觀的關系。用實線一端帶空心三角箭頭表示。箭頭指向父類。
依賴:凡是動物,生存都需要水和空氣,這種必須的需求,我們稱之為依賴關系。用虛線一端帶箭頭表示,箭頭指向依賴物。
聚合、組合:這兩個關系我們放在一起,因為她們看似十分的相似,但是卻有着本質的區別。
很多大雁聚合在一起變成雁群,也可以說雁群里有雁,所以是整體和個體之間的關系,即has-a的關系,此時整體與部分之間是可分離的,他們可以具有各自的生命周期。即雁群可以不存在了,但是孤雁仍然存在。
一只鳥由兩個翅膀組合而成,即一只鳥有兩個翅膀。雖然組合和聚合我們都說“有”什么,但是這個“有”是不同的,他體現的是一種contains-a的關系,這種關系比聚合更強,也稱為強聚合;他同樣體現整體與部分間的關系,但此時整體與部分是不可分的,整體的生命周期結束也就意味着部分的生命周期結束,比如這只鳥死了,自然這兩個翅膀也就不存在了。
關聯:企鵝和氣候有關聯,關聯是最常見的關系,表示類與類之間的聯接, 它使一個類知道另一個類的屬性和方法。關聯有兩個端點, 在每個端點可以有一個基數, 表示這個關聯的類可以有幾個實例.
常見的基數及含義: 0..1:0 或1 個實例.
0..*: 對實例的數目沒有限制.
1: 只能有一個實例.
1..*: 至少有一個實例.
接口:最后就是接口了,接口有兩欄組成,第一欄的頂端加上《interface》后下方寫接口名稱,第二欄是接口方法。接口有自己的表示方法“實現”,虛線一端帶空心三角形。實際開發中,為了更好的實現"開-閉原則",一般都是定義接口,依賴於接口,依賴於抽象。
還有一個概念是——多態,圖中沒有出現。多態顧名思義就是有很多種形式。
bush.roar()
orang.roar()
donald.roar()
同樣是一個roar消息,卻因為不同的對象可產生完全不同的結果。
以上,就是通過一張圖快速了解UML啦,圖片via《大話設計模式》,如有不足,歡迎斧正!