4

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

在此处输入图像描述

我读它如下:

“lifeline1”表示在一段时间内执行的对象。

在 lifelin1 执行期间,恰好在红色圆圈“lifeline1”需要来自“lifeline2”的东西才能完成其执行

所以,

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

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

粉色线表示“lifeline1”需要到达“lifeline2”才能执行的持续时间

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

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

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

我阅读正确吗?

我错过了任何一步吗?

4

2 回答 2

2

“lifeline1”表示在一段时间内执行的对象。

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

在 lifelin1 执行期间,恰好在红色圆圈“lifeline1”需要来自“lifeline2”的东西才能完成其执行

如果它需要某些东西来开始执行,它不会显示以开始执行规范,而是在收到消息后显示为激活状态。

相反,该块显示 lifeline1 显示为活动,并发送同步消息。

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

这个序列图没有暗示暂停(或其他时间)。

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

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

粉色线表示“lifeline1”需要到达“lifeline2”才能执行的持续时间

这个序列图没有暗示任何时间——它只显示了操作的序列。使用 OMG† UML2 上层结构的表 14.1 中所示的 Duration Constraint 和 Duration Observation 符号显示持续时间计时。

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

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

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

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

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

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

我会采取一种稍微正式的方法,并说执行不应该显示在哪里,而是应该在收到返回消息后开始,以表示 lifeline1 继续 - 就像调用另一个对象中的方法的方法不在调用返回之前接收控制流。

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

(不幸的是,UML 又大又蓬松,几乎任何人提出的任何示例都可以以不同的方式阅读。由于我使用 UML 生成可执行模型来使用 pi-calculus 检查进程是否存在死锁,因此我倾向于使用更多比那些在白板上写一个来向共同开发人员解释某事的人更严格的解释)

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

于 2013-02-02T13:47:10.813 回答
0

快速建议

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

长无聊的扩展答案

想象一个棋盘,其中每个正方形或格子是您移动图形的地方。序列图也是如此。

在序列图中,有列,其中有一个类的实例(参与者、表、边界、任何对象),还有行,其中执行操作。

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

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

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

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

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

干杯。

于 2013-02-01T19:01:36.383 回答