|
UML用关系把事物结合在一起,UML中的关系主要有四种。
|
|
|
(1)依赖(dependencies):两个事物之间的语义关系,其中一个事物发生变化会影响另一个事物的语义。
|
|
|
(2)关联(association):一种描述一组对象之间连接的结构关系,如聚合关系(描述了整体和部分间的结构关系)。
|
|
|
(3)泛化(generalization):一种一般化和特殊化的关系,描述特殊元素的对象可替换一般元素的对象。
|
|
|
(4)实现(realization):类之间的语义关系,其中的一个类指定了由另一个类保证执行的契约。
|
|
|
|
两个用例之间的关系可以概括为两种情况。一种是用于重用的包含关系,用构造型<>或<
|
|
|
(1)包含关系:当可以从两个或两个以上的原始用例中提取公共行为,或者发现能够使用一个构件来实现某一个用例很重要的部分功能时,应该使用包含关系来表示它们。其中这个提取出来的公共用例称为抽象用例。
|
|
|
例如,软考在线图书订单处理系统中,“创建新订单”和“更新订单”两个用例都需要检查客户的账号是否正确,为此定义一个抽象用例“核查客户账户”。用例“创建新订单”和“更新订单”与用例“核查客户账户”之间的关系就是包含关系。
|
|
|
(2)扩展关系:如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种事情,则可以将这个用例分为一个主用例和一个或多个辅用例进行描述可能更加清晰。
|
|
|
例如,软考在线图书管理系统中,读者归还图书时,需要判断当前日期是否已经超过了图书借阅的周期。如果超过了借阅周期,则必须罚款。“归还图书”和“罚款”用例之间的关系就是扩展关系。
|
|
|
用例之间还存在一种泛化关系。用例可以被特别列举为一个或多个子用例,这被称做用例泛化。当父用例能够被使用时,任何子用例也可以被使用。例如,购买飞机票时,既可以通过电话订票,也可以通过网上订票,则订票用例就是电话订票和网上订票的泛化。
|
|
|
|
(1)关联关系。描述了给定类的单独对象之间语义上的连接。关联提供了不同类之间的对象可以相互作用的连接。其余的关系涉及类元自身的描述,而不是它们的实例。用“————”表示。
|
|
|
(2)依赖关系。有两个元素X、Y,如果修改元素X的定义可能会引起对另一个元素Y的定义的修改,则称元素Y依赖于元素X。在UML中,使用带箭头的虚线“”表示依赖关系。
|
|
|
在类中,依赖由各种原因引起,例如,一个类向另一个类发送消息;一个类是另一个类的数据成员;一个类是另一个类的某个操作参数。如果一个类的接口改变,则它发出的任何消息都可能不再合法。
|
|
|
(3)泛化关系。泛化关系描述了一般事物与该事物中的特殊种类之间的关系,也就是父类与子类之间的关系。继承关系是泛化关系的反关系,也就是说子类是从父类继承的,而父类则是子类的泛化。在UML中,使用带空心箭头的实线“”表示泛化关系,箭头指向父类。
|
|
|
(4)聚合关系。聚合是一种特殊形式的关联,它是传递和反对称的。聚合表示类之间的关系是整体与部分的关系。例如一辆轿车包含四个车轮、一个方向盘、一个发动机和一个底盘,就是聚合的一个例子。在UML中,使用一个带空心菱形的实线“”表示聚合关系,空心菱形指向的是代表“整体”的类。
|
|
|
(5)组合关系。如果聚合关系中的表示“部分”的类的存在与否,与表示“整体”的类有着紧密的关系,例如“公司”与“部门”之间的关系,那么就应该使用“组合”关系来表示这种关系。在UML中,使用带有实心菱形的实线“”表示组合关系。
|
|
|
(6)实现关系。将说明和实现联系起来。接口是对行为而非实现的说明,而类中则包含了实现的结构。一个或多个类可以实现一个接口,而每个类分别实现接口中的操作。实现关系用带空心箭头的虚线“”表示。
|
|
|
(7)流关系。将一个对象的两个版本以连续的方式连接起来。它表示一个对象的值、状态和位置的转换。流关系可以将类元角色在一次相互作用中连接起来。流的种类包括变成(同一个对象的不同版本)和复制(从现有对象创造出一个新的对象)两种。使用带箭头的虚线“”表示。
|
|
|
对于聚合关系和组合关系,各种文献的说法有些区别。在这些文献中,首先定义聚集关系(整体与部分的关系),然后再把聚集关系分为两种,分别是组合聚集(相当于上述的“组合关系”)和共享聚集(相当于上述的“聚合关系”)。
|
|
|