1.2 《硬啃設計模式》 第2章 學習設計模式需掌握的UML知識


要看懂設計模式,你需要懂類圖(Class Diagram),也需要懂一點對象圖(Object Diagram),下面介紹一些UML的必要知識,以便你學習設計模式。


屬性、操作


下圖簡單介紹類的屬性和操作。 類有屬性(attributes)、操作(operations),屬性和操作統稱特性(features)。
1.jpg 

 

下圖進一步詳細介紹類圖細節,包括:屬性和操作的作用域、屬性類型、參數類型、方法返回值類型等。
2.jpg

 

接口、枚舉


3.jpg

 

抽象類
4.jpg

 

繼承關系


類B繼承類A,如下圖:
5.jpg

 

抽象類被繼承,如下圖:
6.jpg

 

實現關系


實現是指某接口被實現,而不是某類被實例化。 實現如下圖:


7.jpg

 

依賴關系


先看圖:
8.jpg

B依賴A,表示如果A的接口發生變化,B也需要相應地改變。

依賴的常見情況有:

1. B調用了A的方法。

2. B的方法中,使用了A為參數。

3. B的方法返回值類型為A。

 


引用關系


先看圖:
9.jpg

Class1有箭頭指向Class2,表示Class1中含有Class2的引用。 而上圖進一步明確了具體的引用方式,就是:Class1中的私有變量m_Class2的類型是Class2。


你可能會問:某類保持另外一個類的引用,一般都會調用另外一個類的方法,那么它們的關系不應該是依賴關系嗎?引用關系與依賴關系有什么區別?

這個問題很好!某些情況下,某類保持另外一個類的引用,但該類不調用另外一個類的方法,而是將另外一個類的引用暴露出來,供外部調用。

例如Class1有某一屬性Class2,訪問該屬性可獲得Class2的實例:

class1 = new Class1( );

class2 = class1.Class2;

Class1雖然有Class2的引用,但它自身不調用Class2的方法,而是讓外部通過熟悉獲得Class2的實例。


不過很多資料及書籍對“依賴關系”及“引用關系”的解釋並不到位,不同資料之間的解釋甚至是互斥的。而我見到的大部分設計模式的類圖都不會區分“依賴關系”和“引用關系”,大部分設計模式的類圖都會畫成“引用關系”,本書后面的類圖也將會不區別這兩者,全部畫成“引用關系”。

 


“包含”關系


我將“包含”關系分為“弱包含”和“強包含”,下圖上面的是“弱包含”,下圖下面的是“強包含”,此圖說明了兩種包含的區別。
10.jpg

 

“弱包含”和“強包含”只是我的一種俗稱,學術的叫法是“聚合”和“組合”,一般資料可能會搞到你很暈,下圖希望可以進一步解釋清楚。
11.jpg

設計模式的類圖中不少地方會用到“包含”關系,一些資料畫成“強包含”,一些資料畫成“弱包含”。我個人將“強包含”看成是“弱包含”的一種特例,大部分情況下我先畫成“弱包含”,有需要才轉化為“強包含”。本書中的包含關系,全部都畫成“弱包含”。

 


對象圖


類實例化后就是對象(Object),表示這些對象及對象之間關系的圖就是對象圖。有時候需要用對象圖來表示設計模式。


對象圖的例子:
12.jpg

 

 

請看下一文……

 

 

作者:張傳波

創新工場創業課堂(敏捷課程)講師

軟件研發管理資深顧問

CMMI首席專家

《火球——UML大戰需求分析》作者

www.umlonline.org創辦人


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM