在 activity 图中同时表达并发性和时间
Expressing both concurrency and time in activity diagrams
我不确定如何使用 activity 图表来表达我的场景:
我试图形象化的事实是:
- 收到一条消息
- 发生了两个独立且并发的操作:记录消息和处理消息
- 记录总是比处理花费的时间少
图表中的第一个 activity 在操作独立的意义上是正确的,但它并没有传达日志记录保证比处理花费的时间更少的事实。
图中的第二个activity是不正确的,因为即使日志记录在处理之前完成,看起来好像处理依赖于日志记录先完成,这并不代表现实。
这里有一个non-computer相关的例子:
你是观鸟新手,试着在笔记本上写下关于路过的鸟类的第一篇笔记
一群鸟儿靠近,你尽量认清细节
你想把细节记在笔记本上,但是等一下,你开始意识到你的理论背景在实践中行不通,应该是快速涂鸦的东西实际上等于没有结束,因为你没有认出任何东西
其间,鸟儿不等你,雄赳赳地飞走了,activity不见了
或者你真的写下来了,只是片刻,鸟儿还在附近,慢慢地飞走了,过了一段时间又结束了activity
或者你可能因为太敬畏而一直看着他们,没有做任何笔记——他们飞走了,消失在horizon,结束了activity
几个小时后,你有了足够的笔记,然后你很高兴地回家了——也许你没有捕捉到所有的东西,但这已经足够让你微笑了
我总是可以在图表中添加注释以某种方式表达它,但我想知道,是否有更结构化的方式来表达我在 activity 图表中描述的内容?如果不是 activity 图表,那么您认为哪种图表更适合?谢谢。
您的第一个图表假设记录的持续时间总是比处理的持续时间短:
- 如果这个假设是正确的,则上层流到达流终节点,其余流继续,直到第一个流到达 activity-终节点。此处,处理继续,并且 activity 在处理结束时结束。这正是您想要的。
- 但是如果有一次,执行会偏离这个假设并且日志记录会由于任何原因而延迟,那么处理的结尾将到达 activity-final 节点,导致所有的立即中断其他正在进行的活动。所以日志记录不会完成。也许这对你来说不是问题,但在大多数情况下审计期望日志是完整的。
您可能对添加连接节点的更安全方法感兴趣:
优点是activity不依赖于任何假设。它将始终有效:
- 每当日志记录速度更快时,该流上的令牌将在连接节点处等待,一旦流程完成,activity(安全地)连接就可以发生并且传出令牌到达末尾.这正是您目前所期望的。
- 如果日志记录特别慢,没问题:处理将结束,但 activity 将等待日志记录完成。
这种健壮的表示法使日志记录就像盒子里的薛定谔的猫:我们不必知道 activity 是长是短。在activity结束时,两个动作都完成了。
activity 图表中的时间?
Activity 图并不是真正用来表达时间和持续时间。它是关于控制流和同步的。
但是,如果时间对您很重要,您可以:
- 视觉上使一个 activity 比另一个短。从正式的 UML 角度来看,这是非常模糊和绝对没有意义的。但是当读者看到平行流时,它是直观的(一种潜意识交流;-))。
- 添加注释以用通俗易懂的英语表达您的假设。这样做的好处是非常明确无歧义。
- 使用 UML 持续时间约束。这个经常用在时序图中,有时用在时序图中,但一般不会用在activity图中(我个人没见过,但UML规范也不排除)。
时间在 UML 规范中是非常普遍的东西,并且独立于图表定义。例如:
8.4.4.2: A Duration is a value of relative time given in an implementation specific textual format. Often a Duration is a non- negative integer expression representing the number of “time ticks” which may elapse during this duration.
8.5.1: An Interval is a range between two values, primarily for use in Constraints that assert that some other Element has a value in the given range. Intervals can be defined for any type of value, but they are especially useful for time and duration values as part of corresponding TimeConstraints and DurationConstraints.
在您的情况下,您有处理的持续时间观察(例如 d
)和日志记录的持续时间限制(例如 0..d
)。
8.5.4.2: An IntervalConstraint is shown as an annotation of its constrainedElement. The general notation for Constraints may be used for an IntervalConstraint, with the specification Interval denoted textually (...).
不幸的是,我没有多说什么。唯一的图形示例是序列图中的消息(图 8.5 和 17.5)和时序图(图 17.28 到 17.30)。尽管如此,该符号可以推断为 activity 图,但它太不常用了,我宁愿推荐注释。
我不确定如何使用 activity 图表来表达我的场景:
我试图形象化的事实是:
- 收到一条消息
- 发生了两个独立且并发的操作:记录消息和处理消息
- 记录总是比处理花费的时间少
图表中的第一个 activity 在操作独立的意义上是正确的,但它并没有传达日志记录保证比处理花费的时间更少的事实。
图中的第二个activity是不正确的,因为即使日志记录在处理之前完成,看起来好像处理依赖于日志记录先完成,这并不代表现实。
这里有一个non-computer相关的例子:
你是观鸟新手,试着在笔记本上写下关于路过的鸟类的第一篇笔记
一群鸟儿靠近,你尽量认清细节
你想把细节记在笔记本上,但是等一下,你开始意识到你的理论背景在实践中行不通,应该是快速涂鸦的东西实际上等于没有结束,因为你没有认出任何东西
其间,鸟儿不等你,雄赳赳地飞走了,activity不见了
或者你真的写下来了,只是片刻,鸟儿还在附近,慢慢地飞走了,过了一段时间又结束了activity
或者你可能因为太敬畏而一直看着他们,没有做任何笔记——他们飞走了,消失在horizon,结束了activity
几个小时后,你有了足够的笔记,然后你很高兴地回家了——也许你没有捕捉到所有的东西,但这已经足够让你微笑了
我总是可以在图表中添加注释以某种方式表达它,但我想知道,是否有更结构化的方式来表达我在 activity 图表中描述的内容?如果不是 activity 图表,那么您认为哪种图表更适合?谢谢。
您的第一个图表假设记录的持续时间总是比处理的持续时间短:
- 如果这个假设是正确的,则上层流到达流终节点,其余流继续,直到第一个流到达 activity-终节点。此处,处理继续,并且 activity 在处理结束时结束。这正是您想要的。
- 但是如果有一次,执行会偏离这个假设并且日志记录会由于任何原因而延迟,那么处理的结尾将到达 activity-final 节点,导致所有的立即中断其他正在进行的活动。所以日志记录不会完成。也许这对你来说不是问题,但在大多数情况下审计期望日志是完整的。
您可能对添加连接节点的更安全方法感兴趣:
优点是activity不依赖于任何假设。它将始终有效:
- 每当日志记录速度更快时,该流上的令牌将在连接节点处等待,一旦流程完成,activity(安全地)连接就可以发生并且传出令牌到达末尾.这正是您目前所期望的。
- 如果日志记录特别慢,没问题:处理将结束,但 activity 将等待日志记录完成。
这种健壮的表示法使日志记录就像盒子里的薛定谔的猫:我们不必知道 activity 是长是短。在activity结束时,两个动作都完成了。
activity 图表中的时间?
Activity 图并不是真正用来表达时间和持续时间。它是关于控制流和同步的。
但是,如果时间对您很重要,您可以:
- 视觉上使一个 activity 比另一个短。从正式的 UML 角度来看,这是非常模糊和绝对没有意义的。但是当读者看到平行流时,它是直观的(一种潜意识交流;-))。
- 添加注释以用通俗易懂的英语表达您的假设。这样做的好处是非常明确无歧义。
- 使用 UML 持续时间约束。这个经常用在时序图中,有时用在时序图中,但一般不会用在activity图中(我个人没见过,但UML规范也不排除)。
时间在 UML 规范中是非常普遍的东西,并且独立于图表定义。例如:
8.4.4.2: A Duration is a value of relative time given in an implementation specific textual format. Often a Duration is a non- negative integer expression representing the number of “time ticks” which may elapse during this duration.
8.5.1: An Interval is a range between two values, primarily for use in Constraints that assert that some other Element has a value in the given range. Intervals can be defined for any type of value, but they are especially useful for time and duration values as part of corresponding TimeConstraints and DurationConstraints.
在您的情况下,您有处理的持续时间观察(例如 d
)和日志记录的持续时间限制(例如 0..d
)。
8.5.4.2: An IntervalConstraint is shown as an annotation of its constrainedElement. The general notation for Constraints may be used for an IntervalConstraint, with the specification Interval denoted textually (...).
不幸的是,我没有多说什么。唯一的图形示例是序列图中的消息(图 8.5 和 17.5)和时序图(图 17.28 到 17.30)。尽管如此,该符号可以推断为 activity 图,但它太不常用了,我宁愿推荐注释。