一、泛化
1、说明
泛化是一种继承关系,如果一个类A的所有属性和操作能被另一个类B所继承,则类B不仅可以包含自己独有的属性,而且可以包含类A的属性和操作。继承是类与类或者类与接口之间最常见的关系。
2、例图
3、表现
父类 父类实例=new 子类();
4、代码
class Animal{};
class Tiger:public Animal{};
class Dog:public Animal{};
Animal * pAnimal=new Dog;
泛化中子类直接继承了父类的属性和操作所以它的关系最强
二、关联
1、说明
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系
2、例图
3、表现
关联关系时使用实例变量来实现的
4.代码
public class Company
{
private Employee employee()
{
return employee;
}
public void setEmployee(Employee employee)
{
this.employee=employee;
}
public void run()
{
employee.starWorking();
}
}
三、聚合
1、说明
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调整体与部分之间的关系。
2、例图
3、表现
与关联关系一样,聚合关系也是通过实例变量来实现的。
4、关联与聚合的区别
在语法上是难以区分的,在语义上才能更好的区分两者的区别
区别:关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是自行车的组成部分。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如:电脑和它的显示器、键盘、主板和内存就是聚集关系。
5、代码
public class Computer
{
private CPU cpu;
public CPU getCPU()
{
return cpu;
}
public void setCPU(CPU cpu)
{
this.cpu=cpu;
}
//开启电脑
public void start()
{
cpu.run();
}
}
四、组合
1、说明
组合关系也是聚合关系的一种,是比聚合关系更强的关系。组合关系是不能共享的。例如人有四肢、头等
表示类之间整体和部分的关系,组合中部分和整体具有统一的生存周期。一旦整体对象不存在,部分对象也将不存在。部分对象和整体对象之间具有共生死的感觉。
2、例图
4、代码
class Leg();
class Arm();
class Person
{
Leg mLeg;
Arm mArm;
};
5、聚合和组合的区别
a、聚合和组合都是一种结合关系,只是额外具有整体部分的含义
b、部件的生命周期不同
聚合关系中,整体不会拥有部件的生命周期,所以整体删除时,部件不会被删除。再者,多个整体可以共享同一个部件
组合关系中,整体拥有部分的生命周期,所以整体删除时,部件一定会跟着删除。而且,多个整体不可以同时间共享一个部件。
c、聚合关系是“has-a”关系,组合关系是“contain-a”关系
所以它们的关系是:组合>聚合>关联
五、依赖
1、说明
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例时,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系
与关联关系不同的是,依赖关系是以参数变量的形式传入到依赖类中。
依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不太明显的时候(可以说是“use”了那个类),可以把这种关系看成是依赖
2、例图
3、表现
依赖关系表现在局部变量,方法的参数,以及对静态方法的调用
4、代码
class Car();
class Hourse();
class Person
{
void buy(Car car)
{
}
void buy(House pHouse)
{
}
}
六、实现
实现关系和泛化是同等的强度。
综上所述它们之间的耦合度是:泛化=实现>组合>聚合>关联>依赖