1、泛化(Generalization)
2、关联(Association)
2.1聚合(Aggregation)
2.2组合(Composition)
3、依赖(Dependency)
· 首先类之间的关系从宏观上可以分为:关联、依赖、继承,而其中关联又有两种特例:聚合和组合,不过在UML2.X中聚合和组合合成一种关系了。
· 从使用的频率来看,关联(包括聚合和组合)关系是使用最为广泛的;其次是依赖和继承
public class Person{
/** 拧螺丝 */
public void screw(Screwdriver screwdriver){
screwdriver.screw();
}
}
1、 泛化(Generalization)
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。
般化的关系是从子类指向父类的,与继承或实现的方法相反。子类获得父类的功能的同时,还可以扩展自己的功能
[具体表现]
父类 父类实例=new 子类()
[UML图](图1.1)
图1.1 Animal类与Tiger类,Dog类的泛化关系
[代码表现]
class Animal{}
class Tiger extends Animal{}
public class Test
{
public void test()
{
Animal a=new Tiger();
}
2、关联(Association)
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系
关于关联分为有两种特殊的形式,聚合(Aggregation)和组合(Composition),聚合和组合只有概念上的区别,在Java中的代码实现上没有区别
[具体表现]
关联关系是使用实例变量来实现
[现实例子]
比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司
[UML图] (图1.3)
[代码表现]
public class Company{
private Employee employee;
public Employee getEmployee(){
return employee;
}
public void setEmployee(Employee employee){
this.employee=employee;
}
//公司运作
public void run(){
employee.startWorking();
}
}
2.1聚合(Aggregation)
聚合关系(Aggregation):是关联关系的一种,是强的关联关系。聚合是整体与个体之间的关系。如汽车类与引挚类,轮胎类之间的关系就是整体与个体的关系。
与关联关系一样,聚合关系也是通过实例变量来实现的。
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。
[具体表现]
与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别
关联关系所涉及的两个类是处于同一层次上的,而在聚合关系中,两个类处在不平等的层次上的,一个代表整体,一个代表部分。(关联与聚合仅仅从语法上是区分不开的,需要察所涉及的类之间的逻辑关系。)
2.2组合(Composition)
是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表的对象负责代表部分的对象的生命周期,合成关系是不能共享的。
表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期,即整体对象不存在,部分对象也将不存在,
代表整体的对象需要负责保持对象的存活,在一些情况下负责将代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,
代表部分的对象在每一个时刻只能与一个对象发生合成关系,由后者排它的负责其生命周期。
3、 依赖(Dependency)
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
Java代码中的表现为局部变量,方法的参数,以及对静态方法的调用
[具体表现]
依赖关系表现在局部变量,方法的参数,以及对静态方法的调用
[现实例子]
比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作
[UML表现](图1.2)
图1.2 Person类与Screwdriver类的依赖关系
[代码表现]
public class Person{
/** 拧螺丝 */
public void screw(Screwdriver screwdriver){
screwdriver.screw();
}
}