UML中几种关系经常会搞混,这里统一梳理下,省的再犯低级错误。
一个点:实线比虚线表示的关系更强烈一些
UML中定义的关系主要有六种:
泛化:
在程序中通过“继承”来实现,也可以认为就是继承;
通过空心三角形+实线来表示,子类指向父类。
实现:
可以理解为类与接口之间的关系;
通过空心三角形+虚线来表示,从实现类指向接口
依赖:
是一种“使用”关系,即一个类(A)的实现需要用到另一个类(B)。
尽量不要使用双向依赖。
一般表现为类A中的方法需要类B的实例作为其参数或变量,但是类A本身并不需要引用类B的实例作为其成员变量。
使用虚线箭头表示,类A指向类B。
关联:
比依赖的关系更强,类A使用类B的实例作为自己本身的一个成员变量。
使用实线箭头表示,类A指向类B。
聚合:
传说中的 has-a关系,类A和类B是整体和部分的关系。但是两个部分的生存周期可以不同,没那么强的约束关系。
是一种更强的关联关系,关联关系的特例。
使用空心菱形+实线来表示,范围小的指向范围大的。
组合:
contains-a关系,类A和类B也是整体和部分关系,但是之间的关联更强,有共同的生命周期,一旦整体不存在,部分也将不存在。
通过实心菱形+实线来表示,范围小的指向范围大的。