您的位置:首页 > 其它

【转】UML类图关系全面剖析

2008-10-07 13:05 405 查看

UML类图关系全面剖析和C++代码表现(转载)

原文:http://blog.csdn.net/dylgsy/archive/2006/08/16/1076044.aspx

2006年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然后用鼠标滚轮上下滚就会看到效果了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: