目录
用例是一个系统提供给参与者的外部接口,代表着一系列交互步骤,最终目标是要实现参与者的目标。用例的表达有条简洁至上的原则,即越朴素越好,越不涉及代码越好,而且用力很难与类,接口等元素一一对应。因此,为了方便开发人员统筹和协调各个类和对象,UML对用例所概括的参与者的系统之间的交互行为提供了表达方式,时序图就是一种。
时序图是按时间顺序显示对象交互的图,具体来说,他显示了参与交互的对象和所交换信息的先后顺序,用来表示用例中的行为,并将这些行为建模成信息交换。
顺序图包括四个元素:对象(object),生命线(lifeline),激活(activation),消息(message)。
在UML中,顺序图将交互关系表示为一张二维图。其中纵向代表时间维度,时间向下延伸,按时间依次列出各个对象所发出和接收到的消息,横向代表对象的维度,排列着参与交互的各个独立的对象。一般主要参与者在最左边,次要参与者在最右边。
顺序图的组成元素
顺序图将交互关系表示为一个二维图,纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示,
对象与生命线
顺序图中的对象与对象图中的概念一样,都是类的实例。顺序图中的对象可以是系统的参与者或者任何有效的系统对象。对象的创建由头符号来表示,即在对象创建点的生命线顶部使用显示对象名和类名的矩形框来标记,二者用冒号隔开,即为"对象名:类名"。与对象图类似,对象的名字可以被省略,此时表示为一个匿名对象。在不保证混淆的情况下,对象所属的类名也允许被省略。
在一个位置上,一个被放置于顺序图顶端的对象,意味着在这个交互开始之前,我们已经拥有这样一个对象 了,如果一个对象出现在其他位置上,则说明这个对象是在交互执行到某些步骤的时候被创建出来的。被创建出来的对象可以在接下来的时间里被其他对象的消息所激活,也可以以同样的方式被销毁。
对象与其在顺序图中的生命周期表示为一条生命线,生命线多代表的时间内,对象一直可以被访问。对于在交互过程中被创建的对象,其生命线从接收到新建对象的消息时开始。对于在交互过程中被销毁的对象,其生命线在接收到销毁对象的消息时或在自身最后的返回消息之后结束,同时用一个"X"标记表明生命线的结束。
激活
消息
消息是从一个对象向另一个对象发送信号,
消息表示为从一个对象的生命线指向另一个对象的生命线的箭头,不同的消息表示法:
- 简单消息:用实线箭头表示,简单消息表示控制流,可以泛指任何交互,但不描述任何通信信息,如果不需要复杂的消息类型,或者能很容易判断出时序图中各个消息的消息类型时可以画成简单消息
- 调用:调用对象的操作,可以是对象之间的调用,也可以是对对象本身的调用,即自身调用或递归调用。调用属于同步机制,使用一个头部为实心的三角箭头表示
- 返回:返回消息不是主动发的,而是一个对象接收到其他对象的消息后返回的消息,很多情况下一个消息的接收会要求一个返回。如果把所有对源消息的返回全部绘制在顺序图中,图将变得过于复杂而难以阅读,所以仅仅需要绘制重要的返回消息。在UML中用虚线箭头表示返回
- 创建:创建一个对象时发送的消息,在UML中使用具有
<<create>>
构造型的消息表示 - 销毁:销毁一个对象,UML中使用
<<destroy>>
消息表示
根据消息的并发性来区分,消息可以分为同步消息和异步消息两种。
同步消息意味着发出该消息的对象将不再继续进行后续工作,专心等待消息接收方返沪消息。同步消息通过在箭头上标注"X"来表示,但是大多数方法调用使用的都是同步消息,因此一般情况下不需要使用同步消息的表示法,只有在并行程序中出现异步消息时可以标记。
异步消息表示为半个箭头:
TODO 以上五种箭头的画法,同步和异步消息的画法
结构化控制
组合片段:解决交互执行的条件和方式,共有13种
片段类型 | 名称 | 说明 |
---|---|---|
Opt | 选项 | 包含一个可能发生或不可能发生的序列,可以在临界中指定序列发生的条件 |
Alt | 抉择 | 包含一个片段列表,这些片段包含备选消息序列,在任何场合下只发生一个序列。可以在每个片段中设置一个临界来指示该片段可以运行的条件,else的临界指示其他任何临界都不为True时应运行的片段。如果所有临界都为False并且没有else,则不执行任何片段 |
Loop | 循环 | 片段重复一定次数。可以在临界中指示片段重复的条件,Loop组合片段具有Min和Max属性,她们指示片段可以重复的最小和最大次数,默认值是无限制 |
Break | 中断 | 如果执行此片段,则放弃序列的其余部分。可以使用临界来指示发生中断的条件 |
Par | 并行 | 并行处理。片段中的事件可以交错 |
Critical | 关键 | 用在Par或Seq片段中,指示此片段中的消息不得与其他消息交错 |
Seq | 弱顺序 | 有两个或更多操作数片段,涉及同一生命线的消息必须以片段的顺序发生,如果消息涉及的生命线不同,来自不同片段的消息可能会并行交错 |
Strict | 强顺序 | 有两个或更多操作数片段,这些片段必须按给定顺序发生 |