一、概述
对于大型项目,一般需要先利用UML绘制类图关系。学习设计模式,也需要清楚的知道类与类之间的关系。
类与类之间的关系分为三大类:泛化,实现,关联(组合、聚合、普通关联、依赖)
二、详细
1、泛化
泛化关系发生在父子类之间。子类继承父类的所有非私有属性和方法,并根据自有的特性进行扩展,这就属于泛化,使用实线空心箭头表示,如下图所示,
2、实现
实现关系发生在父子类之间。父类存在虚函数或纯虚函数,子类重新实现了虚函数,这就属于实现,使用虚线空心箭头表示。如下图所示,CDot继承CShape,并实现了CShape的接口函数Draw()。
3、关联
关联分为四种:组合,聚合,普通关联,依赖。从关联的紧密程度来说,四种关联之间的强弱关系为:组合>聚合>普通关联>依赖。
3.1、组合
两个对象如果是组合关系,那么说明一个对象包含其中一个对象,且不可分割。比如,人拥有大脑,鸟拥有翅膀,大脑不能独立人而存在,翅膀不能独立鸟而存在,这都是不可分割的对象。如下图所示,
特别说明,关联关系中,可以标明对象的数量关系,就像人和大脑是一对一的关系。
3.2、聚合
聚合是指,一个对象拥有一个对象,但是是可以分割的,强调的是整体与部分的关系。比如,雁群中的一只雁,雁群拥有许多雁,雁可以飞离雁群而存在。如下图所示,
3.3、普通关联
普通关联的两个对象是一种平等关系,分为单向关联和双向关联。可以使用实线带双向箭头或实线表示。例如,老师知道自己的所有学生信息,学生也知道自己所有老师的信息,因此学生和老师属于双向关联。如下图所示,
3.4、依赖
依赖一般只能是单向依赖,指一个对象使用另外一个对象。比如人可以使用刀,但不能说刀使用人,因此人对象就是依赖刀对象。
三、总结
对于泛化和实现关系,很好区分,但是关联关系则难以区分。一般为了简单,所有的关联关系可以采用实线箭头表示,不显示他们的强弱关系。