UML -- 深入关系
1.
概述
描述复杂关系时,对关系网的可视化,详述,构造和文档化需要一些高级特征。
UML中的关系构造块主要有4种:依赖,泛化,关联, 实现。
在语义上,泛化、关联和实现都带有依赖的含义,但它们本身都具备足够重要的意义来作为单独的类型存在。
术语:
构造型是
UML
公共机制中扩展机制提供的一种能力:构造型
(stereotype)
扩展了
UML
的词汇,允许创造新的构造块,在图形上使用
<<name>>
来进行表示。
2.
依赖dependency
依赖表明了一种使用关系。对大多数情况而言,基本的,未加修饰的依赖关系已经足够了。
但为了详细描述其含义的细微差别,UML定义了一组可以用于依赖关系的构造型。
但为了详细描述其含义的细微差别,UML定义了一组可以用于依赖关系的构造型。
共有17个构造型:
适用于和对象之间的依赖关系:
1)
绑定
(bind) 表明源对目标模板使用给定的时机参数进行实例化
2)
导出
(derive) 表明可以从目标计算出源。(比如可以从生日推导出年龄),一般用于对两个属性或关联进行建模。
3)
友元 (friend) 表明源对目标的可见性。
4)
的实例
(instanceOf) 表明源对象是目标类元的一个实例。当对类和对象之间的关系进行建模时使用。
5)
实例化
(instantiate) 表明源来创建实例(指向目标)。当要详述哪一个元素创建另一个元素的对象时使用。
6) 强类型 (powertype) 表明目标是源的强类型。当对覆盖其他类的类建模时使用。
7)
精化
(refine) 表明源比目标处于更精细的抽象程度上。当对本质上相同但处于不同抽象层次的类建模时使用。
8)
使用 (use) 表明源的语义依赖于目标的公共部分语义。
适用于包之间的依赖关系:
9)
访问 (access) 表明源包有权引用目标包中的元素
10) 引入 (import) 是一种访问,表明把目标包中的公共内容加入到源包
适用于用况之间的依赖关系:
11) 延伸 (extend) 表明目标用况延伸了源用况的行为
12) 包含 (include) 表明源用况在其指定的位置上显式的合并了另一个用况的行为。
当要把源用况分解为可复用的部件时,使用延伸和包含构造型。
适用于对象之间的交互建模:
13) 变成 (become) 表明源对象和目标对象是相同的,但后续时间点上的状态和角色不同。
14) 调用 (call) 表明源操作调用目标操作
15) 复制 (copy) 表明目标对象是源对象的精确复制,但目标对象是独立的。
适用于状态机
16) 发送 (send) 表明源向目标发送事件。
适用于子系统和模型
17) 跟踪 (trace) 表明目标是源历史上祖先。对不同模型中的元素建模时使用,比如一个用况可能跟踪到一个设计模型。
3.
泛化 generalization
泛化表明了一般事物和较特殊事物之间的关系。
一般情况下,简单的未加修饰的泛化关系已经可以满足大多数情况需要。
但为了深层次需要,定义了1个构造型和4个约束。
但为了深层次需要,定义了1个构造型和4个约束。
构造型:
实现(implementation) 表明子类继承父类的实现,但不公开和支持父类的接口,因此违背了可替换性。一个典型的例子是对C++中的私有继承建模。
注意这里的实现和四大关系之一的实现(realization)的含义并不完全相同。
约束:
1)
完全(compete) 表明给出了泛化关系中的所有子类
2)
不完全(incomplete) 表明没有给出了泛化关系中的所有子类
当要表明已经充分的描述了模型中的层次时,即使没有完全显式所有的类(注意和省略的不同), 要使用完全约束。反之是不完全。
3)
互斥(disjoint) 表明父类的对象最多以给定的子类中的一个作为类型。
4)
重叠(overlapping)表明父类的对象可能以给定的子类中的一个以上作为类型。
互斥和重叠只用于继承语境中。
4.
关联(association)
关联表明了一种结构关系。
关联有4种修饰:
1)
导航
2)
可见性(类似于类的可见性,包括表示法)
给定一个关联,默认的是一个类的对象可以看见并导航到另一个类的对象。也就是说默认是公共的。私有的可见性表明:位于关联端的对象对于关联外部的任何对象都是不可见的。保护的可见性表明:位于关联端的对象对于关联外部除了另一端的子孙之外的的任何对象都是不可见的。
3)
限定
在关联的语境中,最常见的是查找。如何识别对端的对象或者对象集?在UML中用限定符来建模。
限定符是一个关联的属性,它的值用于关联和一个对象集。把限定符画为一个于关联相连的小矩形,并把属性放于小矩形内。当然,在大多数情况下,都是源端的多重性为
*
,而目标端的为
0..1
。比如一个部门类中有多个职员类,但职员类多半只指向一个部门类。
4)
接口说明符
5)
组合 组合是聚合的一种形式,它具有强拥有关系,且整体和部分的声明周期是一致的。在整体端带有实心菱形的的简单关联修饰
6)
关联类 在两个类的关联中,关联本身也可有特性。
在UML中,这种情况建模为关联类。关联类是一种具有类特性的关联或者具有关联的类。把关联类画称一个类符号,并用虚线链接到相应的关联上。
5.
实现 realization
实现表明了了类元之间的语义关系。
一般
在
接口和
实现
它
们
的
类
/
构件
之间或者是
在
用况和
实现
它
们
的
协
作
之间建模。
实现有两种表示方式:
1)
省略方式 用接口的棒棒糖表示法(接口为圆,链接到它的实现对象)
2)
规范方式 实现用带空心的虚线指向接口,接口用类的表示法进行表示。