我正在开发通过串口与外部设备通信的软件。为了更好地理解新功能,我尝试在序列图中显示它。事件的流程如下。我发送到设备命令来重置它。这是异步操作,所以请求和响应之间存在一些延迟(通常是100 ms)。在回答永远不会出现的情况下(例如,设备没有连接到指定的端口或当前被关闭)。为此,我创建了一个周期为最大响应时间的两倍的计时器。在我的例子中,是2* 125 ms = 250 ms。如果答案出现在预定义的时间间隔内,我将销毁已经在运行的计时器。如果答案没有在预定义的间隔内出现,计时器就会启动一些操作。经过这一行动,我们可以摧毁它。如何在序列图中对这种情况进行有效建模?
根据斯卡弗里奇提出的建议,我绘制了如下UML图。Ozair的评论也有助于简化图表。

发布于 2012-06-20 07:57:30
记住,你只是在画图表。这不是用某种图形语言进行编码。如果您在与设备的所有通信中使用计时器机制,只需对其建模一次(在此答案的末尾可以找到对此的建议)。在大多数图表中省略计时器。您应该在特定的抽象级别上建模。不要离开这个级别,否则你的图表会膨胀,读者会错过你想要表达的观点。清楚地说明你是在做什么模特。如果沟通失败与情况无关,就不要给它建模。如果您想解释沟通失败后的行为,不要对无错误的情况建模。如果您想对两者进行建模,请考虑使用多个图表。再说一遍,清楚地说明你是在做什么模特。
对于实际计时器,我看不出有多大问题。我建议您为您的定时器创建一条生命线,一条用于设备,另一条用于与设备交谈的人(让我们称之为控制器)和计时器。从控制器到设备绘制一个消息“重置”,然后从控制器到定时器的消息“倒计时”。如果要对收到的答案进行建模,请将“重置完成”的消息从设备绘制到控制器。现在控制器让计时器停止。在无响应情况下,您可以从定时器到控制器绘制一条消息“时间向上”。您可以将这两者与alt片段和警卫结合起来,比如“未连接的设备”。
发布于 2012-06-20 07:57:22
有关一般情况下如何对消息之间的延迟建模,请参见此页。
如果您想要创建一个仅涵盖正数的序列图,那么这就是您所需要的。如果您想在一个图表中涵盖这两种可能性,您需要使用一个可供选择箱,其中一个延迟大于250 is,另一个更小,当然还有您想要执行的不同反应。
发布于 2012-06-20 08:39:00
斯卡弗里奇建议是非常有效的,您需要对图形图有一个特定的抽象级别。
如下图所示,您可以使用交互运算符负操作。

参考资料:http://www.uml-diagrams.org/sequence-diagrams.html
https://softwareengineering.stackexchange.com/questions/153560
复制相似问题