2007年11月1日星期四

UML_001:UML中的类图 Class Diagram (摘录+整理)

1. 定义
类图是用来表示类、接口以及它们之间的静态关系的图。在进行Java类设计时,非常有用。

类图中从上到下包括:
(1)类名:正体字,可实例化的具体类;斜体字,抽象类;带有"interface"字样,接口类。
(2)属性列表:+ 表示public;- 表示 private;# 表示 protected,i 表示 internal
(3)方法列表:+ 表示public;- 表示 private;# 表示 protected。带下划线,表明是静态方法。
(4)性质列表:同属性类似,只不过该属性具有getter和setter方法。
2. 类图中的关系(1)一般化(Generalization)关系
表示类之间的继承关系;
表示接口之间的继承关系;,接口与类之间的实现关系。
继承(extends)关系:三角形箭头+实体线,子类指向父类。
实现(implements)关系:三角形箭头+虚线,实现接口的类指向被实现的接口。
(2)关联(Association)关系
在Java中,关联关系是用实例变量来实现的,即在类A中有类型为类B的实例变量。
关联方向可以是双向的,也可以是单向的,可以有箭头或没有箭头。每个关联关系可以有一个关联名称。
在每个关联的端点,可以用基数表示两者的实例数量关系:0..1
至多有一个实例;* 任意个实例(包括零个);1 只有一个实例;1..* 至少有一个实例。
例如:驾驶员开汽车是Driver 指向 Car的单向关联关系,关联名称是Drives。
(3)聚合(Aggregation)关系
是关联关系的一种,但比关联关系更强,是整体和个体之间的关系。

与关联关系中二者平行对等的关系不同,
聚合关系中整体和个体者是处在不平等的层次上的。
整体端用菱形表示,指向个体端,用箭头表示。
例如:汽车与引擎的关系是Car 指向 Engine的聚合关系。
(4)合成(Composition)关系是关联关系的一种,但比聚合关系更强,是整体和部分之间的关系。
整体端用
用实心菱形表示,指向部分端,用箭头表示。其中,整体负责部分的生命周期。整体不存在了,部分也就不存在了;部分不能脱离整体而单独存在。例如:人体与四肢的关系是Body 指向 Limb的合成关系。
(5)依赖(Dependency)关系是关联关系的一种,表示一个类依赖于另一个类,依赖关系总是单向的。虚线 + 指向被依赖的类的箭头。
例如:人购买汽车的关系是Person 指向 Car的依赖关系。
与关联关系不同,Person类中并没有Car类型的实例变量,而是通过方法buy(Car car)来传递的。
一般来说,依赖关系在Java中体现为局部变量、方法参数,以及对静态方法的调用。
当类A的某一个局部变量类型是类B,我们说类A依赖于类B;
当类A的某一个方法参数类型是类B,我们说类A依赖于类B;
当类A调用类B的某个静态方法,我们说类A依赖于类B;

参考文献:
1. 《Java与模式》 阎宏