2024年5月26日发(作者:)

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

1.1 跟我学UML建模工具StarUML(第11部分)——应用StarUML创建

顺序图的创建示例

1.1.1 UML动态建模相关技术及应用

1、动态建模相关的技术

(1)在软件系统静态模型的基础上建立出相应的动态模型

在建立出软件系统的静态模型基础上,软件系统的分析和设计人员接下来就需要分析

和设计软件系统的动态结构,并且建立出相应的动态模型。

因为软件系统的动态模型描述了软件系统随时间变化的行为,这些行为是用从静态模

型视图中抽取出的系统瞬间值的变化来描述的。

(2)动态模型的主要内容

软件系统的动态模型主要包括UML顺序图、协作图、状态图、活动图,这些模型图便

于分析软件系统的功能行为、印证和修改软件系统的静态结构,满足软件系统用户的功能

和非功能性的需求,最终达到满足软件系统的功能目标。

2、交互图----可以对共同工作的对象群体的行为建模

(1)交互图——主要包括协作图 和 顺序图

交互图主要用于定义软件系统如何实现相关功能的;因为它们能够逐步地显示用例的

主要流程,这包括:在流程中需要什么对象、对象相互发送什么消息、什么角色启动流程、

消息按什么时序发送等方面的信息。

(2)交互图中的“交互”含义

它描述了一个交互,由一组对象和它们之间的关系所组成,这包括在对象间传递的信

息。

(3)顺序图和协作图的不同点

1)时序图(顺序图)

它强调消息时间顺序的交互图,描述类系统中类和类之间的交互,将交互建模成消息

交换。下图为某个银行项目中用户取钱的顺序图示例:

杨教授大学堂,版权所有,盗版必究。 1/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

2)协作图

和时序图一样,协作图也显示用例中特定情形的流程。但时序图按时间排序,而协作

图则着重于对象之间的关系。

(4)顺序图和协作图示例

1)下面为一个软件系统中的用户注册的顺序图

2)而下面则为与前面的用户注册的顺序图相对应的协作图。

杨教授大学堂,版权所有,盗版必究。 2/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

可以看出,协作图与时序图中的信息相同,但协作图显示了不同的流视图,在这个框

图中,更容易看出对象之间的关系,但对象顺序信息则不够明显。为此,可以对一个情景

同时创建时序图和协作图。尽管他们的作用相同,包含相同的信息,但视图有所不同。

3、对象间的交互——消息

(1)什么是消息

所谓的消息是由一个对象发送并由另一个对象接收的已命名的对象,在UML的四个动

态模型中均用到消息这个概念。

杨教授大学堂,版权所有,盗版必究。 3/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

(2)消息传递

在面向对象技术中,对象间的交互是通过对象间消息的传递来完成的。通常,当一个

对象调用另一个对象中的功能操作方法时,即完成了一次消息的传递。当功能操作执行完

毕后,控制便返回到调用者。下图为在Rose工具中产生各种消息的工具按钮示图:

(3)通过消息进行合作

对象通过相互间的通信(消息传递)进行合作,并在其生命周期中根据通信的结果不断

杨教授大学堂,版权所有,盗版必究。 4/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

地改变自身的状态。

4、消息的UML图形表示

(1)在UML中,消息的图形表示是用带有箭头的线段将消息的发送者和接收者联系起来,

箭头的类型表示消息的类型、方向为从源对象指向目标对象,其上标有内容标签。

(2)同步消息用带三角箭头的实箭线表示如图:

(3)异步消息用带半叉箭头的实箭线表示。

杨教授大学堂,版权所有,盗版必究。 5/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

5、消息的类型

(1)简单消息(Simple Message)

消息在单个控制线程中运行。用于描述控制如何在对象间进行传递,而不考虑通信的细

节。

(2)同步消息(Synchronous Message)

调用者发出消息后必须等待消息返回,只有当处理消息的操作执行完毕后,调用者才可

继续执行自己的操作。

杨教授大学堂,版权所有,盗版必究。 6/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

将产生出下面的同步消息:

(3)异步消息(Asynchronous Message)

当调用者发出消息后不用等待消息的返回即可继续执行自己的操作。异步消息主要用

于描述实时系统中的并发行为,比如采用AJAX技术实现的消息。

杨教授大学堂,版权所有,盗版必究。 7/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

将产生出下面的异步消息:

1.1.2 UML动态建模中的顺序图

1、顺序图(序列图)

(1)什么是顺序图

顺序图作为交互图中的一种,它显示参与交互作用的参与者或对象,以及它们生成的

按时间排序的事件。顺序图能够显示特定用例实例产生的事件并且侧重描述消息在对象之

间如何传送等方面的信息。

顺序图由于是按时间顺序对控制流进行建模,因此主要用于对用例中的控制流的建模。

它显示出随着时间的变化对象之间是如何通信。

(2)顺序图主要的作用

杨教授大学堂,版权所有,盗版必究。 8/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

1) 按时间顺序对控制流建模,主要用于对用例中的控制流的建模——体现用例的实现

过程。

2) 它显示出随着时间的变化对象之间是如何通信的,同时也清楚地表示在实现某个用

