用例和参与者通过互相发送信号来交互。为表示这样的交互,我们使用用例和参与者之间的通信关联关系。一个用例与一个特定参与者最多有一个通信关联关系,而一个参与者与一个特定用例也最多有一个通信关联关系,无论存在多少信号传输都是如此。此类关联关系的完整网络是系统与其环境之间的静态通信图。
通信关联关系没有给定名称。因为在用例和参与者之间只能有一个通信关联关系,所以只需要指定起点和终点就可以标识特定通信关联关系。
参与者和用例之间的线或箭头表示它们通过互相发送信号来交互。
通信关联关系的每一端都是一个角色,该角色指定了用例或参与者在关联关系中扮演的角色。 各角色用于指定关联关系的多重性和方向(请参阅下文)。
通信关联关系的每个角色表示其类型的多重性,即可以将该参与者或用例的多少个实例与其他用例或参与者的一个实例相关联。
使用角色上的文本表达式表示多重性。表达式是一个逗号分隔的整数范围列表。使用一个整数(下限值)、两个点和另一个整数(上限值)来表示范围;单个整数是有效范围,而符号“*”表示“许多”,即不限制对象数。符号“*”自身等于“0..*”,即任何数字(包括空);这是缺省值。可选的标量角色具有多重性
0..1。
可以使用时间单元约束扩大多重性。可以按时间单元期间所允许的不同实例数声明可关联的实例数,以完成此操作。该信息是很有用的,因为它可以告诉我们某个用例是否经常执行,以及每个参与者实例使用该用例的频率。
示例:
“客户”每天使用“执行事务”用例 400,000 次。每个客户每月使用该用例两次。
通信关联关系的每个角色都有一个可导航性属性,表示交互中启动通信的那一方。使用一个箭头显示可导航性。如果箭头指向用例,则在关联另一端的参与者启动与系统的交互。如果箭头指向参与者,则由系统启动与参与者的交互。使用不带箭头的线显示双向可导航性(如果用两个箭头会使图变乱)。
通信箭头定义了启动用例的参与者。对于每个通信箭头,都假设有返回消息。没有箭头的线表示双向通信。
不要将可导航性与数据流混淆;前者仅用于 显示通信的启动。例如,即使大多数数据是从系统流向客户的,仍使用一个到用例(代表系统)的箭头来显示客户的数据请求。
参与者通过发送信号与系统通信。为完全理解参与者的角色,您必须知道该参与者涉及的用例。这通过参与者和用例之间的通信关联关系来显示。
关联的多重性显示参与者的一个实例可以在同一时间与多少用例实例通信。
示例:
在回收机器系统中,每次参与者“客户”的一个实例交来一个堆积物项时,他将信号发送至用例“回收项”的关联实例。当参与者完成时,该用例打印出收据。一个客户只可以与“回收项”的一个实例通信。因此,该关联的多重性是
1。这里将系统返回的收据看成来自用例实例的响应;因此,通信关联关系不需要其他方向的可导航性。
希望将堆积物项返回至回收机器的客户将与用例“回收项”通信。
参与者因为许多原因而与用例通信,包括:
-
调用用例。参与者实例总是调用用例实例。
-
请求系统中存储的某些数据,然后用例取得这些数据并显示给该参与者。
-
通过系统对话框,更改系统中存储的数据。
-
报告在系统周围发生的、系统应进行处理的某些特定情况。
一个参与者启动一个用例。但是,用例一旦启动,它可以与几个参与者通信。可以使用用例和参与者之间的通信关联关系显示与该用例通信的参与者。 关联的多重性显示用例的一个实例可以在同一时间与参与者的多少实例通信。
用例因为许多原因而与参与者通信,包括:
-
在系统中发生的某些特别情况,参与者可能需要知道该情况。
-
用例可能需要请求参与者帮助确定某些选项是否可用。
常见但并不总是如此的一种情况是当用例将信号发送给参与者之后,它会等待其回答。应在用例中显式地描述此情形。
以下是常见可选约定,这些约定使得能够明确哪个参与者启动用例。
-
总是显示发起的参与者到用例箭头,即使该用例后来启动与发起参与者的通信也一样。这也是所显示的唯一的参与者到用例箭头。
-
可以省略从用例到参与者的箭头,或出于清晰性而包含该箭头。
|