顺序图

王朝百科·作者佚名  2010-02-17  
宽屏版  字体: |||超大  

顺序图

顺序图(Sequence Diagram)

显示多个对象之间的动态协作,如图所示。

顺序图重点是显示对象之间发送的消息的时间顺序。它也显示对象之间的交互,就是在系统执行时,某个指定时间点将发生的事情。顺序图由多个用垂直线显示的对象组成,图中时间从上到下推移,并且顺序图显示对象之间随着时间的推移而交换的消息或函数。消息是用带消息箭头的直线表示的,并且它位于垂直对象线之间。时间说明以及其他注释放到一个脚本中,并将其放置在顺序图的页边空白处。

顺序图可以用两种形态来显示:一般形态(Generic Form)和实例形态(Instance Form)。其中,实例形态会详细地描述一个特定情节;它会为一个不确定的交互提供详细说明。实例形态没有任何条件、分支或循环,它只显示所选定情节的交互。而一般形态会描述一个情节中所有可能出现的情况,因此一般形态中通常会包括分支、条件和循环。例如,假设要在顺序图中描述“开户”这一情节,如果使用一般形态,就必须要考虑所有可能出现的情况:当一切都很成功时,当不允许该用户在银行开户时,当钱马上被存放到账户中时等等。所有这些情况下所出现的结果都要进行描述。同样,如果使用顺序图的实例形态来描述“开户”这一情节,则实例形态就会选择一个特定的情况来执行,并且只关心该情况。例如,在一个实例形态的顺序图中可能会只显示成功开户这一情况。因此,如果要使用实例形态的顺序图来显示所有情况,就必须分别使用不同的图来描述。

消息是对象之间的一种通信,它可以传递信息并期望相关的动作被执行。一般来说,接收到一个消息都被认为是发生了一个事件。消息可以是信号、操作调用或类似的事物(如C++中的RPC(Remote Procedure Call, 远程过程调用)或Java 中的RMI(Remote Method Invocation,远程方法调用)。当对象接收到一个消息时,该对象中的一项活动就会启动,我们把这一过程称做激活(Activation)。激活会显示控制焦点,表明对象在某一个时间点开始执行。一个被激活的对象或者是执行它自身的代码,或者是等待另一个对象的返回(该被激活的对象已经向另一个对象发送了消息)。在图形上,激活被绘制为对象生命线上的一个瘦高矩形。一个对象的生命线代表了该对象在某个特定时间的存在,它是用一条从对象矩形一直向下延伸到图的底部的虚线来表示的。消息是用对象生命线之间带箭头的直线表示的,不同的箭头表示不同的消息类型(简单消息、同步消息或异步消息)。每个消息都可以有一个带名称和参数的签名,例如:

print ( file : File )

消息也可以有顺序号,但是在顺序图中,消息的顺序号很少使用,因为顺序图已经将消息的顺序显式地表示出来了。消息的返回(通常来自异步消息,如操作调用)也是用箭头(使用的是代表简单消息的箭头)来表示的,但是要注意,顺序图中并不会总是显示消息的返回(如图5.17 所示)。

消息还可以有条件。在这种情况下,只有当条件为真时,该消息才能被发送出去或者被接收到。条件通常用来对分支进行建模,或者用来决定是否发送消息。在将条件用于描述分支时,通常会绘制多个消息箭头。如果每个消息箭头上所带的条件都互相排斥,那么同时只能有一个消息可以被发送,如图5.18 所示;如果每个消息箭头上所带的条件都不是互相排斥的,那么这些消息就可以同时被发送。对象图5.17 顺序图,其中只有一个始于Change消息的情节。同时也显示了UpdateCustomer消息的返回也可以给它自身发送消息。此时,消息符号从该对象引出,最后又返回到该对象。

图5.18 从PrinterServer 对象到Printer 对象的消息上带有条件,这显示了如何在一个顺序图中描述分支选择的情况。本例中,两个条件是互斥的。也就是说,要么是到Printer 对象的Print消息被发送,要么是到Queue对象的Store消息被发送图5.19 中显示了顺序图中所使用的相关概念。

图5.19 顺序图中所使用的相关概念

顺序图与协作图是同构的。

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝百科 版权所有