1.关系
按照标准定义,依赖(Depenency)是两个事物之间的语义关系,其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义。由于泛化(Generalization)和关联(Association)都有这种含义,所以,依赖包含泛化关系和关联关系。
泛化(Generalization)是一种特殊∕一般关系,特殊元素(子元素)的对象可以替换一般元素(父元素)的对象。用这种方法,子元素可共享父元素的结构和行为。对于类和类之间或接口与接口之间这种关系叫继承关系,对于接口和类之间,这种应该叫实现(Realization)关系。所以,泛化包括继承关系和实现关系。
关联关系(Association)是一种结构关系,它是类与类之间的连接,它使一个类知道另一个类的属性和方法。聚合(Aggregation)是一种特殊的关联,它描述了整体和部分之间的关系。组合关系(Composition),有的书籍叫做合成关系,是一种特殊的聚合关系,它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系不能共享。
在下图中,可以明确看出类关系最开始的节点是依赖,如果一个类连依赖关系都不存在,则如何存在什么泛化和关联。
2.依赖
依赖关系是类与类之间的连接,表示一个类依赖于另一个类的定义。例如A依赖于B,则B体现为局部变量,方法的参数或静态方法的调用。依赖关系有如下三种情况:
①A类是B类的一个成员变量;
②A类是B类方法中的一个参数;
③A类向B类发送消息,从而影响B类发生变化。
注意,要避免双向依赖。一般来说,不应该存在双向依赖。
依赖图示的表示方法,可使用实心箭头的虚线表示,如下图所示。
上图说明Class1依赖Class2。
依赖代码,用Java代码表示
①Class2类是Class1类的一个成员变量,这是一种关联关系。一般情况下,都按照关联关系进行标识,代码如下:
public class class1
{
public class2 association;
}
②Class2类是Class1类方法中的一个参数,代码如下:
public class class1
{
public int operation1(class2 parameter1)
{return 0;}
}
③Class1类方法中调用Class2类的方法,代码如下:
public class class1{
public void operation1(){
class2.method1();
}
}
④Class1类方法中实例Class2类并调用方法,代码如下:
public class class1{
public void operation1(){
class2 object1 = new class2();
object1.method1();
}
}
依赖关系很多,有bind,call,extend,friend,import,include,instantiate,refine,sameFile,trace,use等。
call关系用下图表示:
表示Class1通过call依赖Class2,即Class1调用Class2。
3.泛化
泛化关系是一种特殊∕一般关系,特殊元素(子元素)的对象可以代替一般元素(父元素)的对象。用这种方法,子元素共享了父元素的结构和行为。具体表现为类与类之间的继承关系,接口与接口之间的继承关系,类对接口的实现关系。
表示方法:
使用带实心箭头的实线或虚线表示。如果父类是类,则用一个空心箭头+实线,箭头指向父类。如果父类是接口,则用一个空心箭头+虚线,箭头指向父类。有三种表示方式,其中的一种模式还是实线模式。
类与类之间的泛化关系就是继承关系,如下图所示:
空心箭头+实线,箭头指向父类。
接口与接口之间的继承关系同样也是继承关系,如下图所示:
空心箭头+实线,箭头指向父类。
接口与类的泛化关系是实现关系,如下图所示:
空心箭头+虚线,箭头指向父接口。
说明类Class1实现接口Interface1,Interface1是父接口,Class1是子类。
泛化代码:
①类与类之间的继承关系:
public class Class1 extends Class2{}
②接口与接口之间的继承关系:
public interface Interface1 extends Interface2{}
③接口与类之间的实现关系:
public class Class1 implements Interface1{}
泛化关系的扩展:
泛化关系的三个要求:
①子类与父类应该完全一致,父类所具有的属性,操作,子类应该有;
②子类中除了与父类一致的信息以外,还包括额外的信息;
③可以使用父类实例的地方,也可以使用子类的实例。
4.关联关系
实心箭头+实线
Class1使用Class2.
public class class1{
public class2 assocation1;
}
分类:
多重性分类
一对一关联:
public class class1{
public class2 assocation1;
}
一对多关联:
public class class1{
public class2[] assocation1;
}
多对多关联:
关联的导向分类
双向关联:
单向关联:
自身关联:
public class class1{
public class1[] association1B;
}
5.聚合关系
空心菱形+实线+箭头,箭头指向部分。
Class2实例的对象包容了多个Class1实例的对象。
代码:
public class class1{
public class2[] assocation1;
}
聚合关系式一种特殊的关联,聚合关系明确指出了聚合的主题具有整体-部分关系。
组合是一种特殊的聚合,组合中的某个主体控制着另一个主体是生命周期,而且它们还存在整体-部分关系。
当类之间存在整体-部分关系的时候,我们就可以使用组合或者聚合。
6.组合关系
7.实现关系
网友评论