顺序图和协作图

顺序图
1、顺序图的定义
2、顺序图的符号
3、顺序图的消息
4、顺序图的其他技术
5、帧化顺序图
6、顺序图的建模方法

在标识出系统的类图之后,仅给出了实现用例的组成结构,这时还需要描述这些类的对象是如何交互来实现用例功能的。即不但需要把用例图模型转化为类图模型,还要将它转化为交互图模型。
交互图表示类(对象)如何交互来实现系统行为。交互图具有顺序图和协作图两种形式。

1、顺序图
它描述对象按时间顺序的消息交换过程,它体现出系统用例的行为
2、协作图
它描述对象间的组织协作关系,它也可体现出系统用例的行为。

顺序图的符号
顺序图有四个主要的标记符:
1、活动对象2、生命线3、激活4、消息
活动对象:活动对象可以是系统的参与者或者任何有效的系统对象。对象是类的实例,它使用包围名称的矩形框来标记。名称带下划线,顺序图中对象标记符如下图所示
生命线:顺序图中垂直方向代表时间维,时间流逝的方向为自顶向下。靠近顶部的消息发生的时间要比靠近底部的消息早。
因此,顺序图是二维的。自左至右的维数代表对象的布局,自顶向下的维数代表时间的流逝。
每个对象的生命线都是一条从对象向下的虚线。表示对象的存在时间。
激活:在生命线上的窄矩形条称为激活。激活表示该对象正在执行某个操作。激活矩形的长度表示出激活的持续时间。
消息:消息用来说明顺序图中不同活动对象之间的通信。它可在一个对象需要取消不同对象的进程时或者需要向另一个对象提供服务时,使用消息。
消息从活动对象生命线到接受对象生命线的箭头表示。箭头上面标记要发送的消息,如下图所示。
消息的限定:消息可以包含条件以便限制它们只在满足条件时才能发送。条件显示在消息名称上面的方括号中。
右图示例演示了如何建立一个顺序图来显示登录尝试。如果登录失败,会在放弃登录之前重试一次,如下图所示
消息的种类
在UML中,总共有4中消息,如下图所示
1、同步消息:同步消息代表一个操作调用的控制流。同步消息的发送者把控制传递给消息的接收者,然后暂停活动,等待消息接收者的应答,收到应答后才继续自己的操作。
2、异步消息
3、简单消息
4、返回消息
创建对象:创建对象的标记符如下图中的示例所示。有一个主要步骤用来把"create"消息发送给对象实例。对象创建之后就会具有生命线,就像顺序图中的任何其他对象一样。现在可以像顺序图中的其他对象那样来使用该对象发送和接受消息。在处理新创建的对象,或者处理顺序图中的任何其他对象时,都可以发送"destroys"消息来删除对象。若要想说明某个对象被销毁,需要在被销毁对象的生命线上放一个X字符。
分支和从属流:有两种方式来修改顺序图的控制流:使用分支和使用从属流。这两种方式很相似,各自的标记符略微不同。控制流的改变是由于不同的条件导致控制流走向不同的道路。
分支允许控制流走向不同的对象
注意消息的开始位置是相同的,分支消息结束"高度"也是相等的。这说明在下一步中,其中之一将会执行
从属流还允许控制流根据条件改变,但是只允许控制流改变为相同对象的另一条生命线分支

帧是UML2.0对顺序图新增内容之一,一旦被包含在一个帧里,UML图就可以放在另外的帧或图里,从而实现UML图的重用。
帧化一个顺序图的方法:用一个边框包围它并在左上角添加一个间隔区。这个间隔区包含了识别该顺序图的信息。
间隔区其中的一小段信息是操作符,就是描述了帧中的图的类型的表达式。对于一个顺序图,操作符是sd

交互事件:如果为一个用例的多个场景创建实例顺序图,你会注意到图和图之间的相当一部分内容是重复的。帧化的方法使用户能够在一张顺序图中快速容易地复用另一张顺序图的部分内容。
方法是先在一部分图的周围绘制一个帧,标记出帧的隔离区,然后只要把带有标记的帧(不需要绘制消息和生命线)插入到一个新图中就可以复用了。这个特定的帧化的部分叫做交互事件,它的操作符是ref


顺序图的建模方法
1、确定需要建模的工作流
2、从左到右布置对象
3、添加信息和条件以便创建每一个工作流
4、绘制总图以便连接各个分图
(1)确定工作流
建模顺序图的第一步是确定将要建模的工作流。对于这个练习,我们将要建模Grading system的View Grades用例。为此,需要至少标识出3个要建模的工作流:
1.教师成功地检查学生分数
2.教师试图检查某个学生分数,但该学生在系统中不存在
3.教师试图检查某个学生分数,但该学生分数在系统中不存在。
(2)布置对象
建模顺序图的下一步是从左到右布置所有的参与者和对象,包含要添加消息的对象生命线,如下图所示。
(3)添加消息和条件
接下来,对每一个工作流作为独立的顺序图建模。从基本的工作流开始,它是没有出错条件,并且需要最少决策的工作流。注意选择适当的消息类型(异步、同步、简单和返回)。在本例中,基本工作流是教师成功地检查某个学生的分数(第一个工作流)
(4)绘制总图
建模顺序图的最后一步是把所有独立的工作流连接为一个总图,如下图所示。
在此阶段,如果觉得前面的消息和交互对于当前的顺序图过于详细,可以让他们更加泛化一些,但是在软件建模的下一个阶段,就会觉得初始的各个顺序图越详细越好。


