uml精粹——4.时序图

4.时序图sequence diagram

交互图interaction diagram描述了成群的对象如何以某种行为合作,其中最重要的是时序图sequence diagram。

典型的,一个时序图捕捉一单个情景的行为。图显示了一些示例对象以及这个用例里这些对象间传递的信息the messages that are passed between these objects within the use case

考虑一个简单的情景。我们有一个订单order,要用一个命令command来计算其价格。需要看订单上所有的行项目line items,并决定其价格,基于订单行产品的价格规则。处理完所有的行项目后,需要计算一个总和的折扣discount,基于跟客户相关的规则。

时序图通过给每个参与者一条生命线lifeline垂直向下来展示交互。见图4.1。

这些图中,我用anOrder的风格命名参与者participant。全语法是name : Class,如果你用class,则需要用冒号。

每条生命线有一个激活条activition bar,表示参与者在交互中何时是激活的。

命名很重要的,比如调用getProduct表示会返回aProduct。

第一个消息没有一个参与者来发送它,因为它来自一个未知的源,所以叫发现的消息found message。

见图4.2。

两种交互的不同:4.1是集中控制centralized control(一个参与者完成所有处理,其他参与者提供数据),4.2是分布控制distributed control(处理被分散到很多参与者,每个只做算法的一点点)

我更喜欢分布控制。好的设计的一个主要目标是将改变产生的效果局部化localize the effects of change。数据和访问数据的行为经常一起改变。所以将数据和使用它的行为放在一起是面向对象设计的第一条规则。

更多的,通过分布控制,你提高更多机会来使用多态而不是条件判断。

【创建和删除参与者】

创建一个参与者,你绘制一个消息箭头message arrow指向参与者盒子participant box。消息的名字是可选的如果你使用一个构造器,但我经常用new来标记。

删除一个参与者使用一个大的叉。在一条生命线的最后添加一个大叉表示删除自己。

在垃圾回收环境中,你不用直接删除对象,但仍然值得使用X来表示何时一个对象不再需要并可以被回收。

见图4.3。

【循环loop,条件conditional】

如果你想展示控制结构,最后用活动图activity diagram或代码。时序图是对象们如何交互的视觉化,而不是一个模型控制逻辑的方式。

循环和条件使用交互框interaction frame。见图4.4。

procedure dispatch

foreach (lineitem)

if (product.value > $10K)

carefule.dispatch

else

regular.dispatch

end if

end for

if (needsConfirmation) messenger.confirm

end procedure

一般,框由一个时序图拆分的片段fragment的一些区域region组成。每个框有一个操作者operator,每个片段有一个守卫guard。显示一个循环,你用loop操作符和一个片段,并在守卫里放迭代的基础the basis of the iteration([for each line item])。对于条件逻辑,你可用alt操作符,并在各片段放一个条件。只有guard是true的片段才会执行。如果你只有一个区域region,有一个opt操作符。

uml1中使用迭代标记iteration marker和守卫guard。一个迭代标记是一个*加到消息名去。你可以添加一些文字到中括号去来表示迭代的基础(比如*[for each line item])。守卫是放到中括号里去的一个条件表达式(如[value > $10000]),表示只有守卫是真才会发送消息。在uml2中他们从时序图中移除,但在交流图中合法communication diagram。

交互框的操作符:

alt alternative可选的多个片段;只有条件是true的才会执行

opt optional可选;只有提高的条件是true才会执行,和只有一个通道trace的alt一样

par parallel并行;每个片段并行运行

loop 循环;片段可能执行多次,守卫表示迭代基础basis of iteration

region critical region重要区域;该片段同事只能有一个线程执行

neg negative;片段展示了一个无效的交互invalid interaction

ref reference索引:指向另外一个图标里定义的交互。这个框绘制来包括引入交互的生命线。你可以定义参数和一个返回值

sd sequence diagram时序图;用来包含一个完整的时序图如果你希望

我发现这些交互框太重量级了,并不比代码或伪代码好。我更喜欢伪消息pseudomessage。

【同步和异步调用】

如果发送同步消息,则必须等到消息完成。如果发送一个异步消息,则可继续处理,不用等到回应。

我建议使用半箭头来表示异步消息更容易引人注意。

【何时用时序图】

如果你想关注一个用例几个对象的行为。时序图擅长展示对象间的合作,不擅长行为的精确定义。

如果你想关注一个对象在多个用例里的行为,用状态图。如果你想关注一个在多个用例或线程里的行为,考虑用活动图。

