UML中的图
UML包括九种图:使用案例图、类图、对象图、构件图、部署图、活动图、协作图、状态图、序列图。在这些图中使用案例图、类图、序列图是最有用的。
根据其用意,可以将其划分为结构型图和行为型图两种。
结构型图:描述系统的静态结构。在显示系统中类及类之间的关系时最有用。
行为型图:描述系统的动态性质。在显示系统中元素如何协作产生满足要求的系统行为方面是最有用。
结构型图
显然,要描述一个设计模式的静态结构,使用类图和对象图是很合适的。
行为型图
显然,要描述一个设计模式的行为特征,使用状态图和时序图是很合适的。
应当指出的是,一个使用UML的系统设计,往往是从使用案例图开始的,而且是一个设计应当是使用案例驱动的。
UML中的关系
在UML中有4种关系:
(1)依赖关系
依赖(dependency)是两个模型元素间的语义关系,其中一个元素(独立元素)发生变化会影响另一个元素(依赖元素)的语义(也就是说“独立元素”中引用了“依赖元素”)。在图形上,把依赖画成一条可能有方向的虚线,偶尔在其上还带有一个标记如图2-15所示。
(独立元素)(依赖元素)
图2-14 依赖关系
(2)关联关系
关联(association)是类之间的结构关系,它描述了一组链,链是对象(类的实例)之间的连接。聚合是一种特殊类型的关联,它描述了整体和部分间的结构关系。在图形上,把关联画成一条实线,它可能有方向,偶尔在其上还带有一个标记,而且它还经常含有诸如多重性和端名这样的修饰,如图2-15所示。关于关联我们将在下面进一步详述。
图2-15 关联
(3)泛化关系
泛化(generalization)是一种特殊/一般关系,在其中特殊元素(子元素)基于一般元素(父元素)而建立。用这种方法,子元素共享了父元素的结构和行为(也就是说“子元素”继承了“父元素”)。在图形上,把泛化关系画成一条带有空心箭头的实线,该实线指向父元素,如图2-16所示。
(子元素)(父元素)
图2-16 泛化关系
(4)实现关系
实现(realization)是类目之间的语义关系,其中的一个类目指定了由另一个类目保证执行的合约。在两种地方会遇到实现关系:一种是在接口和实现它们的类或构件之间;另一种是在用况和实现它们的协作之间。在图形上,把实现关系画成一条带有空心箭头的虚线,它是泛化和依赖关系两种图形的结合,如图2-17所示。
(实现)(接口)
图2-17 实现关系
泛化关系(一般化关系):表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化关系是子类指向父类的,或从实现接口的类指向被实现的接口,与继承或实现的方向相反。如下图所示:
图:一般化关系
关于UML图中的关联
关联关系是类与类之间的联接,它使一个类知道另一个类的属性和方法。关联关系包括单向关联、双向关联、聚合关联、合成关联、反射关联关系。
可能的多重值描述 |
表示 |
含义 |
0..1 |
0个或1个 |
1 |
只能1个 |
0..* |
0个或多个 |
* |
0个或多个 |
1..* |
1个或我个 |
3 |
只能3个 |
0..5 |
0到5个 |
m..n |
m到n个 |
|
表:多重值和它们的表示
单向关联:在一个单向关联中,两个类是相关的,但是只有一个类知道这种联系的存在。图7 显示单向关联的透支财务报告的一个实例。
图7 :单向关联的透支财务报告
双向关联:两个类彼此知道它们间的联系,除非你限定一些其它类型的关联。图 6 显示了在Flight类和Plane类之间的的双向关联。
图 6 在Flight类和Plane类之间的双向关联
聚合关联:有聚合关系的关联指出,某个类是另外某个类的一部分。在一个聚合关系中,子类实例可以比父类存在更长的时间。为了表现一个聚合关系,画一条从父类到部分类的实线,并在父类的关联末端画一个未填充棱形。图12 显示车和轮胎间的聚合关系的例子。
图12 车和轮胎间的聚合关系
合成关联(组合聚合关系):组合聚合关系是聚合关系的另一种形式,但是子类实例的生命周期依赖于父类实例的生命周期。在图13中,显示了Company类和Department类之间的组合关系,注意组合关系如聚合关系一样绘制,不过这次菱形是被填充的。
图13:Company类和Department类之间的组合关系
反射关联:类也可以使用反射关联与它本身相关联。起先,这可能没有意义,但是记住,类是抽象的。图14 显示一个Employee类如何通过manager / manages角色与它本身相关。当一个类关联到它本身时,这并不意味着类的实例与它本身相关,而是类的一个实例与类的另一个实例相关。
图14 :Employee类通过manager / manages角色与它本身相关
标志 |
可见性类型 |
+ |
Public |
# |
Protected |
- |
Private |
~ |
Package |
表4:UML支持的可见性类型的标志