类之间的关系,依赖、泛化(继承)、实现、关联、聚合与组合
+
public-
private#
protected属性表达式
可见性 名称 :类型 [ = 缺省值]方法表达式
可见性 名称(参数列表) [ : 返回类型]
关联关系
关联关系是类与类之间的联系,是依赖关系的特例
关联关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系。如老师和学生,师傅和徒弟,涨幅和妻子,关联关系是类与类之间最常用的一种关系,分为一般关联关系,聚合关系和组合关系
关联又可以分为单向关联,双向关联,自关联
1.单向关联
在UML类途中单向关联用一个带箭头的实线表示,上图表示每个顾客都有一个地址,这通过让Customer类持有一个类型为Address的成员变量类实现。
2.双向关联
双向关联就是双方各自持有对方类型的成员变量。
在UML类图中,双向关联用一个不带箭头的直线表示,图中Customer类中维护一个List,表示一个顾客可以购买多个商品,在Product类中维护一个Customer类型的成员变量表示这个产品被哪个顾客所购买。
3.自关联
自关联在UML类图中有一个带箭头且指向自身的线表示,图中的意思就是Node类包含类型为Node的成员变量,也就是自己包含自己
聚合关系
聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。
(台式机:电脑,显示器,鼠标,键盘;大学:老师,学生;)
聚合关系是关联关系的一种,是强关联关系,是整体和部分的关系。
(整体和部分的内容可以分开,就是聚合,如果不可以分开就是组合)
聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。例如,学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。
在UML类图中,组合关系用带实心菱形的实现来表示,菱形指向整体。下图所示的是头和嘴的关系图:
组合关系
组合关系(Composition):整体与部分的关系,但是整体与部分不可以分开。
(头:眼睛,嘴,耳朵;人:胳膊,腿)
组合表示类之间的整体与部分的关系,但是他是一种更强烈的聚合关系。
(整体和部分的内容可以分开,就是聚合,如果不可以分开就是组合)
在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如,偷喝嘴的关系,没有了头,嘴也就不存在了。
在UML类图中,组合关系用带实心菱形的实现表示,菱形指向整体。下图所示头和嘴的关系图:
依赖关系
- 只要是在类中用到了对方,那么他们之间就存在依赖关系。
- 类的成员属性
- 方法的返回类型
- 方法接收参数类型
- 方法中使用到
依赖关系是一种使用关系,他是对象之间耦合度最弱的一种关联方式,是临时性的关联。在代码中,某个类的方法通过局部变量,方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。
在UML类图中,依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。下图所示的是司机和汽车的关系图,司机驾驶汽车:
继承关系(泛化关系)
继承关系与泛化关系是相同的概念,是依赖关系的特例。
继承关系是对象之间耦合度最大的一种关系,表示一般一特殊的关系,是父类与子类之间的关系,是一种继承关系。
在UML类图中,泛化关系用带空心三角箭头的实线来表示,箭头从子类指向父类。在代码是现实,使用面向对象的集成机制类实现泛化关系。例如,Student类和Teacher类都是Person类的子类,其类图如下图所示:
实现关系
实现关系是接口与实现类之间的关系。是依赖关系的特例
在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有抽象操作。
在UML类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。例如,骑车和船实现了交通工具,其类图如下图所示:
依赖是对象间短暂的一种关系,被调用类表现为调用类的局部变量、方法的参数、以及调用类调用被调用类的静态方法,属于依赖关系。
关联是对象间长期的一种关系,是依赖关系的特例,在这个长期的关系中,被调用类表现为调用类的引用、或者调用类的属性,这种情况说调用类和被调用类之间就属于关联关系。
聚合和组合是关联的特殊表现
依赖是一种弱关联
依赖:
如果A指向B,则说明A中使用了B,使用方式包括A类中有B类实例化对象的局部变量。A类中有方法把B类实例化对象当做了参数,A类中有方法调用了B类中的静态方法。
关联:
如果A指向B,则说明A类中有B类的成员变量。
关联,聚合,组合,依赖,继承,实现