• 类展示
  • 基本概念及术语
    • 可见性visibility
    • 参数的方向parameter direction
    • 类成员变量或者函数的类型
    • 类关系
    • 关系的多重性multiplicity
  • 类关系
    • assocationkonws a
    • dependency
    • Aggregation
    • Composition
    • 继承泛化
    • 类模板
  • References

本文包括以下内容:

  • 类间存在哪几种常见关系?
  • 它们之间的区别和联系是什么?
  • 如何在代码中反映类间的关系?
  • 如何理解 IN/OUT mode型的参数?

类展示

class Circle
{
private:double radius_;Point center_;
public:void setRadius(double _radius);void setCenter(Point _center);double getArea() const;double getCircumfrence() const;
}

基本概念及术语

可见性(visibility)

  • ‘+’ public
  • ‘-’ private
  • ‘#’ protected

参数的方向(parameter direction)

  • ‘in’:用于输入的参数,get the value

  • ‘out’:用于输出的参数, set the value

  • ‘inout’:既可作为输入又可作为输出, get the value and set the value

这种参数形式常见于,这样一种情况,传递的是一个指针变量(如果传递的是一个既非指针,也非引用的变量,就纯做输入(in)了),既然是指针变量,便可提领指针,修改其指向的内容,既具备提供输入,又具有修改原值 的双重属性。

举例如下:
对一个接口作如下documentation:

Prototype: ULONG GetActivationState( ULONG * pActivationState );

Parameters

Type: ULONG*
Variable: pActivationState
Mode: IN/OUT

客户端代码

ULONG activationState = 1;
ULONG result = GetActivationState(&activationState);

既然提供的是变量的地址,便可轻易地get the value 和 set the value。 所以根据GetActivationState(ULONG*) 参数的IN/OUT状态,推测其中的代码如下:

ULONG GetActivationState()
{if (*activationState == 1)      // 可读属性,in{// TODO// 对变量值进行修改,例如,改为0*activationState = 0;       // 可写属性,out}return *activationState;
}

类成员(变量或者函数)的类型

  • 静态成员,下划线表示
  • 纯虚函数,斜体

类关系

  • Assocation (knows a)
  • Dependency (uses a)
  • Composition (has a)
  • Aggregation (has a)
  • Inheritance (is a)
  • Class template

关系的多重性(multiplicity)

  • ‘0..1’, 无实例,或者1个实例
  • ‘1’,只有一个实例
  • ‘0..*’,
  • ‘1..*’

类关系

assocation(konws a)

一个对象知道另一个对象的存在,该对象持有另一个对象的指针或者引用。

class X
{
public:X(Y* _ptrY):ptrY_(_ptrY) {}void setY(Y *y) { ptrY_ = y;}void f() { ptrY_->foo();}
private/public:Y* ptrY_;       // X类持有Y的一个指针,可据此调用Y中的成员方法
}

dependency

当类Y与类X彼此独立,而类Y是类X成员函数的一个参数,或者X中成员函数的一个局部变量。

class X
{
...void f1(Y y) { ...; y.foo(); }void f2(Y& y) { ...; y.foo(); }void f3(Y* y) { ...; y->foo(); }void f4() { ...; Y y; y.foo(); }void f5() { Y::staticFoo();}
...
}

Aggregation

聚类发生的场景是:一个类是另一个类的集合或者容器,但被包含的类与容器本身并不具备相同的生命期,也就是容器销毁时,其包含的内容未必。关联(association)与聚合(aggregation)的不同之处在于,关联关系不存在一个明确的容器包含另外一个类。比如汽车和轮胎的关系,就是一种聚合关系,汽车包含着轮胎的集合,汽车的销毁,轮胎仍然可以存在。

class Window
{
public://...
private:vectr<Shape*> ptrShapes;
}

Composition

组合(composition)是聚合(Aggregation)的增强版。组合和聚合的根本不同在于类与其所持有元素的是否具有相同的生命期,要求必须相同是一种组合关系。

class Circle
{private:...Point center_;
...
}