例时所涉及的各个类。

由于顺序图表示了时间序列,便于分析交互的时序,但没有表示静态对象关系。它可

以有效地帮助人们观察系统的顺序行为。因此,顺序图非常适用于表示面向对象应用程序

中消息流的交互。

顺序图反映了参与者与系统之间的交互,以销售为例,参与者为收银员,场景中对象

有登录界面以验证权限、库存查询接口,用以判断库存中是否有数据、销售处理接口,其

结果是从库存中减掉对应数量的图书。如下示图为某个项目中的图书销售顺序图示例:

2、顺序图中的各个坐标的含义

(1)序列图中的纵向维代表时间,按时间先后依次向下排序。

(2)横向维则代表不同的主角或对象。

杨教授大学堂,版权所有,盗版必究。 9/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

3、顺序图中的组成

序列图包含如下的模型元素:对象、消息、生命线、激活期(点)。

4、顺序图面向不同的人员所起的作用

(1)软件系统的用户

软件系统的用户从中可以看到业务实现过程的细节(因为每个用例则通过顺序图中的

一个或者多个场景来精确描述)

(2)软件系统的分析人员

软件系统的分析人员从中看到处理流程,因为序列图着重体现对象间消息传递的时间

顺序。

(3)软件系统的开发实现人员

软件系统的开发实现人员看到需要开发的对象和它们的操作,因为对象间的通信通过

在对象的生命线之间画出消息来表示。

(4)软件系统的测试相关人员

软件系统的测试人员能够通过顺序图看到过程的细节,并根据这个过程开发出测试用

例。

5、顺序图的组成元素及示例

(1)顺序图的组成元素

顺序图中的生命线、激活点是序列图所特有的图形元素,用于表现对象之间的交互与

消息的时间顺序。

杨教授大学堂,版权所有,盗版必究。 10/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

(2)某个项目中的学生课程请求的顺序图示例

注意:

1) 浏览序列图的的方法是:从上到下查看对象之间交换的消息。顺序图注重的是消息

的顺序而不是对象间的关系。

杨教授大学堂,版权所有,盗版必究。 11/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

2) 通过顺序图可以捕获用参与者在完成某一功能时所可能会发生的各个事件,以及各

个事件之间的前后关系

6、顺序图中的各个组成的部件元素及主要的作用

(1)对象类角色

1)对象类角色代表参与交互的对象。其UML的表示方法为一个矩形框并且写有对象

的名称(它的后面可以跟冒号“:”及类名,对象名可以匿名——“:类名”的形式)同时

加下划线。

2)UML 中的对象类命名标准按照如下格式:

实体名:类名

3)对象类角色的位置一般位于顺序图顶部。

(2)生命线在UML中的表示法

生命线画作一个方格,一条虚线从上而下,通过底部边界的中心并且生命线所代表的

对象名字放置在方格里。时间从上到下,生命线显示了消息的顺序。在生命线上的消息比

在其下的消息先发生。如下图所示:

杨教授大学堂,版权所有,盗版必究。 12/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

1.1.3 顺序图中消息的类型及在UML中的表示法示例

1、顺序图中的消息表示法

(1)生命线之间的箭头表示正在对象间传递的消息,为了可读性,顺序图的第一个消息总

是从顶端开始,并且一般位于图的左边。然后继发的消息加入图中,稍微比前面的消息低

些。

(2)顺序图中的消息可以是信号(Signal)、操作调用或类似于C++中的RPC(RemoteProce

dure Calls)和Java中的RMI(Remote Method Invocation)方法名称。

(3)当收到消息时,接收对象立即开始执行活动——即对象被激活了。通过在对象生命线

上显示一个细长矩形框来表示激活。

(4)消息可以用消息名及参数来标识。

杨教授大学堂,版权所有,盗版必究。 13/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

2、调用消息和返回消息

(1)调用的消息表示是从左生命线向右生命线传递

是指前一个对象对后一个对象的调用,箭头上方的文字是被调用对象(箭头指向的一

方)的操作。

(2)一个返回消息画作一个带开放箭头的虚线,向后指向来源的生命线,在这条虚线上面,

可以放置操作的返回值(请见下面的说明)

(3)给对象自身传递一个消息(对象调用自己的方法)

为了要画一个调用本身的方法的对象消息(即不是连接它到另外的一个对象,而是把

消息连接回对象本身),即给对象自身发送消息——此时,消息符号从该对象引出,最后又

返回到该对象。

杨教授大学堂,版权所有,盗版必究。 14/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

(4)带有条件的消息——在消息上面给出条件的表达式

3、顺序图中的激活期

(1)激活期的含义

激活期表示对象执行一个动作的期间,即对象激活的时间段-----当收到消息时,接收对

象立即开始执行活动,即对象被激活了。

(2)在UML中的表示法

通过在对象生命线上显示一个细长矩形框来表示激活。

(3)应用要点

1) 当一个对象在激活期时,该对象处于激活状态,能够响应或发送消息,执行动作、

活动。

2) 当一个对象不在激活期时,该对象处于休眠状态,什么事都不做,但它仍然存在,