协作图
协作图描述对象之间的关联及其它们彼此之间的消息通信。要想使由类构成的系统具有功能,这些类的实例(对象)需要彼此通信和交互。协作图除了展示出对象之间的关联,还显示出对象之间的消息传递。

协作图和顺序图的区别
顺序图和协作图都可以表示对象间的交互关系,但他们的侧重点不同,顺序图强调的是交互的时间顺序,协作图强调的是交互的语境和参与交互的对象的整体组织。还可以从另一个角度来看两种图的定义:顺序图按照时间顺序布图,而协作图按照空间组织布图。

协作图描述
协作图描述对象之间的关联结构以及它们之间的交互,以便展示用例的动能行为。协作图中包括的建模元素有对象(包括参与者实例、多对象、主动对象)、消息、链等。
对象
对象这个概念前面已经多次提到,这里主要强调多对象和主动对象
多对象
在协作图中,多对象指的是由多个对象组成的对象集合,一般这些对象是属于同一类的。当需要把消息同时 发送给多个对象而不是单个对象时,就要用多对象这个概念。多对象用多个方框的重叠表示。
多对象的例子
一个对象可能会向同一类的多个对象同时发送一个消息,例如,老师会让多个学生同时交作业。在多对象前面可以加上用方括号括起来的条件,前面加一个星号,用来说明消息发送给多个对象
主动对象
主动对象是一组属性和一组方法的封装体,其中至少有一个方法不需要接受消息就能主动执行(称为主动方法)。也就是说,主动对象可以再不接受外部消息的情况下自己开始一个控制流。在协作图中,主动对象的表示法除了矩形框边界要加黑加重外,其他方面与一般对象的表示法相同。

链用来在协作图中关联对象。它们代表一个来自类图的关联的实例
在协作图中,消息显示在链的旁边,一个链上可以有多个消息。在链上可以加一些修饰,如角色名、导航(表示链是双向还是单向)、链两端的对象是否有聚集关系等,但由于链是连接对象的,所以链的两端没有多重性标记。
消息
消息是协作图中对象与对象之间通信的方式。消息在协作图中显示为一个伴随链接或者关联角色的文本字符串,并带有一个箭头来指示消息沿着关系传递的方向。

消息的返回结果
消息可能是要求某个对象进行计算并返回结果的值,UML提供了返回值的表示法。返回值的名字在最左,后跟赋值号"=",接着是操作名和操作的参数。对计算商品价格这个例子,可以表示成:
返回值totalPrice:=compute(itemPrice,salesTax)
消息的种类
协作图中有3种类型的消息,它们与前面介绍顺序图时的消息类型相同:
1、同步消息 用于对象同步通信,即对象通信在继续下一步之前必须完成前一步
2、异步消息 用于对象异步通信
3、简单消息 指示消息类型是同步或异步对于模型不重要
消息的序列化
要想序列化消息,只需在消息前添加序列ID号。最简单的方法就是把消息按照要执行的顺序排序,如下图所示。
协作图的建模方法
协作图的建模有3个基本的步骤
1)确定属于协作图的元素
2)建模这些元素之间的结构关系
3)建模实例层的协作图
建模分数记录系统的协作图。具体用例是Teacher使用Website登录并且查看学生的分数。
1、确定协作图的元素
首先,确定协作图中将会包含的元素或者类。从已经描述的用例中可以确定需要Teacher、Student和Grade类,其他类是否需要不太清楚了
对于分数记录系统,我们需要一个Website类来提供进行交互的场所。还需要一个Database类来提供学生检索信息的功能。最后,还需要一个Security类提供让Teacher登录系统的手段
Teacher 类如何与Student类交互?Student类从哪里获取其数据?Teacher类如何登录系统?通过这些问题和其他问题,我们就会认识到需要更多的类才能完成目标。
2、建模类之间关系
下一步就是确定这些类之间的关系。在这一步中,着手建模早期阶段的协作图,在类角色之间添加链接和关联角色。
3、建模实例层协作图
最后一步就是在实例层建模协作图。这意味着需要把类角色修改为对象实例,并且制定执行用例的消息序列。这一步需要用到描述对象之间链接的消息标记符,包括控制点、迭代、创建实例,以及特定消息类型的规范。


你可能感兴趣的:(UML)