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 后记
我的博客又好久没有更新了,这与我刚刚过去的暑假有直接的联系,不是我懒惰,而是暑假太诱人,如果我还有暑假的话,我保证在下一个暑假一定会更新我的博客。