UML
实现接口用空心三角形+虚线表示
interface WideGoose implements IFly
{
}
关联关系:
企鹅是一种特别的鸟,会游不会飞。它的长途跋涉与气候有关系,需要知道气候的变化,当一个类“知道”另一个类时,可以用关联(association)。关联关系用 虚线实线箭头表示。
class Penguin extends Bird { private Climate climate; }
在每个关联都有两个端点,还可以有一个基数(Multiplicity),表示一端的类可以有几个实例。
基数 | 含义 |
0..1 | 零个或者一个实例 |
0..* 或 * | 对实例的数量没有限制(可以是0) |
1 | 只有一个实例 |
1..* | 至少有一个实例 |
其中记号 n..m 表明一个取值的区间,也就是 n~m 个实例。
聚合关系:
聚合关系是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。比如汽车类与引擎类、轮胎类,以及其它零件类之间的关系便是整体和个体的关系。
用 空心菱形+实线箭头表示
class WideGooseAggregate { private WideGoose[] arrayWideGoose; }
合成关系:
合成关系也是关联关系的一种,比聚合关系更强的关系,它要求普通聚合关系中代表整体的对象负责代表部分的对象的生命周期,合成关系是不能共享的。
上类图中,显示美猴王(Monkey King)与它四肢(Limb)是聚合关系,与金箍棒(GlodRingedStaff)是合成关系。因为美猴王的四肢完全由自己负责,并且不能共享。
鸟与翅膀是整体与部分的关系
用实心菱形+实线箭头表示
1、2 表示一端的类能有多少个实例,这里是因为鸟有两个翅膀
class Bird { private Wing wing; public Bird() { wing = new Wing(); } }
依赖关系:
依赖(Dependency)是类和类之间的连接,依赖总是单向的。依赖关系表示一个类依赖于另一个类的定义。比如一个人(Person)可以买车(Car)和房子(House),Person依赖于Car和House。
依赖关系在Java语言中体现为局部变量、方法参数,以及对静态方法的调用。换而言之,一个类 A 的某个局部变量的类型是另一个类 B,那么说A依赖于B。如果类A的一个方法参数是类B,或者类A调用另一个类B的静态方法,那么都是A依赖于B。
如果类B出现在类A的实例变量中,那么A与B就超越了依赖关系,而变成某一种关联关系。
用虚线箭头表示
abstract class Animal { public Metabolism(Oxygen oxygen, Water water){ } }
箭头永远指向被调用。
重点区别
关联关系: 类与类之间的联接,它使一个类A知道另一个类B的属性和方法。但不是A类的一部分。如 驾驶员-汽车、唐僧-徒弟。
聚合关系: 强的关联关系,聚合是整体和个体的关系。 如 汽车-引擎、雁群-大雁、美猴王-金箍棒。
合成关系: 比聚合更强的关联关系,要求整体的对象负责代表部分的对象的生命周期。如 人-四肢。