WHAT'S NEW?
Loading...

UML類別圖:基本概念篇


上一篇簡略介紹軟體開發流程,正確商業軟體先使用使用者案例圖定義產品走向,然後底下工程師根據軟體需求進入軟體開發流程,然而團隊成員的能力參差不齊,因此"如何讓所有成員如何都能進入狀況?"成為軟體開發重大議題,而類別圖就是其中關鍵因子。

為何需要畫類別圖(Class Diagram)?

之前有提過是否畫類別圖是一個爭議性問題,他主要有以下的問題:

  • 沒有足夠時間更新文件---(等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. 資料庫存取範例
圖一. 類別示意圖
  1. 連結串列範例
    1. 圖二.  類別示意圖

延伸閱讀

[1]IBM developerWorks, UML basics: The class diagram
    http://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/
[2]UML Class Diagram
    http://www.tutorialspoint.com/uml/uml_class_diagram.htm

0 comments:

張貼留言