关系就是事物之间的联系。在面向对象的建模中,最重要的关系就是依赖、泛化、关联和实现。
一、依赖
是一种使用关系,说明一个事物使用另一个事物的信息和服务,但反之未必可以行得通。图形表示为一条有向的虚线。
依赖的关系是所有关系当中最弱的,其他的在概念上都算是一种依赖关系,所以,依赖关系要少用,这样才能更清楚的描述出对象之间的关系。
e.g.
表示电视节目需要使用频道来传播。
二、泛化
是一般事物和该事物的较为特殊的种类之间的关系。说白了就是继承关系。有单继承和多继承。子类完全获得父类所有的属性和方法,还可以在此之上有自己的扩展。
图形表示一条带有空心三角形大箭头的有向实线,指向父类。
e.g.
单继承:
多继承:
表示Bird同时继承两个父类。
三、关联
是一种结构关系,指明一个事物的对象与另外一个事物的对象之间的联系。图形表示为连接两个类的实线。
貌似一条直线表示联系,这个关系也太弱了吧,其实不然还有一些必要的修饰:
1、可以给关联添加一个名称,用来描述该关系的性质。
e.g.
2、赋予每个类一个相对应的角色。角色是关联中一个类对另一端的类呈现出来的角色面孔。
e.g.
3、添加关联角色的多重性。即表示为对于关联另一端的类的每个对象,本端的类可以有多少个对象出现。
两种特殊的关联:聚合和组合。
Ⅰ聚合:表示在关联关系中有“整体/部分”关系。
e.g. 学校包括院系,可以表示为:
Ⅱ组合:组合是一种特殊的聚合,主要体现在整体和部分的生命周期是一致的,即所谓的同生共死。也就是意味着在一个时间内,一个对象只能是一个组合的一部分,不能几个整体共有。
e.g. 在窗口系统中,一个frame只能属于一个Window。
四、实现
是类目之间的语义关系,一个类目描述了另一个类目保证实现的合约。图形表示为一条带有空心三角箭头并指向描述合约的那个类目。
大多数情况下,要用实现来描述接口和类或者构件之间的关系。
e.g.