在软件系统中,类不是孤立存在的,类与类之间存在各种关系。根据类与类之间的耦合度从弱到强排列,UML 中的类图有以下几种关系:继承(泛化)关系、实现关系、关联关系、聚合关系、组合关系和依赖关系。其中泛化和实现的耦合度相等,它们是最强的。
1、继承(泛化)。
说明:这种关系就是面向对象语言中的继承关系,逻辑上可以用"is a"表示。
代码体现:子类继承父类。
UML符号:一条实线+空心箭头。
例子:鸟继承了动物。
class Bird:Animal //继承动物类
{
}
2、实现关系。
说明:和泛化关系相似,逻辑上也是用"is a"表示。区别在于实现关系继承一个抽象类(abstract、interface),而泛化关系继承一个具体类。
代码体现:实现接口或继承某个抽象类。
UML符号:一条虚线+空心箭头。
例子:大雁实现飞翔接口
class WideGoose : IFly
{
}
3、关联关系。
说明:是整体与部分的关系。逻辑上能用"has a"表示。
代码体现:成员变量。
UML符号:双向关联,一条实线或一条实线+两个箭头;单向关联,一条实线+一个箭头。
例子:企鹅需要“知道”气候的变化
class Penguin :Bird
{
private Climate climate; //在企鹅中,引用到气候对象
}
4、聚合关系。
说明:是整体与部分的关系,部分能脱离整体而独立存在。逻辑上能用"has a"表示。
代码体现:成员变量
UML符号:空心菱形+实线箭头
例子:每只大雁都是属于一个雁群,一个雁群可以有多只大雁
class WideGooseAggregate
{
private WideGoose [ ] arrayWideGoose;
//在雁群WideGooseAggregate类中,有大雁数组对象arrayWideGoose
}
5、合成关系(组合)。
说明:是整体与部分的关系,但部分不能脱离整体而独立存在。逻辑上能用"has a"表示。
代码体现:成员变量。
UML符号:实心菱形+实线箭头。
例子:鸟拥有两对翅膀
class Bird
{
private Wing wing;
public Bird()
{
wing=new Wing();
//在鸟Bird类中,初始化时,实例化翅膀Wing,他们之间同时生成。
}
}
6、依赖关系。
说明:是一种使用关系,即一个类的实现需要另一个类的协助。逻辑上能用"use a"表示。
尽量不要使用双向依赖。
代码体现:局部变量、方法的参数和静态方法的调用。
UML符号:一条虚线+箭头。
例子:动物依赖水和氧气
abstract class Animal
{
public Netabolism (Oxygen oxygen , Water water)
{
}
}