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

1. 泛化(Generalization)

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

用代码表示如下:

  1. // Animal.h
  2. class CAnimal
  3. {
  4. public:
  5. // implement
  6. virtual HRESULT EatSomething()
  7. {
  8. // Do something
  9. }
  10. };
  11.  
  12. // Tiger.h
  13. #include "Animal.h"
  14. class CTiger : public CAnimal
  15. {
  16. // Do something
  17. };

2. 实现(Realization)

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

用代码表示如下:

  1. // Animal.h
  2. class CAnimal
  3. {
  4. public:
  5. // interface
  6. virtual HRESULT EatSomething() = 0;
  7. };
  8.  
  9. // Tiger.h
  10. #include "Animal.h"
  11. class CTiger : public CAnimal
  12. {
  13. // Do something
  14. };

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

3. 关联(Association)

关联关系: 是一种拥有的关系, 可以分为双向关联, 单向关联和自身关联.
双向关联是指双方都拥有对方的引用, 都可以调用对方的公共属性和方法. 见下图:

  1. 用代码表示如下:
  2. // Husband.h
  3. #include "wife.h"
  4. class CHusband
  5. {
  6. public:
  7. CWife* pWife;
  8. };
  9.  
  10. // Wife.h
  11. #include "Husband.h"
  12. class CWife
  13. {
  14. public:
  15. CHusband* pHuband;
  16. };

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

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

  用代码表示如下:

  1. // Husband.h
  2. class CHusband
  3. {
  4. public:
  5. int nMoney;
  6. void GoShopping();
  7. };
  8.  
  9. // Wife.h
  10. #include "Husband.h"
  11. class CWife
  12. {
  13. public:
  14. CHusband* pHuband;
  15. };

  上图中妻子拥有丈夫, 可以使用对方的属性, 比如钱, 可以让对方做能做的事, 比如去买东西.
  自身关联是指拥有一个自身的引用. 如下图

  用代码表示如下:

  1. // SingleMan.h
  2. class CSingleMan
  3. {
  4. public:
  5. CSingleMan *pSingleMan;
  6. };

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

聚合关系: 是整体与部分的关系, 且部分可以离开整体而单独存在. 如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.
组合关系: 是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门.

用代码表示如下:

  1. // Car.h
  2. #include "Tyre.h"
  3. class CCar
  4. {
  5. public:
  6. CTyre cTyre;
  7. };
  8.  
  9. // Tyre.h
  10. #include "Car.h"
  11. class CTyre
  12. {
  13. // Do something
  14. };
  15.  
  16. // Company.h
  17. #include "Department.h"
  18. class CCompany
  19. {
  20. public:
  21. CDepartment cDepartment;
  22. };
  23.  
  24. // Department.h
  25. #include "Company.h"
  26. class CDepartment
  27. {
  28. // Do something
  29. };

5. 依赖(Dependency)

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

 用代码表示如下:

  1. // Car.h
  2. class CCar
  3. {
  4. // Do something
  5. };
  6.  
  7. // Person.h
  8. #include "Car.h"
  9. class CPerson
  10. {
  11. void MoveFast(CCar &pCar);
  12. };

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

UML类图关系模式(C++代码说明)的更多相关文章

  1. UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

    UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父 ...

  2. UML[1] UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)(转)

    转自:http://blog.csdn.net/zhaoxu0312/article/details/7212152 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是 ...

  3. UML类图关系(转,添加了实例)

    UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Associati ...

  4. 【UML】UML类图关系(泛化 、继承、实现、依赖、关联、聚合、组合)

    http://www.cnblogs.com/olvo/archive/2012/05/03/2481014.html 继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的 ...

  5. UML类图关系(继承、泛化、实现、依赖、关联、聚合、组合)

    继承.实现.依赖.关联.聚合.组合的联系与区别 分别介绍这几种关系: 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者 ...

  6. 图解六大UML类图关系

    在学习UML类图的过程中,UML类图关系是必须要掌握的问题,UML定义的关系主要有六种:依赖.类属.关联.实现.聚合和组合.下面对其定义和表示方法逐一说明. UML类图关系简介 依赖(Dependen ...

  7. UML类图关系大全

    UML类图关系大全 1.关联 双向关联: C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法.在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设 ...

  8. UML类图关系大全【转】

    UML类图关系大全 1.关联 双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法. 在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设 ...

  9. UML类图关系表示方法

    本文转载: http://blog.csdn.net/fengsh998/article/details/8105631 分类: UML2012-10-24 10:18 1175人阅读 评论(0) 收 ...

随机推荐

  1. android 开发-(Contextual Menu)上下文菜单的实现

    在android3.0以后,安卓设备不在提供物理的菜单按键,同时,android应用提供了另外的菜单实现机制,来替代之前的菜单创建方式.安卓设备中,平常可以使用长按住某个内容弹出菜单选项.这就是我们需 ...

  2. Docker | 第七章:Docker Compose服务编排介绍及使用

    前言 前面章节,我们学习了如何构建自己的镜像文件,如何保存自己的镜像文件.大多都是一个镜像启动.当一个系统需要多个子系统进行配合时,若每个子系统也就是镜像需要一个个手动启动和停止的话,那估计实施人员也 ...

  3. 创建有输出参数的存储过程并在c#中实现DataGridView分页功能

    不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure ...

  4. UICollectionView基础API笔记

    UICollectionView系列API,属性含义笔记.在UICollectionView笔记1中我们了解了UICollectionView是什么,以及可以做什么:在UICollectionView ...

  5. 动态页面技术----EL技术、JSTL技术,javaEE的开发模式

    1 EL技术 1.1 EL 表达式 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写, EL出现的目的是要替代jsp页面中脚本的编写,就是简化java代码. ...

  6. strlen()与mb_strlen()的作用分别是什么

    strlen和mb_strlen都是用于截取字符串的,其中strlen只针对单字节编码字符 如果是多字节编码字符 如gbk和utf8 使用strlen会出现乱码 此时可以使用mb_strlen(),专 ...

  7. SVG矢量图【转】

    var iconArray=[ //'circle', //实心圆 //'rect', //矩形 //'roundRect', //圆角矩形 //'triangle', //三角形 //'diamon ...

  8. 【Android开发笔记】Android Splash Screen 启动界面

    public class SplashActivity extends Activity { @Override protected void onCreate(Bundle savedInstanc ...

  9. LeetCode Single Number III (xor)

    题意: 给一个数组,其中仅有两个元素是出现1次的,且其他元素均出现2次.求这两个特殊的元素? 思路: 跟查找单个特殊的那道题是差不多的,只是这次出现了两个特殊的.将数组扫一遍求全部元素的异或和 x,结 ...

  10. pat乙级1060

    将数组排序后从大到小遍历,设置一个递增的变量t,当v[i] > t的时候,说明有t个数大于t,最后一个满足v[i] > t的t即为所求结果. #include <iostream&g ...