等待新的消息来激活它。

4、在顺序图中创建对象

(1)对象的创建

在顺序图中可以描述如何创建和删除对象,并把它作为描述情节的一部分。一个对象

可以通过一条消息(一般为同步消息)来创建另一个对象,采用被一个终止于对象框的箭

头所标示。

杨教授大学堂,版权所有,盗版必究。 15/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

如下面的示例中的“货品”对象

注意:此时在Rose开发工具中应该将对象拖到下面来。

5、在顺序图中删除对象

被创建的对象的对象符号放在创建它的地方(在纵座标的时间轴上),当一个对象被删

杨教授大学堂,版权所有,盗版必究。 16/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

除后,用一个大“X”来标记(此时,对象的生命线只需要划到对象被删除时为止)。

6、用顺序图对控制流建模的建模步骤

(1)首先确定交互上下文

设置交互的语境,这些语境可以是系统、子系统、操作、类、用例和协作的一个脚本

等。

(2)然后再找出参与交互的类角色(通过识别对象在交互中扮演的角色),将其横向排列

在顺序图顶部(根据对象的重要性,将其从左向右的方向放在时序图中)。

(3)对每一个对象设置一条垂直向下的生命线(一般情况下,对象存在于交互的整个过程,

但它也可以在交互过程中创建和撤销)。从初始化交互的消息开始,自顶向下在对象的生命

线之间安置消息。

(4)继续在生命线上绘制出对象的激活期,以及对象创建或销毁的构造型和标记。

(5)最后根据消息之间的关系,确定循环结构及其循环参数和出口条件(给某控制流的每

个消息附上前置或后置条件,这可以更详细化的说明这个控制流)。

7、绘制顺序图时所应该要注意的相关要点

(1)尽力保持消息的顺序从左到右排列。

(2)用和用例图中一致的名称命名参与者(在Rose中可以直接从用例图中拖动参与者),

同时也应该用和类图中一致的类名称来命名顺序图中的各个类(在Rose中可以直接从

Logical View图中拖动所需要的各个类)。

杨教授大学堂,版权所有,盗版必究。 17/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

(3)在图的最左边放置初始的角色或者在图的最左边放置人和组织角色,而在图的最右边

放置系统角色。

(4)把消息名放在箭头旁边,同时为涉及人和组织角色的消息使用叙述性文字。尽力保持

消息的顺序是从左到右排列的。一个顺序图的消息流开始于左上方,消息乙的位置比消息

甲低,这意味着消息乙的顺序比消息乙要迟。

8、某个项目中的顺序图示例

(1)用户登录的顺序图示例

(2)用户注册的顺序图示例

杨教授大学堂,版权所有,盗版必究。 18/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

1.1.4 在StarUML中创建顺序图的应用示例

1、在StarUML中新建一个名称为“用户登录系统的顺序图”的顺序图

(1)添加顺序图

杨教授大学堂,版权所有,盗版必究。 19/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

此时在左边的Toolbox工具箱中将出现与顺序图相关的各个工具按钮:

(2)命名为“用户登录系统的顺序图”

杨教授大学堂,版权所有,盗版必究。 20/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

2、在该顺序图中添加名称为“后台系统维护人员”的参与者

从前面的用例分析时所创建的参与者包中将目标参与者直接拖入文档窗口中,如下示

图为结果。

3、在该顺序图中添加各个组件类——将各个组件类拖入文档窗口中。

(1)表示层组件类userLogin

(2)控制层组件类userManageAction

杨教授大学堂,版权所有,盗版必究。 21/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

(3)业务层组件类userManageBean

(4)数据访问层组件dataAccessObjectBean

4、将顺序图中的各个组件元素中的“LinelifeX”的生命线提示文字隐藏以保证图的简洁

只需要选中组件元素,然后在右边的“Properties”属性面板中的Name栏中删除相关的

“LinelifeX”的生命线提示文字。

最后的处理结果示图如下:

杨教授大学堂,版权所有,盗版必究。 22/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

5、在参与者和表示层组件之间设置发送的消息

(1)产生消息的工具按钮

(2)添加发送消息

杨教授大学堂,版权所有,盗版必究。 23/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

(3)设置消息的名称(目标类中的方法的名称),本示例为doSubmit()方法

(4)将产生出下面的结果状态

6、继续完成其它层组件之间的发送消息的设置定义

(1)表示层和控制层之间的proccess消息

(2)控制层和业务层之间的executeLogin消息

杨教授大学堂,版权所有,盗版必究。 24/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

(3)业务层和数据访问层之间的checkUserLogin消息

(4)最后的结果示图如下

7、设置返回消息及命名返回的消息名称

(1)数据访问层向业务处理层返回userInfoBean对象

杨教授大学堂,版权所有,盗版必究。 25/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

(2)业务处理层向控制层返回boolean布尔状态量

(3)控制层向表示层已经参与者返回“成功或失败”的提示信息

(4)最终的结果示图

杨教授大学堂,版权所有,盗版必究。 26/27页

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料

杨教授大学堂,版权所有,盗版必究。 27/27页