阅读顺序图

时间:2013-02-01 17:56:59

标签: messaging uml sequence-diagram tool-uml

我有以下序列图由两条生命线和同步消息组成

enter image description here

我将其读作如下:

“生命线1”表示在一段时间内执行的对象。

在lifelin1执行期间,正好在红色圆圈“生命线1”需要“生命线2”的东西才能完成执行

所以,

1)“生命线1”暂停执行,然后

2)调用同步消息。(请在答案中澄清一下)

粉红线表示“生命线1”需要达到“生命线2”才能执行的持续时间

3)蓝色矩形表示消息执行的持续时间

4)虚线表示“生命线2”需要到达“生命线2”才能恢复执行的持续时间。

5)黑色矩形表示生命线1空闲的时间段

我能正确阅读吗?

我是否会错过任何一步?

2 个答案:

答案 0 :(得分:1)

  

“生命线1”表示在一段时间内执行的对象。

虚线垂直线表示对象的生命周期。当对象处于活动/执行/具有控制权时,在该行上绘制“执行规范”框。

  

在lifelin1执行期间,正好在红色圆圈“生命线1”需要“生命线2”的东西才能完成执行

如果需要开始执行某些内容,则不会显示执行规范,而是在收到消息后显示为变为活动状态。

相反,该块显示生命线1显示为活动状态,并发送同步消息。

  

1)“生命线1”暂停执行,然后

此序列图不暗示暂停(或其他时间)。

  

2)调用同步消息。(请在答案中澄清一下)

类似于在对象上调用方法 - 同步消息中的控制流立即从发送方传递到接收方,并且在接收到同步消息时,接收方显示为活动对象。

  

粉红线表示“生命线1”需要达到“生命线2”才能执行的持续时间

此序列图未暗示时序 - 它仅显示操作顺序。持续时间计时使用OMG†UML2 Superstructure表14.1中显示的持续时间约束和持续时间观察符号显示。

  

3)蓝色矩形表示消息执行的持续时间

在蓝色矩形表示的过程中,“lifeline2”对象正在执行以响应消息。说'消息执行'有点模糊 - 对象正在执行,而不是消息。

  

4)虚线表示“生命线2”需要到达“生命线2”才能恢复执行的持续时间。

虚线是返回消息。因为从“lifeline1”发送的消息是同步的,所以在收到返回消息之前它不会继续执行。

  

5)黑色矩形表示生命线1空闲的时间段

UML序列图上的执行规范块表示对象何时正在执行。空闲等待同步消息返回的对象应该在其生命线上没有执行规范块的情况下表示。 (颜色在UML中没有任何意义 - 它们在此图中用于说明特定块,它们不显示对象是否处于活动状态)

我会采取稍微更正式的方法并说执行不应该显示在它的位置,但是应该在收到返回消息后开始表示生命线1继续 - 就像在另一个方法中调用方法的方法一样在调用返回之前,对象不会收到控制流。

但是,显示一个等待带有执行规范的返回消息的对象是很常见的,因为它仍然控制着操作的顺序。

(不幸的是,UML是如此之大,蓬松,几乎任何例如人想出了能够以不同的方式被读出。正如我已经使用UML来生成用于检查用于使用pi演算死锁过程可执行模型,我倾向于比起在白板上写一个向合作开发者解释某事的人有更严格的解释。

†对象管理组维护UML标准,而不是“OMG它是巨大的”,尽管这也适用。

答案 1 :(得分:0)

快速建议

将序列图读取为二维流程图(活动图),就像棋盘一样。

长期无聊的答案

想象一下棋盘,其中eack square或cell就是你移动一个人物的地方。序列图也是如此。

在序列图中有列,其中有一个类的实例(actor,表,边界,任何对象),以及执行操作的行。

想象一下,你有一个数字,它正在进行一次操作,就像流程图一样,每次执行一个操作或“消息”时,数字会移动到下一个方格或单元格或块。

电路板的某些“单元”位于同一列(对象生命线)。

有时,我使用带有分区的linelifes绘制序列图,以帮助我记住每个分区都是一个单元格或执行操作的地方。

.......................................................
.........+--------------+............+--------------+..
.........| * : FooClass |............| * : BarClass |..
.........+------+-------+............+------+-------+..
................|...........................|..........
................|...........................|..........
............+---+---+...................+---+---+......
.....start..|   |   |......enter()......|   |   |......
..(*)======>|   |   |==================>|   |   |---+..
............|   |   |...................|   |   |...|..
............+---+---+...................+---+---+...|..
............|   |   |.......return......|   |   |...|..
........+---|   |   |<------------------|   |   |<--+..
........|...|   |   |...................|   |   |......
........|...+---+---+...................+---+---+......
........|...|   |   |....PlayChess()....|   |   |......
........+-->|   |   |==================>|   |   |---+..
............|   |   |...................|   |   |...|..
............+---+---+...................+---+---+...|..
............|   |   |.......return......|   |   |...|..
........+---|   |   |<------------------|   |   |<--+..
........|...|   |   |...................|   |   |......
........|...+---+---+...................+---+---+......
........|...|   |   |..HaveRootBeer()...|   |   |......
........+-->|   |   |==================>|   |   |---+..
............|   |   |...................|   |   |...|..
............+---+---+...................+---+---+...|..
............|   |   |......return.......|   |   |...|..
........+---|   |   |<------------------|   |   |<--+..
........|...|   |   |...................|   |   |......
........|...+---+---+...................+---+---+......
........|...|   |   |...GetSandwich()...|   |   |......
........+-->|   |   |==================>|   |   |---+..
............|   |   |...................|   |   |...|..
............#"""+"""#...................+---+---+...|..
............!   |   !...GetFriesAlso()..|   |   |...|..
............!   |   !...............+---|   |   |<--+..
............!   |   !...............|...|   |   |......
............#"""+"""#...............|...+---+---+......
............!   |   !...............|...|   |   |......
............!   |   !...............+-->|   |   |---+..
............!   |   !...................|   |   |...|..
............#"""+"""#...................+---+---+...|..
....finish..|   |   |...................|   |   |...|..
...(O)<-----|   |   |<------------------|   |   |<--+..
............|   |   |...................|   |   |......
............+---+---+...................+---+---+......
................|...........................|..........
................|...........................|..........
................|...........................X..........
.......................................................

生命线,表示某个操作或“消息”由特定对象执行, 请注意,在示例中,生命线的某些部分具有不同的字符(“颜色”),以指示对象何时空闲或忙碌。

干杯。