您的位置:首页 > 编程语言 > C语言/C++

UML类图关系模式及C++代码说明

2014-05-08 10:53 309 查看
这篇文章我认为总结的非常好,所以转载。原文地址

在UML类图中的关系模式主要有以下几种: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 依赖(Dependency) 等。

1. 泛化(Generalization)

泛化关系: 是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为. 老虎是动物的一种, 即有老虎的特性也有动物的共性. 见下图:



用代码表示如下:

// Animal.h

class CAnimal

{

public:

// implement

virtual HRESULT EatSomething()

{

// Do something

}

};

// Tiger.h

#include "Animal.h"

class CTiger : public CAnimal

{

// Do something

};

2. 实现(Realization)

实现关系: 是一种类与接口的关系, 表示类是接口所有特征和行为的实现. 见下图:



用代码表示如下:

// Animal.h

class CAnimal

{

public:

// interface

virtual HRESULT EatSomething() = 0;

};

// Tiger.h

#include "Animal.h"

class CTiger : public CAnimal

{

// Do something

};

注: 泛化和实现的区别就在于子类是否继承了父类的实现, 如有继承则关系为泛化, 反之为实现.

3. 关联(Association)

关联关系: 是一种拥有的关系, 可以分为双向关联, 单向关联和自身关联.

双向关联是指双方都拥有对方的引用, 都可以调用对方的公共属性和方法. 见下图:



用代码表示如下:

// Husband.h

#include "wife.h"

class CHusband

{

public:

CWife* pWife;

};

// Wife.h

#include "Husband.h"

class CWife

{

public:

CHusband* pHuband;

};

上图中丈夫和妻子是比较公平的关系, 都可以使用对方公共的属性.

单向关联是指只有某一方拥有另一方的引用, 这样只有拥有对方者可以调用对方的公共属性和方法. 如下图:



用代码表示如下:

// Husband.h

class CHusband

{

public:

int nMoney;

void GoShopping();

};

// Wife.h

#include "Husband.h"

class CWife

{

public:

CHusband* pHuband;

};

上图中妻子拥有丈夫, 可以使用对方的属性, 比如钱, 可以让对方做能做的事, 比如去买东西.

自身关联是指拥有一个自身的引用. 如下图



用代码表示如下:

// SingleMan.h

class CSingleMan

{

public:

CSingleMan *pSingleMan;

};

4. 聚合(Aggregation)和组合(Composition)

聚合关系: 是整体与部分的关系, 且部分可以离开整体而单独存在. 如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.

组合关系: 是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门.



用代码表示如下:

// Car.h

#include "Tyre.h"

class CCar

{

public:

CTyre cTyre;

};

// Tyre.h

#include "Car.h"

class CTyre

{

// Do something

};

// Company.h

#include "Department.h"

class CCompany

{

public:

CDepartment cDepartment;

};

// Department.h

#include "Company.h"

class CDepartment

{

// Do something

};

5. 依赖(Dependency)

依赖关系: 是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖. 如下图:



用代码表示如下:

// Car.h

class CCar

{

// Do something

};

// Person.h

#include "Car.h"

class CPerson

{

void MoveFast(CCar &pCar);

};

上图中人的快速移动需要有车的协助, 但是这种依赖是比较弱的, 就是人也可以不用车而用其他工具, 与关联不同的是人不必拥有这辆车只要使用就行.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: