UML類別圖:基本概念篇
為何需要畫類別圖(Class Diagram)?
之前有提過是否畫類別圖是一個爭議性問題,他主要有以下的問題:
的確,畫類別圖對工程師是一大挑戰,然而它能有效率地分割功能給底下的工程師,並且降低工作之間的相依性,使得每一個工程師開發時程能獨立運作。有一天,我與面試主管討論此問題,他說:『對他而言,用UML畫系統架構圖能幫助自己溝通,並且規劃好的架構後清楚地分割任務給底下工程師,時間久了難免文件失去存在意義。』當下,我深深反省並重新思考如何正確使用它幫助團隊?
- 沒有足夠時間更新文件---(等bug解完再說)
- 很難精準描述高手的程式碼 i.e.template進階用法--(好強~!E04看不懂)
- 幫新鮮人惡補物件導向和UML,甚至Design Pattern ----(身兼老師 = =)
- 爛程式碼和架構 i.e.類別過於冗長和兼任多個角色 ---(不知道什麼是Clean Code嗎)
的確,畫類別圖對工程師是一大挑戰,然而它能有效率地分割功能給底下的工程師,並且降低工作之間的相依性,使得每一個工程師開發時程能獨立運作。有一天,我與面試主管討論此問題,他說:『對他而言,用UML畫系統架構圖能幫助自己溝通,並且規劃好的架構後清楚地分割任務給底下工程師,時間久了難免文件失去存在意義。』當下,我深深反省並重新思考如何正確使用它幫助團隊?
例子1:在大型商業軟體下,如何讓新人有能力維護系統?
最沒效率方法是叫新人看哪一段程式碼,而是簡略描述系統架構後,縮小範圍到改的類別進行詳細描述。然而,當你要改類別過於龐大時,千萬不要詳細劃出全部,而是列出有關的類別成員即可,一方面新人根據關鍵字抓出大略修改方向,另一方面新人也能慢慢消化與吸收剛剛講解。
例子2:如何讓團隊開發速度加快?
開發每個功能必須先規劃好軟體架構,並且根據PM的需求畫出介面雛形,在實作前確認工作走向是正確的。最重要的是不要因趕專案時程,沒有留下任何文件,不但延長開發時程(i.e. 新人適應期),而且促使了團隊內的衝突增加。文件的存在目的是減少被打擾的時間,工程師最忌諱打斷自己開發思緒,甚至新人問題抓不到重點,然而有時必須檢討有沒有給新人足夠資源?
目的
類別圖主要定義此類別角色和責任,不但降低系統重複功能,而且告知他人如何使用此類別.
符號說明
圖一.類別的構成(source: IBM developerWorks) |
- 描述類別成員時,不像程式語言在前面宣告資料型別,而是在後面加上冒號和資料型別,以下為類別圖表示方式: (橘色代表可選擇不加)
- 資料成員(attribute or data member )
name:type = default value
- 成員函數(operation or member function)
function(parameter list) : return type of value
- 若我們在類別中定義靜態不能改變常數變數,我們需要此資料成員後面加上{frozen},代表此成員是不可變動。
- 『static const double pi=3.14;』→『db: double=3.14 {frozen}』
- 處理的定義符( access specifiers)在UML所代表的符號
- private::『-』
- public:『+』
- protected:『#』
- package:『~』
- 關係
- Containment
- 通常用來描述鏈結串列,二元樹,關係陣列
- Association (knows a)
- 兩個類別彼此都有著直接的關係
- Dependency(is a)
- class A uses a class B→類別A使用類別B
- Aggregation (has a)
- class A has a class B→類別A資料成員包含類別B
- Composition (own a)
- class A own a class B→類別A擁有類別B
- Inheritance (is extended by)
- class A is extended by class B→類別B在類別A基礎下進行功能擴展
- 多重性(Multiplicity)
- 主要描述類別擁有實體數目
indicator 指示符 | 意思 |
---|---|
0....1
|
零或一個
|
1
|
一個
|
0....*
|
零或多個
|
1....*
|
一或多個
|
*
|
多個
|
範例
圖一. 類別示意圖 |
延伸閱讀
[1]IBM developerWorks, UML basics: The class diagramhttp://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/
[2]UML Class Diagram
http://www.tutorialspoint.com/uml/uml_class_diagram.htm
留言
張貼留言