《大话设计模式》中讲述了UML类图的基本用法,做此笔记加深理解。

注:上图来源于《大话设计模式》

上图中设计的关键术语为:继承、实现、聚合、组合、关联、依赖。

要想弄清楚UML图的原理,必须深入理解上述六大术语的基本含义。

  • 继承表示:

//鸟类
class Bird
{
public:
void layeggs() { } private:
string color;
}; //大雁类继承自鸟类
class wildGoose : public Bird
{
public:
void layeggs() { }
void fly() { }
}; //鸭子类继承自鸟类
class duck : public Bird
{
void layeggs() { }
void swimming() { }
};

继承关系为is-a关系,上述关系中,大雁、鸭子、企鹅均属于鸟类,则其继承自鸟类,其中,箭头方向所指动物类。

  • 实现表示:(在C++中继承自抽象类也选用此种表示方式)

//动物类
class Animal
{
public:
//声明了纯虚函数的类,都成为抽象类。
virtual void live() = ; private:
string food;
}; //鸟类继承自动物类
class Bird : public Animal
{
public:
void layeggs() { }
void fly() { }
private:
string teeth;
};

在Java中有接口的概念,上图中大雁实现了飞翔接口;在C++中,动物类为抽象类,鸟类继承自抽象类,同样适用虚线进行表示。

  • 聚合表示:

//大雁类继承自鸟类
class wildGoose : public Bird
{
public:
void layeggs() { }
void fly() { }
}; //雁群类
class wildGooseGroup
{
public:
wildGoose *wildgoose;
public:
wildGooseGroup(wildGoose *wildgoose) {
this->wildgoose = wildgoose;
}
wildGooseGroup() { }
};

聚合表示个体与整体的关系,可以表示为 has-a ,但是需要注意的是个体与整体属于外在的构成,即一个对象参与构成了一个整体,如同学生组成班级的关系,即使整体不存在的情况下,个体还是可以存在的,即两者之间生命周期不同步。

  • 组合表示:

//翅膀类
class Wings
{
public:
Wings(){}
~Wings(){}
}; //大雁类继承自鸟类
class wildGoose : public Bird
{
public:
void layeggs() { }
void fly() { }
private:
//大雁类中包含翅膀类
Wings wings;
};

组合表示部分与整体的关系,可以表示为  contains-a 关系,部分与整体属于内在的组成,即一个对象称为了整体的一部分,如同大脑与身体的关系,若整体不存在的情况下,部分是不会存在的。

注:

聚合表示  class A {…}  class B { A* a; …..}    用到指针,从而表示两者生命周期不同步。

组合表示   class A{…} class B{ A a; …}

  • 关联表示:

//企鹅类继承自鸟类
class penguin : public Bird
{
public:
void layeggs() { }
private:
Climate climate;
};

关联表示不同类之间的结构关系,其中一个类可以“知道”另外一个类,其中箭头指向被关联的类。继承、组合、聚合、依赖均为关联关系的一种表现形式

关联关系作用时间持久。一个对象保存了对另外一个对象的引用,并在需要的时候调用这个对象的方法。

上述企鹅类中保存了气候对象,相对于组合等表现形式,关联所体现的为企鹅类与气候类之间一种很弱的联系。

  • 依赖表示:

//鸟类
class Bird
{
public:
Bird(Oxygen oxygen, Water water) { }
~Bird(){}
void layeggs() { } private:
string color;
};

依赖关系表明一个类会使用到另一个类的情况,主要体现在“临时”情况下,比如可以体现在构造函数使用、传参使用。箭头指向被依赖的类。

补充例子:

你与你的手之间是组合关系(手是你身体的一部分,不可归其他所有);

你与你你的班级之间是聚合关系(班级没有你仍然存在);

你与你朋友之间是关联关系;

你与水之间是依赖关系;

最新文章

  1. Java 图片压缩
  2. Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] No such file or directory'
  3. H5全屏滚动专题页最佳实践
  4. 漫长Appium之路(二)——Appium安装与使用总结
  5. 08day1
  6. hdu3746
  7. GLOG使用注意事项
  8. live555
  9. 命令行利用KVM创建虚拟机
  10. 通信录列表+复杂Adapter分析
  11. 同一台电脑上配置多个解压版tomcat方法(本例安装两个)
  12. admin-handlers.go
  13. iview修改tabbar实现小程序自定义中间圆形导航栏及多页面登录功能
  14. java常使用的框架
  15. 第46章 发现端点(Discovery Endpoint) - Identity Server 4 中文文档(v1.0.0)
  16. iOS-CoreData详解与使用
  17. MySQL 内置函数
  18. Nginx 提示host not found in upstream 错误解决方法
  19. c# 后台绑定treeview 多个tab
  20. MapReduce 踩坑 - hadoop No FileSystem for scheme: file/hdfs

热门文章

  1. bat批处理 取得当前路径 %CD%
  2. Python17个常用内置模块总结
  3. MySQL8新特性(1)--原子DDL
  4. React中跨域问题的完美解决方案
  5. ISO/IEC 9899:2011 附录C——顺序点
  6. 查看rpm包spec文件
  7. vue地图可视化 ArcGIS篇
  8. [LeetCode] 59. Spiral Matrix II 螺旋矩阵 II
  9. PHP命令行参数
  10. 【视频开发】ffmpeg实现dxva2硬件加速