1 標題:
Extending UML To Visualize Design Patterns In Class Diagrams
原文鏈接如下:
http://www.utdallas.edu/~jdong/papers/seke03.pdf
2 時間:
2003以后
3 閱讀時間:
2005.8.29
4 摘要:
一個設計模式描述了對于某個設計問題的一種通用解決方案,并可以在多個項目中重復使用。軟件設計師會在具體的項目中采用這些設計模式。設計模式通常使用UML建模。但是,當某個設計模式被應用于或者結合了其他模式時,UML不能保存與設計模式相關的信息。因此,設計者很難從軟件系統的設計圖中識別出設計模式。設計模式的好處被削弱了,因為設計者不能以他們自己使用的設計模式、設計決斷和設計折衷的方式來進行交流。本文中,我們提出了UML語言家族的一個新成員的一組本質特征,它支持在面向對象的設計模式上工作。這個UML擴展允許在軟件設計中進行設計模式的直接表達。我們也討論了基于標準UML擴展機制的UML Profile的一些相關的方面。文中的一個示例展示了它如何被用于輔助基于模式的軟件開發。
5 大意:
除了摘要外,文章分為六個部分,分別是介紹(Introduce)、UML擴展機制(UML Extension Mechanisms)、被提出的擴展(The Proposed Extension)、示例學習(Case Study)、相關工作(Related Work)和結論(Conclusion)。
5.1 Introduction
Introduction部分介紹了為什么要對UML做基于設計模式的擴展。首先當然是論述了設計模式的重要性,然后指出了UML對于表達設計模式的不足之處,其中最重要的不足之處就是當有幾種設計模式混雜在一起時會導致設計模式相關信息的丟失。這點很容易理解,當某一個類扮演了不同設計模式中的不同角色時,確實不能夠只從類的名稱上看出設計模式的相關信息。
5.2 UML擴展機制
UML擴展機制這一部分簡要的介紹了UML的標準設計模式(UML2.0),包括Stereotype(構造型),Tagged Value(標簽值)和Constraint(約束)。
5.3 The Proposed Extension
The Proposed Extension這一部分是本文的重點所在,提出了UML Profile for Design Pattern。這個Profile包括三個Stereotype和三個Tagged Value,以及一些約束,具體內容如下:
Stereotype表
Stereotype |
Applies To |
Definition |
<<PatternClass>> |
Class |
Indicate that this class is a part of a design pattern |
<<PatternAttribute>> |
Attribute |
Indicate that this attribute is a part of a design pattern |
<<PatternOperation>> |
Operation |
Operation Indicate that this operation is a part of a design pattern |
Tagged Values表
Tagged Value |
Applies to |
| |
Name |
Value | ||
pattern |
<name[instance],role> |
<<PatternClass>> |
Indicate that the attached class plays the role of role in the instance of a design pattern named name |
pattern |
<name[instance],role> |
<<PatternAttribute>> |
Indicate that the attached attribute plays the role of role in the instance of a design pattern named name |
pattern |
<name[instance],role> |
<<PatternOperation>> |
Indicate that the attached operation plays the role of role in the instance of a design pattern named name |
簡單的說,這個Profile里面增加了三個Stereotype,分別是PatternClass、PatternAttribute和PatternOperation,它們分別擴展了UML中的元模型元素Class、Attribute和Operation,其含義分別代表了設計模式中的類、屬性和操作等角色。另外對于每個Stereotype,還附加了一個標簽值,標簽值的形式是<name[instance],role>,其中name代表設計模式的名稱、instance代表設計模式的實例標號(例如有兩個Abstract Factory模式,則編號分別為1,2)、role代表設計模式中的角色名稱。最后還有兩個用OCL寫成的約束。
對于某一個模型元素(例如類、屬性和操作)扮演了多個設計模式中的不同角色的問題,可以將多個標簽值按次序寫在Stereotype的后面,來顯示這個元素的多重身份。例如<<PatternClass{<DAO,DataAccessObject><Abstract Factory[1],AbstractFactory>}>>這是DAO這個類的構造型,它顯示了DAO這個類屬于兩個設計模式,第一個是DAO這個設計模式,其中的角色是DataAccessObject(數據訪問對象);第二個是抽象工廠設計模式,其角色是AbstractFactory。
5.4 示例學習
這一部分展示了一個使用了UML Profile for Design Pattern的小例子,這個例子是一個“學生信息管理系統”,其中使用了兩個抽象工廠模式,兩個單件(Singleton)模式,一個DAO(數據訪問對象)模式。其設計圖如下:
(算了,設計圖太大,還是到原文中去看吧。原文是pdf,看得比較清楚!)
5.5 相關工作和結論
這兩個部分當然是說本文的工作好,比起其他相關工作來有優點。
6 筆記:
感受最深的是,這篇文章提出了一個很正式的UML Profile for Design Pattern,而且這個Profile簡單實用,比起其他連篇累牘的Profile來,本文提出的解決方案確實有可行之處。
第二點是這篇文章的作者考慮到了多個Pattern在一起容易混淆角色的問題,并做出了完整的解決方案,使用了多個標簽值來避免了信息的混亂和遺漏,這一點也加深了我對于標簽值功能的印象。
第三點是這篇文章中的示例非常優秀,是一個很常見的例子,其主要思想是在數據庫變更的情況下,如何保持原有代碼不變動。其中用到了抽象工廠和DAO這兩個非常成熟而優秀的設計模式,加深了讀者對文章的理解和印象。
總而言之,這是一篇非常值得借鑒的文章,它對于有以下讀者都很有幫助:
1. 正在學習UML擴展機制的人;
2. 正在學習設計模式使用的人;
3. 正在研究MDA的人;
4. 正在研究模型轉換、模型重構、模型進化這一類問題的人;
這篇文章我覺得非常優秀,并不是它的理論多么高深(事實上幾乎沒有什么理論),也并不是它的工作量多么大(可以看出工作量很少),也并不是它的作者多么有名(反正我第一次看見這兩個作者),而是它確實對某個有意義的問題做出了接近與正確的解答。正是因為看到了這篇文章,讓我對自己剛剛寫好的一篇文章進行大刀闊斧的修改,在文中完全使用這篇文章所提出的UML Profile,如果有人看到了更好的UML Profile for Design Pattern,請通知我一聲,謝謝!
7 后記
我的博客又好久沒有更新了,這與我剛剛過去的暑假有直接的聯系,不是我懶惰,而是暑假太誘人,如果我還有暑假的話,我保證在下一個暑假一定會更新我的博客。