时序图详解Word文档格式.docx
- 文档编号:17413990
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:20
- 大小:326.59KB
时序图详解Word文档格式.docx
《时序图详解Word文档格式.docx》由会员分享,可在线阅读,更多相关《时序图详解Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
图类型图名称
UML规范给图类型提供特定的文本值。
(举例来说,sd代表序列图,activity代表活
动图,usecase代表用例图)。
基础
序列图的主要目的是定义事件序列,产生一些希望的输出。
重点不是消息本身,而是消息产
生的顺序;
不过,大多数序列图会表示一个系统的对象之间传递的什么消息,以及它们发生
的顺序。
图按照水平和垂直的维度传递信息:
垂直维度从上而下表示消息/调用发生的时间
序列,而且水平维度从左到右表示消息发送到的对象实例。
生命线
当画一个序列图的时候,放置生命线符号元件,横跨图的顶部。
生命线表示序列中,建模的
角色或对象实例。
1生命线画作一个方格,一条虚线从上而下,通过底部边界的中心(图3)。
生命线名字放置在方格里。
freshman:
Student
「1
图3:
用于一个实体名为freshman的生命线的Student类的一个例子
UML的生命线命名标准按照如下格式
实体名:
类名
在如图3所示的例子中,生命线表示类Student的实体,它的实体名称是freshman。
这
里注意一点,生命线名称带下划线。
当使用下划线时,意味着序列图中的生命线代表一个类的特定实体,不是特定种类的实体(例如,角色)。
在将来的一篇文章中,我们将会了解结构化建模。
现在,仅仅评述序列图,可能包含角色(例如买方和卖方),而不需要叙述谁扮
演那些角色(例如Bill和Fred)。
这准许不同语境的图重复使用。
简单拖放,序列图的实例名称有下划线,而角色名称没有。
图3中我们生命线例子是一个命名的对象,但是不是所有的生命线都代表命名的对象。
相反的,一个生命线能用来表现一个匿名的或未命名的实体。
当在一个序列图上,为一个未
命名的实例建模时,生命线的名字采用和一个命名实例相同的模式;
但是生命线名字的位置
留下空白,而不是提供一个例图名字。
再次参考图3,如果生命线正在表现Student类的一
个匿名例图,生命线会是:
“Student同时,因为序列图在项目设计阶段中使用,有一个未指定的对象是完全合法:
举例来说,“freshman。
消息
为了可读性,序列图的第一个消息总是从顶端开始,并且一般位于图的左边。
然后继发的消
息加入图中,稍微比前面的消息低些。
为了显示一个对象(例如,生命线)传递一个消息给另外一个对象,你画一条线指向接
收对象,包括一个实心箭头(如果是一个同步调用操作)或一个棍形箭头(如果是一个异步
讯号)。
消息/方法名字放置在带箭头的线上面。
正在被传递给接收对象的消息,表示接收
对象的类实现的一个操作/方法。
在图4的例子中,analyst对象调用ReportingSystem类的
一个实例的系统对象。
analyst对象在调用系统对象的getAvailableReports方法。
系统对象
然后调用secSystem对象上的、包括参数userId的getSecurityClearanee方法,secSystem的
除了仅仅显示序列图上的消息调用外,图4中的图还包括返回消息。
这些返回消息是
可选择的;
一个返回消息画作一个带开放箭头的虚线,向后指向来源的生命线,在这条虚线
上面,你放置操作的返回值。
在图4中,当getSecurityClearanee方法被调用时,secSystem
对象返回userClearanee给系统对象。
当getAvailableReports方法被调用时,系统对象返回availableReports。
此外,返回消息是序列图的一个可选择部分。
返回消息的使用依赖建模的具体/抽象程
度。
如果需要较好的具体化,返回消息是有用的;
否则,主动消息就足够了。
我个人喜欢,无论什么时候返回一个值,都包括一个返回消息,因为我发现额外的细节使一个序列图变得
更容易阅读。
当序列图建模时,有时候,一个对象将会需要传递一个消息给它本身。
一个对象何时称
它本身?
一个纯化论者会争辩一个对象应该永不传递一个消息给它本身。
然而,为传递一个
消息给它本身的对象建模,在一些情境中可能是有用的。
举例来说,图5是图4的一个改良版本。
图5版本显示调用它的determineAvailableReports方法的系统对象。
通过表示系统传递消息“determineAvailableReports给它本身,模型把注意力集中到过程的事实上,而不
是系统对象。
为了要画一个调用本身的对象,如你平时所作的,画一条消息,但是不是连接它到另外
的一个对象,而是你把消息连接回对象本身。
图6:
表示传递到实体2的异步消息的序列图片段
约束
当为对象的交互建模时,有时候,必须满足一个条件,消息才会传递给对象。
约束在
UML图各处中,用于控制流。
在这里,我将会讨论UML1.x及UML2.0两者的约束。
在
UML1.x中,一个约束只可能被分配到一个单一消息。
UML1.x中,为了在一个序列图上
画一个约束,你把约束元件放在约束的消息线上,消息名字之前。
图7显示序列图的一个
片段,消息addStudent方法上有一个约束。
在图7中,约束是文本“[pastDueBalance=O]。
”通过这个消息上的约束,如果应收帐系统返回一个零点的逾期平衡,addStudent消息才将会被传递。
约束的符号很简单;
格式是
[BooleanTest]
举例来说,
[pastDueBalanee=0]
组合碎片(变体方案,选择项,和循环)
然而,在大多数的序列图中,UML1.x“in-line约束不足以处理一个建模序列的必需逻辑。
这个功能缺失是UML1.x的一个问题。
UML2已经通过去掉“inline约束,增加一个叫做组合碎片的符号元件,解决了这一个问题。
一个组合碎片用来把一套消息组合在一起,在一
个序列图中显示条件分支。
UML2规范指明了组合碎片的11种交互类型。
十一种中的三
种将会在基础”段落中介绍,另外两种类型将会在超越基础”中介绍,而那剩余的六种我将
会留在另一篇文章中介绍。
(嗨,这是一篇文章而不是一本书。
我希望你在一天中看完这部
分!
)
变体
变体用来指明在两个或更多的消息序列之间的、互斥的选择。
3变体支持经典的“ifthenelse
逻辑的建模(举例来说,如果我买三个,然后我得到我购买的20%折扣;
否则我得到
我购买的
10%折扣)。
就如你将会在图8中注意到的,一个变体的组合碎片元件使用框架来画。
单词“alt放
置在框架的namebox里。
然后较大的长方形分为UML2所称的操作元。
4操作元被虚线
分开。
每个操作元有一个约束进行测试,而这个约束被放置在生命线顶端的操作元的左上部。
5如果操作元的约束等于“true,”然后那个操作元是要执行的操作元。
getAmount()
T
r*
returncheck(theCheck)
amount
getBalance()1
balan匚”
alt
[balance>
=amount]addDebitTransacton(check
Number》amoint)
stprePhotoOlthe申(theCheck)noteReturnedChecIt(theCheck)
图8:
包含变体组合碎片的一个序列图片段
图8作为一个变体的组合碎片如何阅读的例子,显示序列从顶部开始,即bank对象获
取支票金额和帐户结余。
此时,序列图中的变体组合碎片接管。
因为约束"
[balanee>
=
amount]”如果余额超过或等于金额,然后顺序进行bank对象传递addDebitTransaction和
storePhotoOfCheck消息给account对象。
然而,如果余额不是超过或等于金额,然后顺序的
过程就是bank传递addInsuffientFundFee和noteReturnedCheck消息给account对象,returnCheck消息给它自身。
因为“else约束,当余额不大于或者等于金额时,第二个序列被
调用。
在变体的组合碎片中,不需要“else约束;
而如果一个操作元,在它上面没有一个明
确的约束,那么将假定“else约束。
变体的组合碎片没被限制在简单的“ifthenelse验证。
可能需要大量的变体路径。
如果
需要较多的变体方案,你一定要做的全部工作就是把一个操作元加入有序列约束和消息的长方形中。
选择项
选择项组合碎片用来为序列建模,这些序列给予一个特定条件,将会发生的;
或者,序列不发生。
一个选择项用来为简单的“ifthen表'
达式建模。
(例如,如果架上的圈饼少于五个,
那么另外做两打圈饼)。
选择项组合碎片符号与变体组合碎片类似,除了它只有一个操作元并且永不能有“else
约束以外(它就是如此,没有理由)。
要画选择项组合,你画一个框架。
文字“opt是被放
置在框架的namebox里的文本,在框架的内容区,选择项的约束被放置在生命线顶端上的左上角。
然后选择项的消息序列被放在框架的内容区的其余位置内。
这些元件如图9所示。
阅读选择项组合碎片很容易。
图9是图7的序列图片段的再加工,但是这次它使用一
个选择项组合碎片,因为如果Student的逾期平衡等于0,需要传递更多的消息。
按照图9的
序列图,如果Student的逾期平衡等于零,然后传递addStudent,getCostOfClass和
chargeForClass消息。
如果Student的逾期平衡不等于零,那么在选择项组合碎片中,序列不
传递任何一个消息。
例子图9的序列图片段包括一个选择项约束;
然而,约束不是一个必需的元件。
在高层次、抽象的序列图中,你可能不想叙述选择项的条件。
你可能只是想要指出片段是可选择的。
循环
有时候你将会需要为一个重复的序列建模。
在UML2中,为一个重复的序列建模已经
改良,附加了循环组合碎片。
循环组合碎片表面非常类似选择项组合碎片。
你画一个框架,在框架的namebox中放
置文本“loop。
在框架的内容区中,一个生命线的顶部,循环约束6被放置在左上角。
然后
循环的消息序列被放在框架内容区的其余部分中。
在一个循环中,除了标准的布尔测试外,一个约束能测试二个特定的条件式。
特定的约束条件式是写作“minint=[thenumber](例如,
“minint=1)的最小循环次数,和写作“maxint=[thenumber](例女如;
“maxint=5)的最
大循环次数。
通过最小循环检验,循环必须运行至少指定次数,而循环执行次数不能达到约
束指定的最大循环次数。
‘■4■—“JG*
图10:
循环组合碎片的一个序列图例子
在图10中显示的循环运行,直到reportsEnu对象的hasAnotherReport消息返回false。
如果循环序列应该运行,这个序列图的循环使用一个布尔测试确认。
为了阅读这个图,
你和平常一样,从顶部开始。
当你到达循环组合碎片,做一个测试,看看值hasAnotherReport
是否等于true。
如果hasAnotherReport值等于true,于是序列进入循环片断。
然后你能和正
常情况一样,在序列图中跟踪循环的消息。
超越基础
我已经介绍了序列图的基础,应该使你可以为将会在系统中通常发生的大部份交互建模。
下面段落将会介绍用于序列图的比较高阶的符号元件。
引用另外一个序列图
当做序列图的时候,开发者爱在他们的序列图中,重用存在的序列图。
7在UML2中开始,
引进交互进行"
元件。
追加交互进行的可以说是UML2交互建模中的最重要的创新。
交互
进行增加了功能,把原始的序列图组织成为复杂的序列图。
由于这些,你能组合(重用)较简单的序列,生成比较复杂的序列。
这意味你能把完整的、可能比较复杂的序列,抽象为一
个单一的概念单位。
一个交互进行元件使用一个框架绘制。
文字"
ref放置在框架的namebox中,引用的序
列图名字放置在框架的内容区里,连同序列图的任何参数一起。
引用序列图的名字符号如下
模式:
序列图名[(参数)][:
返回值]
两个例子:
1.RetrieveBorrowerCreditReport(ssn):
borrowerCreditReport
或者
2.ProcessCreditCard(name,number,expirationDate,amount:
100)
在例子1中,语法调用叫做RetrieveBorrowerCreditReport的序歹U图,传递给它参数ssn。
序歹URetreiveBorrowerCreditReport返回变量borrowerCreditReport。
在实例2中,语法调用叫做ProcessCreditCard的序列图,传递给它参数name,number,expirationdate,和amount。
然而,在例子2中,amount参数将会是值100。
因为例子2没有返回值标签,序列不返回值(假设,建模的序列不需要返回值)。
图11显示一个序列图,它引用了序列图“BalaneeLookup和“DebitAccount。
序列从
左上角开始,客户传递一个消息给teller对象。
teller对象传递一个消息给theirBank对象。
那时,调用BalaneeLookup序列图,而accountNumber作为一个参数传递。
BalaneeLookup序列图返回balanee变量。
然后检验选择项组合碎片的约束条件,确认余额大于金额变量。
在余额比金额更大的情况下,调用DebitAccount序列图,给它传递参数accountNumber和
amount。
在那个序列完成后,withdrawCash消息为客户返回cash。
11中,theirBank的生命线被交互进行BalaneeLookup隐藏了。
有时候,你为一个序列图建模,
theirBank生命线在“BalaneeLookup序列图中被引用。
UML2也指明,生命线在它自己的“BalaneeLookup序列
其中交互进行会重叠没有在交互进行中引用的生命线。
在那种情况下,生命线和正常的生命线一样显示,不会被重叠的交互进行隐藏。
在图11中,序列引用“BalaneeLookup序列图。
“BalaneeLookup序列图在图12中显
示。
因为例子序列有参数和一个返回值,它的标签位于图的namebox中按照
一个特定模式:
图类型图名[参数类型:
参数名]
[:
返回值类型]
两个例子:
1.SDBalaneeLookup(lnteger:
accountNumber):
Real
或
2.SDAvailableReports(FinancialAnalyst:
analyst):
Reports
图12举例说明例子1,在里面,BalaneeLookup序列把参数accountNumber作为序
列中的变量使用,序列图显示返回的Real对象。
在类似这种情况下,返回的对象采用序列
图13举例说明例子2,在里面,一个序列图获取一个参数,返回一个对象。
然而,在图13中参数在序列的交互中使用。
Hqwl3J
^^9MBS
■M'
MTl
hrMHa
tapMt1
mMmhw-i«
■■■*
门
前面的段落展示如何通过参数和返回值传递信息,引用另一个序列图。
然而,有另一个方法
在序列图之间传递消息。
门可能是一个容易的方法,为在序列图和它的上下文之间的传递消
息建模。
一个门只是一个消息,图形表示为一端连接序列图的框架边缘,另一端连接到生命
线。
使用门的图11和12,在图14和15中可以被看到重构。
图15的例图有一个叫做
getBalanee的入口门,获取参数accountNumber。
因为是箭头的线连接到图的框架,而箭头
连接到生命线,所以getBalanee消息是一个入口门。
序列图也有一个出口门,返回balanee
变量。
出口门同理可知,因为它是一个返回消息,连接从一个生命线到图的框架,箭头连接
框架。
组合碎片(跳转和并行)
在本文前面基础”的段落中呈现的,我介绍了变体”选择项”,和循环”的组合碎片。
跳转最常用来做模型异常处理。
图16是图8的重构,但是这次图16使用跳转组合碎
片,因为它把balanee<
amount的情况作为一个异常对待,而不是一个变体流。
要阅读图16,
你从序列的左上角开始,向下读。
当序列到达返回值“balanee的时候,它检查看看是否余额
比金额更少。
如果余额不少于金额,被传递的下一个消息是addDebitTransaction消息,而
且序列正常继续。
然而,在余额比金额更少的情况下,然后序列进入跳转组合碎片,它的消
息被传递。
一旦跳转组合的消息的已经被传递,序列不发送任何其它消息就退出(举例来说,
addDebitTransaction)。
注意有关跳转的一件重要的事是,它们只引起一个封闭交互的序列退出,不必完成图中描述的序列。
在这种情况下,跳转组合是变体或者循环的一部分,然后只是变体或循环被退出。
并行
今天的现代计算机系统在复杂性和有时执行并发任务方面不断进步。
当完成一个复杂任务需
要的处理时间比希望的长的时候,一些系统采用并行处理进程的各部分。
当创造一个序列图,显示并行处理活动的时候,需要使用并行组合碎片元件。
并行组合碎片使用一个框架来画,你把文本“par放在框架的namebox中。
然后你把框
架的内容段用虚线分为水平操作元。
框架的每个操作元表示一个在并行运行的线程。
图17可能没有举例说明做并行活动的对象的最好的计算机系统实例,不过提供了一个
容易理解的并行活动序列的例子。
序列如这样进行:
hungryPerson传递cookFood消息给
oven对象。
当oven对象接收那个消息时,它同时发送两个消息(nukeFood和rotateFood)
给它本身。
这些消息都处理后,hungryPerson对象从oven对象返回yummyFood。
总结
序列图是一个用来记录系统需求,和整理系统设计的好图。
序列图是如此好用的理由是,因
为它按照交互发生的时间顺序,显示了系统中对象间的交互逻辑。
仝.廿
参考
UML2.0SuperstructureFinalAdoptedSpecification(第8章部分)
http:
//www.omg.org/cgi-bin/doc?
ptc/2003-08-02
UML2SequeneeDiagramOverview
nceDiagram.htm
UML2Tutorial
//www.omg.org/news/meetings/workshops/UML%202003%20Manual/Tutorial7-Hogg.pdf
脚注
1在完全建模系统中,对象(类的实例)也将会在系统的类图中建模。
2当阅读这个序列图时,假定分析师登录进入系统之内。
3请注意,附着在不同的变体操作元上的、两个或更多的约束条件式的确可能同时是真,
但是实际最多只有一个操作元将会在运行时发生(那种情况下变体的“wins没有按照UML
标准定义)。
4虽然操作元看起来非常象公路上的小路,但是我特别不叫它们小路。
泳道是在活动图
上使用的UML符号。
请参考TheRationalEdge早期关于活动图的文章。
5通常,附上约束的生命线是拥有包含在约束表达式中的变量的生命线。
6关于选择项组合碎片,循环组合碎片不需要在它上放置一个约束条件。
7可能重用任何类型的序列图(举例来说,程序或业务)。
我只是发现开发者更喜欢按
功能分解他们的图。
参考资料您可以参阅本文在developerWorks全球站点上的英文原文。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 时序 详解