c++ uml mysql_C++ UML小结

在UML类图中,类与类之间有几种常见关系:依赖、关联、聚合、组合、泛化。

1、依赖(Dependency)

依赖是一种很有用的关系,它用来表述一个类A“use”了另一个类B。A可以是通过任何方式“use”类B,如: 1)A的成员函数的返回值为B; 2)A的成员函数使用B作为函数参数; 3)A的成员函数的内部实现使用了B; 依赖关系通常使用虚线箭头“---->”表示,箭头指向被“use”的类。

6378ac86e6067c58393acde5a359bd42.png 在C++代码中,依赖关系是这样对应的:class A

{ public: B returns_a_B();

void has_a_B_argument(B);

void has_a_B_in_its_implementation();

};

A::void has_a_B_in_its_implementation(){ B b; }

2、关联(Association)关联可以表述成一个类“知道”另一个类。如何“知道”呢?在C++中,类A“知道”类B一般是通过指针实现的(也可以使用引用或者值),即类A有一个成员变量是指向B的指针(或者引用、值)。

关联可以分为双向关联、单向关联、自身关联。

1)双向关联双向关联A-B:双方都“知道”对方,都可以调用对方的公共属性和方法。

f56adbfeebc863859ac14c44298db080.png

对应的C++代码为:class A {

public:

B* pB;

};

class B {

public:

A* pA;

};

2)单向关联单向关联A->B:表示A“知道”B,A可以调用B的公共属性和方法。没有生命周期的依赖。

854893f33023eaf45ffcf79321292d3c.png

对应的C++代码为:class A {

public:

B* pB;

};

class B {

};

3)自身关联自身关联:自己引用自己,这个在链表中非常常见。

可以看到,上面的Object类,就是一个自身关联的应用,它有一个自己指向自己的指针,用来实现链表。

52807e64e9d408447b3326dc9075599f.png

对应的C++代码为:class Object {

public:

int data;

Object* next;

};

class ObjectList {

public:

Object* first;

ObjectList();

void insert(Object* obj);

void print() const;

};

3、聚合(Aggregation)和组合(Composition)聚合和组合都是用在表述整体-部分关系的时候,二者只是在生命周期问题上有差异。

1)聚合通常可以理解成“has a”关系。如果类A聚合类B,那么类A“has a”类B,同时,在A的生命周期结束后类B必须依然存在或者有意义。比如房间有一张桌子,那么房间和桌子的关系就是聚合:即使房间没有了,那张桌子还是存在的,桌子是可以脱离房间而存在的。

0508a6f23030725bada903c145ee759c.png

对应的C++代码:class Table {

};

class Room {

public:

Table aTable;

};

2)组合通常可以理解为“is a part of”。和聚合不同的是,如果类A组合类B,那么当A生命周期结束后,类B也随之结束,也就是说B不能脱离类A而存在。就如同鸟都有两只翅膀一样,当鸟消失了,翅膀也随之不存在了。

9dcee16b241798fcb1d4a13376cff45c.png

对应的C++代码:class Wing {

};

class Bird{

public:

Wing leftWing;

Wing rightWing;

};

可以发现,如果单纯从C++代码来看,聚合关系和组合关系没有什么不同,要区分聚合和组合,只能从语义分析。

补充:组合关系还有另一层含义:“is a”。不过这种含义,仅仅用来角色方面,即“is a”角色。比如一个人,是丈夫角色。那也可以看做组合;手机可以看做“Camera”、“Music Player”等。

8eef0256ff277e687ee5dbbaf6e9061f.png

从上图我们可以看出,Battery和Smart Phone是聚合关系,因为电池是手机的一部分,但是电池可以脱离手机而存在。而IMEI Number和Smart Phone是组合关系,一般情况下一个Smart Phone只有一个IMEI Number,手机消失后,IMEI跟着消失。而我们知道现在的手机可以拍照、上网、播放音乐,因此手机可以扮演相机、web冲浪、音乐播放器的角色,所以Smart phone和Camera、Web Browser、Music Player是组合的关系。

4、泛化(Realization)泛化关系也被常用作继承(inherit)关系,是用来表述“Is-a”这种关系的,比如Car和Police-Car的关系,Police-Car “is a” Car。

fab03d6cb030b5ccc28536db491926aa.png

对应的C++代码为:class Car {

};

class Police_Car{

};

posted on 2012-12-21 22:09 董三 阅读(510) 评论(0)  编辑 收藏 引用 所属分类: C++

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值