依赖(Dependency)
依赖可以理解为一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用。
图形表示如下:
代码实现如下(C#):
(PS:企鹅依赖于气候,一但南极春天到来,温度小于-10度后,它们将集体迁移到北极去。)
关联(Association ))
关联和泛化是依赖的两种特别形式,关联分为单向关联和双向关联,单向关联是指某一个类中包含另一个类的全部或一部份,而被包含的类是不知道另一个类的存在。双向关联是指两个类中互相包含或引用,它们彼此都知道对方的存在。
用图形表示如下(双向关联) :
PS:上图显示了两个类的双向关联的关系,一本书可以由多个作者编写,一个作者也可以编写多本书。
用代码实现如下:
(PS:一个作者可以写多本书,同样,一本书可以被多个作者编写)
关联类(Association Class)
关联类本质上是一个类附加在一个关联中,被用来作为UML类来建模一种关联关系,它有其自己的名称,属性和方法。然而,它所描述的属性并不属于关联中的对象。比如:一个员工类与一个公司类产生一个合同类的关联后,合同类中的签字日期 这个属性并不属于员工类或公司类。
用图形表示如下:
聚合(Aggregation)
聚合是关联关系的一种,是强的关联关系。聚合关系是整体和个体的关系。普通关联关系的两个类处于同一层次上,而聚合关系的两个类处于不同的层次,一个是整体,一个是部分。同时,是一种弱的 拥有 关系。体现的是A对象可以包含B对象,但B对象不是A对象的组成部分。具体表现为,如果A由B聚合成,表现为A包含有B的全局对象,但是B对象可以不在A创建的时刻创建。
用图形表示如下:
(PS:一个教授拥有一个班级,一个班级至少由一个学生组成:整体 ---> 个体,班级中少一个学生或多一个学生,这将不会直接影响到这种聚合关系)
组合(composition)
组合是关联关系的一种,比聚合关系更强,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。组合关系是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一致。如果A由B组成,表现为A包含有B的全局对象,并且B对象在A创建的时刻创建。
用图形表示如下:
(PS:一台电脑由cpu 和其它部件组成,当CPU的生命周期结束后,组合的关系将不存在,computer类的生命周期也将结束。比如:拿掉cpu,电脑将无法再执行程序)