UML之類圖(Class Diagram)

類圖是類的靜態關係描述圖,簡單來講有兩個方面,有哪些類,這些類之間的關係是什麼?需要注意的是類圖描述的是靜態關係,動態行爲的如流程,判斷,循環等類圖無法描述,需要搭配其它UML圖。

類自身的描述

生物由細胞構成,類圖由類構成,我們先看看類長什麼樣,如何描述。首先類有一個唯一的名字,通常用手寫字母大寫的英文字母表示,一 般名字應該用名詞來表示。類的內部有兩個部分構成,數據部分和操作部分。數據部分也叫屬性(Property),存儲一些數據、狀態、關聯等信息,操作部分表示的是該類能夠執行的操作(Operation)。熟悉OOP的朋友會比較容易理解,前者就是類的全局變量,後者是方法(Method)。綜上,類內部的圖分爲三個部分,上中下結構,上部爲類的名字,中部存放屬性,下部表示操作列表。三個部分都只有名字是必填項,格式可能比較複雜,不過常用的都很簡單,再加上一些優秀的UML工具幫忙,還是比較容易上手的。


類之間的關係

類之間的關係種類歸納起來也就三種,事實上很好掌握,至少看得懂是很容易的。複雜的用法讓專家去處理吧,不過話說回來,圖的目的主要是溝通交流,太複雜了,哪來那麼多專家交流。所以個人認爲最簡單的可用的系統,最可靠,最有效,類圖也如此。

繼承(Generalization, Extends)

繼承是OOP的一個重要特性,合理的地方使用繼承給系統的設計和實現帶來非常大的好處。不過,使用過度也會讓系統難以理解、維護、擴展,一個重要的判斷標準是替換原則,任何使用父類的地方,替換爲子類,正常運轉。類圖裏面使用單向三角箭頭的有向線表示繼承。箭頭的類型和方向我是這樣記的,箭頭最大(三角形)爲繼承,方向的話,父類不知道子類的存在,子類知道父類的所有信息,所以箭頭是由子類指向父類。


關聯(Association)

關聯也是另外一種非常常見的類關係。稍微大一點的項目都會有不只一個類文件,所有的類需要關聯起來,互相合作,才能完整的實現整個系統。理論上來說,一個含有String類型屬性的類,與String類也存在關聯的關係,但我們通常不會這樣表示。這就引出一個比較有意思的話題,什麼時候一個屬性應該表示爲數據,什麼時候又應該表述爲關聯關係。完全同意Martin Fowler的觀點,值得體現在類圖上面的,重要的表示爲關聯關係,其它的都表示爲數據。以上面String的例子來說,顯然String不值得體現在類圖上面,所以表示爲數據。關聯關係在類圖裏面用有向單箭頭線表示。箭頭小,指向被關聯的類,我把它理解爲鏈接(Link)的概念。


依賴(Dependency)

準確的說,應該是直接依賴。同上,保持類圖的簡單性,所以只標識重要的依賴關係。依賴的情況很多,不過設計良好的程序總結下來就只有一種API依賴,或者更直白一點就是方法調用依賴,方法簽名改了,調用者也得跟着改變。可能的情況如,靜態方法修改,參數對象對應類的接口修改等。類圖裏面依賴關係的表示和關聯相似,只是線條變爲虛線而已。


小結

UML圖一般是用來溝通的,是程序員的統一語言,有它的普適性。一般情況下也無需繪製得多麼的精確和完備,理論上只需要掌握一些基本的概念和知識即可,不要把它想得多麼的高大上,事實上,常用的幾個UML圖,常用的一些畫法比較容易掌握,值得學習。

發佈了76 篇原創文章 · 獲贊 535 · 訪問量 95萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章