首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

《火球——UML大战需求分析》(第3章 分析业务模型-类图)——3.5 种的“递归”关系与“三角”关系

2013-09-15 
《火球——UML大战需求分析》(第3章 分析业务模型-类图)——3.5 类的“递归”关系与“三角”关系摘要:类图的进阶知识

《火球——UML大战需求分析》(第3章 分析业务模型-类图)——3.5 类的“递归”关系与“三角”关系

摘要:类图的进阶知识,有一点难度,但这些知识在需求分析工作中非常实用。


“递归”关系

我在以前公司 
图 1.30 文件夹与文件关系1

我会接着问这些问题:
1)文件夹里面也可以有文件夹啊,这个怎样表示出来?
2)里面的文件夹里面也可能有文件夹,咋办?
很多面试者傻眼了,只有很少数人可以画出来。
其实画不出来也不用灰心,我刚学习类图时,也被这个题目一下子难倒了,后来看到参考答案后恍然大悟,同时对类图产生一种莫名的敬仰!

《火球——UML大战需求分析》(第3章 分析业务模型-类图)——3.5 种的“递归”关系与“三角”关系 
图 1.31 文件夹与文件关系2

文件夹里面有文件夹,里面的文件夹里面有可能有文件夹,这可能是无穷无尽的“递归”啊!而这个包含关系可以自己指向自己,可以“自包含”,这个无穷“递归”的问题就解决了,实在太完美了!
无论是弱包含还是强包含,都可以“自包含”。除了“自包含”可以形成“递归”,其实直线关系同样是可以指向自己的,这个叫“自关联”,这样也形成了“递归”关系。请看下图:

《火球——UML大战需求分析》(第3章 分析业务模型-类图)——3.5 种的“递归”关系与“三角”关系 
图 1.32 自关联

这种“递归”结构,一旦展开就会形成一棵树型的结构。 
图 1.33 公司、雇员、劳动合同的关系1

在表示公司与雇员的关系的直线上,拉出一条虚线,虚线另外一端连接劳动合同类,这样的类叫做关联类(Association Class),关联类是对两个类的关系的进一步约束。
最开始你可能会认为薪金、职位、合同期这些似乎应该是雇员的属性,但现在你应该认识到,这些三个关键内容应该体现在公司与雇员的关系上,这些内容应该体现在劳动合同上。再进一步思考,雇员的薪金、职位、合同期是会变化的,你可能会跟同一个公司签署多份劳动合同,也可能签署一份劳动合同后又有多次合同变更。

要识别出能表征两个类关系的关联类,难度是有点高的,有这样的一些实践建议供你参考:
1)如果觉得两个类有关系,则先拉上一条直线再说。
2)如果觉得两个类有关系,但怎样画都觉得这个关系不太合适,那么可以思考是不是漏了一个关联类了。
3)分别列出这两个类的关键属性,思考这些属性的属性值是不是由该类本身就可以确定了。例如:如果我们最开始将薪金作为员工的属性,那么你可以思考薪金的具体数字,是不是员工自己本身可以确定的?你会发现薪金其实是由公司和员工商定后确定的,并不是员工自己本身可以决定。
4)通过对属性的思考,可能会发现这个属性应该是属于另外一个类的,思考这个类是不是能表征原来两个类关系的关联类。

关联类这样复杂的东西,客户是不太可能直接告诉你的,你需要在需求分析中发现和提炼出关联类,这对需求的理解以及 
图 1.34 公司、雇员、劳动合同的关系2

这个图可能最体现它们的“三角”关系了,关联类也可以表达成这样的方式。但我在实际工作还是以关联类的方式来表达,我觉得关联类的表达方式更加贴切和专业一点。
在具体的需求分析工作时,如果你发现三个类形成了类似该图的“三角”关系,你可以思考其中一个类是不是可能是关联类,但要注意并不是凡是出现了“三角”关系就一定会有关联类。

怎么样?本节的难度已经更上一城楼了!
类图的最大魅力在于帮助你发掘和提炼业务模型,其他的非UML图可能是做不到的。当然真正要做好发掘和提炼,还是需要你的深厚功力了!

下小节,你将要完成一个综合练习,应用你所学习到的全部类图知识。



请看下一节……




作者:张传波

创新工场创业课堂讲师

软件研发管理资深顾问

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

www.umlonline.org 创办人


热点排行