欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识

程序员文章站 2022-05-23 23:54:24
...

要看懂 设计模式 ,你需要懂 类图 (Class Diagram ),也需要懂一点对象图(Object Diagram),下面介绍一些 UML 的必要知识,以便你学习设计模式。 属性、操作 下图简单介绍类的属性和操作。 类有属性(attributes)、操作(operations),属性和操作统称特

要看懂设计模式,你需要懂类图(Class Diagram),也需要懂一点对象图(Object Diagram),下面介绍一些UML的必要知识,以便你学习设计模式。


属性、操作

下图简单介绍类的属性和操作。
类有属性(attributes)、操作(operations),属性和操作统称特性(features)。

1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识



下图进一步详细介绍类图细节,包括:属性和操作的作用域、属性类型、参数类型、方法返回值类型等。

1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识


接口、枚举

1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识




抽象类

1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识


继承关系

类B继承类A,如下图:

1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识



抽象类被继承,如下图:

1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识




实现关系

实现是指某接口被实现,而不是某类被实例化。
实现如下图:

1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识




依赖关系



先看图:

1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识

B依赖A,表示如果A的接口发生变化,B也需要相应地改变。
依赖的常见情况有:
1. B调用了A的方法。
2. B的方法中,使用了A为参数。
3. B的方法返回值类型为A。



引用关系



先看图:

1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识


Class1有箭头指向Class2,表示Class1中含有Class2的引用。
而上图进一步明确了具体的引用方式,就是:Class1中的私有变量m_Class2的类型是Class2。

你可能会问:某类保持另外一个类的引用,一般都会调用另外一个类的方法,那么它们的关系不应该是依赖关系吗?引用关系与依赖关系有什么区别?
这个问题很好!某些情况下,某类保持另外一个类的引用,但该类不调用另外一个类的方法,而是将另外一个类的引用暴露出来,供外部调用。
例如Class1有某一属性Class2,访问该属性可获得Class2的实例:
class1 = new Class1( );
class2 = class1.Class2;
Class1虽然有Class2的引用,但它自身不调用Class2的方法,而是让外部通过熟悉获得Class2的实例。

不过很多资料及书籍对“依赖关系”及“引用关系”的解释并不到位,不同资料之间的解释甚至是互斥的。而我见到的大部分设计模式的类图都不会区分“依赖关系”和“引用关系”,大部分设计模式的类图都会画成“引用关系”,本书后面的类图也将会不区别这两者,全部画成“引用关系”。



“包含”关系

我将“包含”关系分为“弱包含”和“强包含”,下图上面的是“弱包含”,下图下面的是“强包含”,此图说明了两种包含的区别。

1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识



“弱包含”和“强包含”只是我的一种俗称,学术的叫法是“聚合”和“组合”,一般资料可能会搞到你很晕,下图希望可以进一步解释清楚。

1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识


设计模式的类图中不少地方会用到“包含”关系,一些资料画成“强包含”,一些资料画成“弱包含”。我个人将“强包含”看成是“弱包含”的一种特例,大部分情况下我先画成“弱包含”,有需要才转化为“强包含”。本书中的包含关系,全部都画成“弱包含”。



对象图

类实例化后就是对象(Object),表示这些对象及对象之间关系的图就是对象图。有时候需要用对象图来表示设计模式。

对象图的例子:

1.2 《硬啃设计模式》 第2章 学习设计模式需掌握的UML知识

请看下一文……

作者:张传波

创新工场创业课堂(敏捷课程)讲师

软件研发管理资深顾问

CMMI首席专家

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

《硬啃设计模式》作者

www.umlonline.org创办人