C++UML类图的关系
在C++中UML主要用来描述软件中类和对象以及它们的静态关系。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。
类图的3个基本组件:
- 类名;
- 属性;
- 方法;
可见性(visibility):
+
public-
private#
protected
实例个数(multiplicity)
0..1
, 无实例,或者1个实例;1
, 只有一个实例;0..*
, 任意个实例;1..*
, 1个以上实例;
常见的UML类图关系
泛化(Generalization)Inheritance (is-a)
是一种类与类之间的继承关系,即is-a。
使用实线+空心三角箭头
表示,空心箭头指向基类。
如:
大雁 ----------|> 鸟类
实现(Realization)Implement (is-a)
是实现类与接口之间的关系,也是is-a的关系。
使用虚线+空心三角箭头
表示,空心箭头指向基类。
如:
大雁飞 - - - - -|> 飞翔
关联(Association) (knows-a)
类与类之间的强依赖关系,即knows-a的关系,它使一个类知道另一个类的属性和方法。
关系比依赖更强,不存在依赖关系的偶然性、也不是临时性的,一般是长期性的,而且双方一般是平等关系。
使用实线+箭头
表示,箭头指向关联类。
如:
学生 ------------> 课程
企鹅 ------------> 气候
聚合(Aggregation)(has-a)
关联关系的特例,体现整体与部分的关系,即has-a,整体与部分可分离,有各自的生命周期。
使用空心菱形+实线+箭头
表示,箭头指向表示部分的类。
如:
雁群 <>----------> 大雁
组合 (Composition) (contains-a)
关联关系的特例,体现不可分离的整体与部分关系,即contains-a,也称强聚合。整体与部分不可分离,没有整体就没有部分。
使用实心菱形+实线+箭头
表示,箭头指向表示部分的类。
如:
鸟 <+>----------> 翅膀
依赖 (Dependency) (uses-a)
偶然的、临时的、较弱的使用关系,即uses-a,比以上关系都弱。
使用虚线+箭头
表示,箭头指向表示依赖对象的类。
如:
人 -----> 电脑
实例
- 依赖(dependency,uses-a):动物依赖(使用)于氧气和水,拥有生命,能吃能动和繁殖;
- 泛化(继承,generalization,inheritance,is-a):鸟类是动物的一种(泛化/继承),有动物的属性和方法,,此外还有自己的属性(羽毛);
- 组合(Composition,contains-a):鸟类还拥有(组合)翅膀(鸟类不能没有翅膀)。
- 实现(Realization,implement,is-a):大雁继承自鸟类和飞行接口类,实现自己的飞行方法。鸭子继承自鸟类,唐老鸭继承自鸭子,还实现了说话的方法。
- 聚合(Aggregation,has-a):雁群由大雁聚集而成(大雁可以离开雁群)。
- 关联(Association,knows-a):企鹅继承自鸟类,对气候有关联关系。