UML把类之间的关系分为以下几种:
1. 关联(Association)
类A和类B的实例之间存在着特定的对应关系。用一条实线来表示。
例如图书馆的书与读者之间的关系。
注释:(0..*)表示一个读者可以借阅多本书,(0..1)表示一本书只能借给你个读者
2.依赖(Dependency)。
当类A(客户)使用类B(服务者)的某个方法去完成某个功能,这种使用关系具有临时性,偶然性,
当类B的发生变化时,类A也会发生变化,这时我们称A与B之间的关系是依赖关系。
总而言之,他表示这样一种情形,提供者的某些变化会要求或指示依赖关系中客户的变化。
根据这个定义,关联和泛化都是依赖关系,但是它们有更特别的语义,故他们有自己的名字和详细的语义。
依赖关系用虚线箭头表示。
例如人骑自行车,人与自行车车之间的关系就属于依赖关系。 因为人使用自行车,人也可以使用汽车,
所以说人与自行车之间的关系具有临时性,自行车出毛病了也会影响到人的行为(骑车这个行为)。
3. 聚合(Aggregation)
聚合体现的是整体与部分,拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,
他们可以有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,比如计算机
与CPU,图书馆与图书的关系等,表现在代码层面上,和关联关系是一致的,只能从语义级别来做区分。
符号用带空心菱形箭头的实线表示
图例:
4.组合(Composite)
组合同聚合一样,也体现整体与部分之间的关系,也是关联关系的一种特例,它体现的是contains-a的
关系,这种关系比聚合更加强,亦称为强聚合。组合的整体和部分之间是不可分的,整体的生命周期结束也
就意味着部分的生命周期结束。比如人和人的大脑;在代码层面,和关联关系是一致的,只能从语义级别来区分;
图例:
5.泛化(Generalization)
泛化也就是继承,主要是指一个类(子类,子接口)继承了另外一个类(父类,父接口),并可以增加新功能。继承应该是类与类,
接口与接口之间最常见的关系。符号是用带实线的空心三角符
例图:类ClassB继承了类ClassA,接口InterfaceB继承了接口InterfaceA.
6. 实现(Realization)
主要指的是一个类去实现一个接口的功能。 用带空心三角符的虚线表示。
例图:类ClassA实现接口InterfaceA