如果你想快速探索多个可选的交互,你可能最好用CRC卡,因为不用绘制和擦除。

其他有用的交互图的形式是交流图(显示连接connection),时间图(显示时间限制)。

CRC卡见P55。

时间: 2024-10-23 09:21:20

uml精粹——4.时序图的相关文章

UML建模之时序图(Sequence Diagram)

引自:http://www.cnblogs.com/ywqu/archive/2009/12/22/1629426.html UML建模之时序图(Sequence Diagram) 一.时序图简介(Brief introduction) 二.时序图元素(Sequence Diagram Elements) 角色(Actor) 对象(Object) 生命线(Lifeline) 控制焦点(Focus of Control) 消息(Message) 自关联消息(Self-Message) Combin

UML建模之时序图

现在是二月,而且到如今你或许已经读到.或听到人们谈论UML 2.0 —— 包括若干进步的 UML 的新规范,所做的变化.考虑到新规范的重要性,我们也正在修改这个文章系列的基础,把我们的注意力从 OMG 的 UML 1.4 规范,转移到 OMG 的已采纳 UML 2.0草案规范(又名 UML 2).我不喜欢在一系列文章的中间,把重点从 1.4 变为 2.0 ,但是 UML 2.0 草案规范是前进的重要一步,我感觉需要扩充文字. 由于一些理由,OMG 改良了 UML .主要的理由是,他们希望 UML

UML建模之时序图(Sequence Diagram)教程

一.时序图简介(Brief introduction) 二.时序图元素(Sequence Diagram Elements) 角色(Actor) 对象(Object) 生命线(Lifeline) 控制焦点(Focus of Control) 消息(Message) 自关联消息(Self-Message) Combined Fragments 三.时序图实例分析(Sequece Diagram Example Analysis) 时序图场景 时序图实例 时序图实例分析 四.总结(Summary)

计时器的UML用例图&时序图

UML用例图 UML时序图

uml精粹——11.活动图(及整个读书笔记分享)

11.活动图activity diagram 活动图是描述过程化逻辑procedural logic.业务过程business process和工作流work flow的技术.他和流程图flowchart类似,但不同是他们支持并行行为parallel bahavior. 见图11.1 我们从初始节点initial node动作开始,然后做Receive Order的动作.完成后遇到一个fork分叉.一个分叉fork有一个收入流incoming flow和一些外出的并行流outgoing conc

轻松理解UML用例图时序图类图的教程

摘自https://zhuanlan.zhihu.com/p/29874146 写在前面 当你老大扔给你这样的图,或者你需要完成某些功能而去看文档的时候发现以下类似这样的图会不会不(一)知(脸)所(懵)措(逼): (图片来至wikipedia) (图片来至微信内网页支付时序图) (图片来至wikipedia) 如果你看了都不会一脸懵逼,那么可以出门左转啦,这篇文章就是来说明这些图的意思,让你在工作交流中,或者在看一些文档,或者看我的一些关于设计模式的文章,甚至架构建模中,都能轻松理解,毫无压力!

uml精粹——5.类图(高级概念)

[关键字keyword] uml接口interface是一个只有公共操作public operations没有方法体method body的类.他用类图标class icon和关键字<<interface>>表示. <<interface>>简写为<<I>>,{abstract}简写为{A}. uml1中引号guillemets主要用于原型stereotype. 原型被用作概况profile的一部分. [分类和一般化classific

uml精粹——10.状态机图

10.状态机图state machine diagram 状态机图是常见的描述一个系统行为的技术.在面向对象的方法中,为单个类绘制一个状态机图来展示单个对象的生命周期行为. 见图10.1 图中显示了管理我不同寻常的安全系统的控制类的一个状态机图.它从控制对象被创建时的状态开始:等待状态wait state.图中暗示这个为初始伪状态initial pseudostate,虽然不是状态但又一个箭头指向初始状态. 图中显示控制器可处于3个状态:wait.lock和open.该图还提供规则表示状态间的改

uml精粹——3.类图(必需)

3.类图class diagram(必需) 一个类图描述了系统中对象的类型及他们间存在的各种静态关系static relationship.类图也展示了一个类的属性和操作properties and operations以及对象相互连接的限制.uml使用属于feature特性来表示一个类的属性和操作. 类图中的盒子box表示类,它分成3部分:类名(粗体),属性attribute,操作operation. [属性property] property属性代表一个类的结构形态,但它以两种不同的标记出现