一、组合与聚合(Aggregation)的区别和联系
由其他的对象组合而成的对象叫做聚合对象。 首先,都是整体与部分的关系,组合的关系更强一点,对组合关系来说,如果失去部分,整体也将不存在了。 对于聚合,是当父聚合对象不存在时,组成聚合对象部分可以存在。而组成则是一种强聚合,在组成关系中,当父聚合对象不存在时,它的组成对象不能存在。
代码实现上来看: 组合:在整体的构造器中实例化部分,这个部分不能被其他实例共享。整体与部分的生命周期是同步的。而聚合关系的部分,可以在构造器中通过参数传递的形式进行初始化。
从数据库的层面上看: 组合关系:需要级联删除,而聚合关系不需要。 需要强制初始化代表聚合对象的组成对象。
聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。
聚合与关联的区别:关联关系所涉及的两个对象是处在同一个层次上的。聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。
二、关联关系
关联关系是使用实例变量来实现。
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
三、依赖关系
依赖关系表现在局部变量,方法的参数,以及对静态方法的调用。
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
四、泛化关系
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。