【转】UML类图关系全面剖析
2008-10-07 13:05
405 查看
UML类图关系全面剖析和C++代码表现(转载)
原文:http://blog.csdn.net/dylgsy/archive/2006/08/16/1076044.aspx2006年12月10日
本文随便转载,请保留出处:http://blog.csdn.net/dylgsy/
UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)。而其中关联又分为双向关联、单向关联、自身关联;下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里。
1、关联
class C1
class C2
class C3
class C4
class C14
class C9
class C10
class C7
class C8
// C5.h
#include "C6.h"
class C5
// C6.h
#include "C5.h"
class C6
虽然ROSE不生成属性,但在形式上一般是A中的某个方法把B的对象作为参数使用(假设A依赖于B)。如下:
#include "B.h"
class A
#include "C11.h"
class C12 : public C11
template<int>
class C13
这里再说一下重复度,其实看完了上面的描述之后,我们应该清楚了各个关系间的关系以及具体对应到代码是怎么样的,所谓的重复度,也只不过是上面的扩展,例如A和B有着“1对多”的重复度,那在A中就有一个列表,保存着B对象的N个引用,就是这样而已。
好了,到这里,已经把上面的类图关系说完了,希望你能有所收获了,我也费了不少工夫啊(画图、生成代码、截图、写到BLOG上,唉,一头大汗)。不过如果能让你彻底理解UML类图的这些关系,也值得了。:)
# index 发表于2006-08-17 11:42:00 IP: 218.81.82.*
对象(或类)间的关系就两种:引用和继承。 其他关系都是在这两种基础上演化而成。
# jackezou 发表于2006-08-17 22:04:00 IP: 221.216.173.*
聚合和组合那部分好象有些问题,两者生成的代码怎么会是一样的呢?
记得vckase.com有一篇文章《C++编程杂谈之四:漫谈UML
》,里面说聚合是一种相对松散的关系,因此C9应该含有C10的指针而不是C10的对象。
希望作者能继续就这问题解释一下,谢谢!!
# 一雨田 发表于2006-08-17 22:33:00 IP: 219.136.188.*
对,聚合是一种相对松散的关系,文章里也说了,在ROSE里面生成的代码确实和组合是一样的。他们的松散应该不在于是指针、值或者引用,你可以尝试用ROSE画两个图——聚合和组合,你可能发现ROSE不提供“组合关系”这种图形(实心菱形,我用的是ROSE2002),然后你打开关系(Aggregation)的Specification->Role B Detail,你会发现有三项选(By Value, By Reference, Unspecified),在你选上By Value的时候,菱形就变成实心的了,其他两个都是空心菱形,这三种我都试过了,生成的代码都是一样的,所以我想组合和聚合的区别应该是一种语义上的区别,语义上的松散。当然在我们的印象中可能指针是比对象要松散一点,因为如果是对象的话,就要管它的生命期了,所以实际应用时,我觉得可以象你说的那样,聚合用指针,组合用对象。:)
# jackezou 发表于2006-08-19 09:17:00 IP: 61.149.248.*
OK, 谢谢!
# sheismylife 发表于2006-08-31 14:09:00 IP: 218.1.97.*
字太小了
# 一雨田 发表于2006-09-07 22:36:00 IP: 222.129.97.*
这个字是按照IE 设置的,如果想快捷设置字的大小就按住CTRL然后用鼠标滚轮上下滚就会看到效果了。