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

这篇文章我认为总结的非常好,所以转载。原文地址

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

1. 泛化(Generalization)
      泛化关系: 是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为. 老虎是动物的一种, 即有老虎的特性也有动物的共性.  见下图:
UML类图关系模式及C++代码说明 - lei - lei
用代码表示如下:
// Animal.h  
class CAnimal  
{  
public:  
    // implement  
    virtual HRESULT EatSomething()  
    {  
        // Do something  
    }  
};  
  
// Tiger.h  
#include "Animal.h"  
class CTiger : public CAnimal  
{  
    // Do something  
}; 

2. 实现(Realization)
实现关系: 是一种类与接口的关系, 表示类是接口所有特征和行为的实现. 见下图:
UML类图关系模式及C++代码说明 - lei - lei
用代码表示如下:
// Animal.h  
class CAnimal  
{  
public:  
    // interface  
    virtual HRESULT EatSomething() = 0;  
};  
  
// Tiger.h  
#include "Animal.h"  
class CTiger : public CAnimal  
{  
    // Do something  
}; 
注: 泛化和实现的区别就在于子类是否继承了父类的实现, 如有继承则关系为泛化, 反之为实现.

3. 关联(Association)
关联关系: 是一种拥有的关系, 可以分为双向关联, 单向关联和自身关联.
双向关联是指双方都拥有对方的引用, 都可以调用对方的公共属性和方法. 见下图:
UML类图关系模式及C++代码说明 - lei - lei
用代码表示如下:
// Husband.h  
#include "wife.h"  
class CHusband  
{  
public:  
    CWife* pWife;  
};  
  
// Wife.h  
#include "Husband.h"  
class CWife  
{  
public:  
    CHusband* pHuband;  
}; 
上图中丈夫和妻子是比较公平的关系, 都可以使用对方公共的属性.

单向关联是指只有某一方拥有另一方的引用, 这样只有拥有对方者可以调用对方的公共属性和方法. 如下图:
UML类图关系模式及C++代码说明 - lei - lei
用代码表示如下:
// Husband.h  
class CHusband  
{  
public:  
    int nMoney;  
    void GoShopping();   
};  
  
// Wife.h  
#include "Husband.h"  
class CWife  
{  
public:  
    CHusband* pHuband;  
}; 
上图中妻子拥有丈夫, 可以使用对方的属性, 比如钱, 可以让对方做能做的事, 比如去买东西.
自身关联是指拥有一个自身的引用. 如下图
UML类图关系模式及C++代码说明 - lei - lei
用代码表示如下:
// SingleMan.h  
class CSingleMan  
{  
public:  
    CSingleMan *pSingleMan;  
}; 

4. 聚合(Aggregation)和组合(Composition)
聚合关系: 是整体与部分的关系, 且部分可以离开整体而单独存在. 如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.
组合关系: 是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门.
UML类图关系模式及C++代码说明 - lei - lei
用代码表示如下:
// 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)
依赖关系: 是一种使用的关系,  即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖. 如下图:
UML类图关系模式及C++代码说明 - lei - lei
 用代码表示如下:
// Car.h  
class CCar  
{  
    // Do something  
};  
  
// Person.h  
#include "Car.h"  
class CPerson  
{  
    void MoveFast(CCar &pCar);  
}; 
上图中人的快速移动需要有车的协助, 但是这种依赖是比较弱的, 就是人也可以不用车而用其他工具, 与关联不同的是人不必拥有这辆车只要使用就行.
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值