C++ UML 图

在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;
};

// tyre.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);
};



上图中人的快速移动需要有车的协助, 但是这种依靠是比较弱的, 就是人也可以不用车而用其他工具, 与关联不同的是人不必拥有这辆车只要使用就行.

 

 

这是我得出的耦合强度:(不一定正确)

依靠(dependency)  -- 关联(association) -- 聚合(aggregate) -- 组合(composition) -- 泛化(generalization)

 

 

//

    类之间的关系 种类: generalization( 泛化 ) dependency( 依靠关系 ) association( 关联关系 ) aggregation( 聚合关系 )、 composition( 合成关系 )
    其中 aggregation( 聚合关系 ) composition( 合成关系 ) 属于 association( 关联关系 ) ,是非凡的 association 关联关系。generalization( 泛化 ) 表现为继续或实现关系 (is a) 。具体形式为类与类之间的继续关 系,接口与接口之间的继续关系,类对接口的实现关系。

 
    association 关联系表现为变量 (has a ) 。类与类之间的联接,它使一个类知道另一个类的属性和方法。例如假如 a 依靠于 b ,则 b 体现为 a 的全局变量。关联关系有双向关联和单向关 联。双向关联:两个类都知道另一个类的公共属性和操作。单向关联:只有一个类知道另外一个类的公共属性和操作。大多数关联应该是单向的,单向关系更轻易建 立和维护,有助于寻找可服用的类。



    aggregat ion( 聚合关系 ) 是关联关系的一种,是强的关联关系。聚合 关系是整体和个体的关系。普通关联关系的两个类处于同一层次上,而聚合关系的两个类处于不同的层次,一个是整体,一个是部分。同时,是一种弱的“拥有”关 系。体现的是 a 对象可 以包含 b 对象, 但 b 对象不 是 a 对象的 组成部分。具体表现为,假如 a b 聚合成,表现为 a 包含有 b 的全局对象,但是 b 对象可以不在 a 创建的时刻创建。



    composition( 组合关系 ) 是关联关系的一种,是比聚合关系强的关系。 它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。 composition( 组合关系 ) 是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一致。假如 a b 组成,表现为 a 包含有 b 的全局对象,并且 b 对象在 a 创建的时刻创建。


dependency( 依靠关系 ) 表现为函数中的参数 (use a) 。是类与类之间的连接,表示一个类依靠于另一个类的定义,其中一个类的变化将影响另外一个类。例如 假如 a 依靠于 b ,则 b 体现为局部变量,方法的参数、或静态方法的 调用。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值