首页 > Java > 工具篇 > 类与类(接口)之间的关系
2014
08-01

类与类(接口)之间的关系

类图除了可以表示一个类的内部结构之外,还可以表示类之间的相互关系。类与类(接口)之间的关系有如下几种:

    • 泛化(同继承)& 实现
    • 关联(包括聚合、组合)
    • 依赖

1、泛化(Generalization)& 实现(Realization)

泛化与继承是同一个概念,表示子类是一种特殊的父类(is-a),继承关系使用带空心三角形的实线表示。如下:

relation01

类实现接口是一种特殊的继承,实现关系用带空心三角形的虚线表示,如下:

relation02

2、关联(包括聚合、组合)

当一个类“知道”另一个类时,可以用关联(Association)。关联具有一定的方向性:如果仅能从一个类单方向地访问另一个类,则被称为单向关联(DirectedAssociation);如果两个类可以互相访问,则被称为双向关联。关联使用一条实线来表示,带箭头的实线表示单向关联。如下面两个例子:

relation03

①企鹅需要“知道”气候的变化,需要“了解”气候规律,所以在Penguin类里保持一个气候属性表示它们之间的单向关联

relation04

②上图描述了Teacher和Student之间的双向关联关系(即能相互访问),直线两端的1和1…*称为多重性(Multiplicity),代表一个对象能访问关联对象的数目,上图的Teacher和Student之间存在1:N的关联关系。

从上面的两个例子可以看出,关联和属性很像,关联和属性的关键区别在于:类的某个属性引用到另外一个实体时,则变成了关联。

关联关系包括两种特例:聚合(Aggregation)和组合(Composition),它们都有部分和整体的关系。区别如下:

①聚合:当某个实体聚合成另一个实体时,该实体还可以是其他实体的部分。如一个学生可以是书法社团的“部分”,也可以是音乐社团的“部分”。

②组合:当某个实体组合成另一个实体时,则该实体不能是其他实体的部分。

聚合使用带空心菱形框的实线表示,组合则使用带实心菱形框的实线表示。如下:

relation05

3、依赖(Dependency)

如果一个类的改动会导致另一个类的改动,则称两个类之间存在依赖。导致依赖的可能原因有(A依赖B):A中有B类型的方法的参数、局部变量,或存在对B中静态方法的调用。通常来说,依赖是单向的,要避免双向依赖依赖关系使用带箭头的虚线表示。如下:

relation06

上图表示动物(Animal)要依赖于氧气和水,因为动物的新陈代谢需要用到氧气和水。


留下一个回复

你的email不会被公开。