类与类的关系
一:一般关系
表示类与类之间的继承关系,接口与接口之间的继承关系,或者类与接口的实现关系。一般化的关系是子类指向父类,或从实现接口的类指向被实现的接口,如下图所示
一般关系在java语言中,可以直接翻译成extends或者implements.
二:关联关系
关联关系是类与列之间的连接,关联可以是单向的也可以是双向的,双向的关联可以有两个箭头,或者没有箭头,单向的关联有一个箭头,一般情况下都是单向关联。如下图所示
在java语言中,关联关系是使用实例变量实现的,比如在上面的Driver类中,就出现了一个为Car类型的实例变量,这个变量就实现了这两个类的
关联关系,每一个关联关系都有一个名字,在上面的列子里,关联的名字是Drivers
每一个关联都有两个端点,每一个端点都可以有一个角色名,显示出关联的本质,一个关联可以有一个方向箭头,表明遍历或者查询的方向。
在每一个关联的端点,还可以有一个基数,表明这一端可以有几个实例。
三:聚合关系
聚合关系是关联关系的一种,是强的关联关系,是整体和个体之间的关系,一个汽车对象是有一个引擎对象和四个轮子对象组成的。
与关联关系一样,聚合关系也是通过实例变量实现的。以上面的列子为例,Car中有一个类型为Engine的属性和一个类型为Tire的数组属性。关联关系的类是处于同一个层次上,而在聚合关系中,两个类处于不平等的层次上,一个代表整体,一个代表部分。
关联和聚合在语法上是分辨不出来的,需要考察所涉及类与类之间的逻辑关系。如果不确定是聚合关系,可以设置为关联关系。
四:合成关系
合成关系是关联关系的一种,是比聚合关系强的关系,它要求普通合成关系中代表整体的对象负责代表部分的对象的生命周期,合成关系是不能共享的,代表整体的对象负责代表部分对象的存活,代表整体的对象可以把代表部分的对象传递给另外一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象某一时刻只能与一个对象发生合成关系,由后者负责它的生命周期。
在上面的类图中,显示了美猴王(MonkeyKing)以及他的四肢(limb)和他的金箍棒(GoldRingedStaff)之间的关系,可以看出,MonkeyKing与GoldRingedStaff之间是聚合关系,而MonkeyKing和limb的关系更强,是合成关系,因为美猴王的四肢完全是由自己负责的,并且不能共享。
如果不能确定是否是合成关系,可以设为聚合关系,或者是合成关系,甚至是关联关系。
五:依赖关系
依赖也是类与类之间的连接,依赖总是单向的,依赖关系表示一个类依赖于另外一个类。
在上面的列子里,Person类依赖于Car类和House类的定义,因为Person类引用了Car和House,与关联关系不同的是,Person类中并没有Car和House类型的属性,Car和House的实例是以实参的方式传人到buy()方法中
一般而言,依赖关系在java语言中体现为局域变量、方法的参量,以及对静态方法的调用,换言之,一个A类的某一个局域变量或者方法的参量是另一个类B的实例,那么A就依赖B,A类调用B的静态方法,也属于A依赖于B
注:以上内容参考了部分数据