class X
{
...
Y y;        // composition, 相同的生命期,// 如何是引用或者指针类型,则是关联类型,是一种弱联系
Y b[10];    // 0...10, composition
}class X
{X() { a = new Y[10]; }~X() { delete[] a;}
...Y *a;       // 0...10, composition,X对象析构时,必须对a进行释放}

继承(泛化)

类间的继承关系表达的是一种derived class B is a base class A

类模板

类模板意味着泛型类。

template<class T>
class X
{...};X<Y> a;

References

[1] UML Class Diagram Explained With C++ samples

[2] IN/OUT Parameters and how to work with them in C++

C++基础——用C++实例理解UML类图相关推荐

  1. 使用实例解释UML类图

    使用实例解释UML类图   在我们的平常工作中,完成某个项目或者功能不可能直接打开项目讲解思路,更多的是使用某种图表来表达我们的思想,其中UML类图就是一种非常便利的手段. UML类图基础知识   类 ...

  2. UML类图关系大全 and 报表的基本用法

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

  3. UML类图符号标识符解释

    来自:http://liuchuxiong2003.blog.sohu.com/168088327.html 类图Class diagram通过显示出系统的类以及这些类之间的关系来表示系统.类图是静态 ...

  4. Java 大黑话讲解设计模式 -- UML类图

    前言 关于UML类图的这篇文章,我觉得把它放在设计模式专栏的篇首最为合适,因为在学习设计模式的时候,经常会遇到有关UML类图,没有去专门学过的童鞋肯定会感觉很复杂.学到后面,发现不掌握UML类图,对设 ...

  5. UML类图关系全面剖析[转]

    UML类图关系全面剖析      本文随便转载,请保留出处:http://blog.csdn.net/dylgsy/ UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向 ...

  6. 基础(UML类图,设计原则)

    序言: 面向对象是PHP5之后增加的功能,是PHP走向现代语言的一个标志. 在过程式设计时代,PHP以学习成本低.入门快的特点赢得很多WEB开发者的青睐,但同时也限制了PHP的发展. 借鉴Java和C ...

  7. uml类图设计系统详解实例

    UML 类图 2009-11-21 14:03        by         闫妍,         1098         阅读,         ...         评论,       ...

  8. java类图_java UML类图的使用-UML基础-火龙果软件工程

    类图 是用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据.学习好类图的绘制,是一位合格的软件工程师应有的技能 ...

  9. 身为程序员还看不懂UML类图? 一文带你零基础学会看UML类图!

    身为程序员还看不懂UML类图? 一文带你零基础学会看UML类图! 一,UML类图示例图 二,UML类图图例 三,分步解析说明 3.1 类图: 3.2 接口: 3.3 实现继承 3.4 实现接口: 3. ...

最新文章

  1. IM4Java + GraphicsMagick 实现高清图片剪裁处理
  2. 帧、场编码的个人理解
  3. Linux Cache 机制探究
  4. 微软推出Windows XP SP3中文版
  5. HDU1426 Sudoku Killer DFS
  6. 什么是 SAP HCEA
  7. “Hello World!”团队第九次会议
  8. 关于推送的一些记录要点
  9. git clone加速(github加速)
  10. 伪元素在父元素中居中_从ArrayList中移除元素
  11. [导入]一个Form验证的方案
  12. Quartz定时任务
  13. visio程序流程图绘制教程
  14. NVIDIA控制面板打不开
  15. 【python教程入门学习】机器学习常用术语
  16. A*算法的原理和实现
  17. google sdk speech-to-text(谷歌语音转文本、谷歌语音转字幕)
  18. 最优化学习 拟牛顿法(Quasi-Newton Method)
  19. 2017年异步社区优秀图书和作译者评选TOP10
  20. 递归实现指数型,排列型,组合型枚举

热门文章

  1. c语言倒序输出单词_洛谷 || 单词覆盖还原(C语言)
  2. 带sex的net域名_sex.com(性)域名争夺再升级 色情能抵千万美金?
  3. await原理 js_深入浅出node.js异步编程 及async await原理
  4. c语言最新标准 2017,2017最新C语言介绍
  5. Pytorch专题实战——线性回归(Linear Regression)
  6. TensorFlow精进之路(十五):深度神经网络简介
  7. OpenCV精进之路(十七):工具——图像配准工具
  8. word文档中页眉页脚的设置问题
  9. 与其临渊羡鱼,不如退而结网
  10. Crnn中文end-to-end识别