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

zz/2024/7/13 10:23:35
要看懂 设计模式,你需要懂 类图(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创办人


http://www.ngui.cc/zz/2748869.html

相关文章

3.8 《硬啃设计模式》 第17章 结构型设计模式小结

序号模式一句话说明1桥(Bridge)将“抽象”和“实现”自由搭配。2轻量(Flyweight)轻松地处理“大量”对象。3外观(Faade)同时提供简单接口和复杂接口。4装饰者(Decorator)不改变接口但…

5.3 CMMI5级——原因分析及解决方案(Causal Analysis and Resolution)

聪明的人在出现问题的时候,除了解决问题外,都会想到如何避免问题以后再次发生,避免的办法可能是从过程或者技术两个方面入手,从根本杜绝问题的发生。 问题分析是很常见的,为什么在5级的时候才有这样的要求呢&#xff1…

敏捷需求分析及深度提升(广州 2014.1.11)- 活动报道

这次活动已经顺利开办啦,谢谢大家的支持! 以下是图片花絮: 此活动的原始报道链接: http://www.umlonline.org/school/viewthread.php?tid2700

全能项目经理训练营-张传波-专题视频课程

立即学习:https://edu.csdn.net/course/play/24657/276936?utm_sourceblogtoedu

为什么企业宁愿开高工资给新员工,都不愿意给老员工加工资?

有朋友问到: 为什么企业宁愿开高工资给新员工,都不愿意给老员工加工资? 俺的建议: 先从这位被低薪压制的老员工角度说说: 决定你的薪资水平的根本原因是你的实力,而影响因素是你的性格。为什么说是你的性…

2016峰会:项目管理与高级项目管理 - 图片花絮

现场相片大汇杂: 签到、学员入座、暖场: 老师激情分享中: 给力的参会朋友: 精彩瞬间: 大会现场视频已经发布啦: 猛点图片进入课程学习啦! 高级信息项目经理实战班 (广州站&#xff…

部门赶工,团队成员都积累了上百个小时以上的调休时间,如何调休?

有朋友问: 部门赶工,团队成员都积累了上百个小时以上的调休时间然后闲下来了,调休潮来了批准太多,怕影响不好不批准嘛,这些时间难消采用每月每人只准调一次,每次同时调休人员不得超过20%的人数这样处理&am…

scala (9)-----Scala 函数

函数是一组一起执行一个任务的语句。您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。 Scala 有函数和方法,二者在语义上的区别很小。Scala 方法…

Neo4j CQL - (12)-SET子句

有时,根据我们的客户端要求,我们需要向现有节点或关系添加新属性。 要做到这一点,Neo4j CQL提供了一个SET子句。 Neo4j CQL已提供SET子句来执行以下操作。 向现有节点或关系添加新属性添加或更新属性值 SET子句语法: SET &l…

第4章 基于概率论的分类方法:朴素贝叶斯

朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。本章首先介绍贝叶斯分类算法的基础——贝叶斯定理。最后,我们通过实例来讨论贝叶斯分类的中最简单的一种: 朴素贝叶斯分类。 贝叶斯理论…