UML類別圖: 傳遞參數和Dependency

Dependency

圖一. 類別圖: Dependency關係

如上圖所示,當類別Student相依另一個類別Course,並且在成員函數將類別Course被用來傳遞參數或區域變數時,這兩者關係稱為『Dependency (相依性)』。『Class Student uses class Course』則是圖一英文的描述式,而它的動詞關鍵字就是『Uses (使用)』。

在程式開發者眼中,它經常被稱作『Coupling (耦合)』。換句話說,我們可以由類別圖關係線(dependency, aggregation, composition...)知道模組間的耦合度,當類別的關係線越多,它的耦合度就越高。

在UML,傳遞參數主要有以下三種:
  • in :輸入參數的內容不能被修改  
    • 唯讀
    • StarUML不顯示在圖上
  • inout :輸入參數的內容可以被修改
    • 此參數被你當輸入和輸出
    • 建議使用Pass by reference,不會呼叫Copy Constructor
  • out:與inout 大略相同,此參數只當作輸出

以下將圖一的類別圖轉換C++的程式碼,並且增加成員函數Enrolled區分實作唯讀的方法。

圖二. Dependency範例。左邊:類別圖 右邊:原始碼


如下圖所示,在C++實作UML的IN主要有兩種方式:『Pass by Value』 和『Pass by Const Reference』。然而,Pass by Value主要的缺點是『當類別過於龐大,花太多時間複製物件的內容到新物件』,甚至影響程式的性能。另一方面,若在Pass by Reference加入修飾字const,不但編譯器會出現警告訊息當他人修改參數內容,而且防止不預期的結果,尤其當程式者未在自己的類別實作Copy Constructor。


圖三. 成員函數Enrolled和isEnrolled的比較表

Reference:

  1. Understanding this UML diagram?, cplusplus.com
  2. http://www.cplusplus.com/forum/general/62927/
  3. in,out,inout,return parameter direction in UML, stackoverflow
  4. http://goo.gl/uZvgsl
  5. Applying UML and Patterns: UML Class Diagrams, Craig Larman
  6. http://goo.gl/6TYb2q

留言

這個網誌中的熱門文章

VirtualBox教學:重設硬碟(.vdi)大小(上)

VirtualBox教學:重設硬碟(.vdi)大小(下)

VirtualBox教學: 新增Windows7虛擬電腦(下)