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區分實作唯讀的方法。
如下圖所示,在C++實作UML的IN主要有兩種方式:『Pass by Value』 和『Pass by Const Reference』。然而,Pass by Value主要的缺點是『當類別過於龐大,花太多時間複製物件的內容到新物件』,甚至影響程式的性能。另一方面,若在Pass by Reference加入修飾字const,不但編譯器會出現警告訊息當他人修改參數內容,而且防止不預期的結果,尤其當程式者未在自己的類別實作Copy Constructor。
圖三. 成員函數Enrolled和isEnrolled的比較表 |
Reference:
- Understanding this UML diagram?, cplusplus.com http://www.cplusplus.com/forum/general/62927/
- in,out,inout,return parameter direction in UML, stackoverflow http://goo.gl/uZvgsl
- Applying UML and Patterns: UML Class Diagrams, Craig Larman http://goo.gl/6TYb2q
留言
張貼留言