如何用UML表示通信协议? [英] How to represent communication protocol in UML?

查看:29
本文介绍了如何用UML表示通信协议?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的UML模型中,我有一个相互通信的系统及其子组件。例如,我有一台电脑和一个遥控机器人,它们通过蓝牙通话。目前在图表中,流程类似于:

&Q;计算机&Q;触发&Q;RC CAR&Q;函数的&Q;setVelocity()&Q;。

在这一点上,我想通过以下方式来改进通信:

  • 计算机发送移动&q;消息
  • 速度字段设置为100,方向字段设置为0
  • RC CAR通过发送ACK消息确认的
  • ,消息ID为&Quot;移动&Quot;,序列号为X。

我该怎么做?

编辑:澄清

通常情况下,我的图表没有协议详细信息是这样的:

但当我尝试添加邮件时,至少有两个问题:

  • 计算机似乎先触发了setVelocity()函数,然后按顺序发送Bluete othMessage(),而这两个函数不是连续的。setVelocity()的以下内容实际上就是其中发生的事情。
  • sendBluetothMessage()实际上是计算机的函数。但在这里它属于RC轿车。(还是我错了?)确认也是如此。

感谢您的回复。你是金子!

推荐答案

一般通信协议

表示两台设备之间发送移动消息的方式主要有两种:

  1. 目标设备上的movement()操作,带速度和方向参数。您通常会在序列图中显示交换,并带有一个从发送方到接收方的调用箭头。返回消息可以仅标记为ACK。

  2. A«signal» MovementSignals对应事件消息。在类图中,它们表示为一个类,但是使用«signal»关键字:velocitydirection将是该信号的属性。ACK将是另一个信号。能够接收信号的类将其显示为reception(看起来像一个操作,但同样带有«Signal»关键字)。

在这两种情况下,您将使用几乎完全相同的序列图显示通信协议的交互。但是信号是用于异步通信的,并且更好地反映了通信的性质。它的语义性更适合您的需求。

如果您更喜欢communication diagram而不是交互图,信号方法会更清晰,因为通信图不显示返回消息。

为什么需要信号(您的编辑)

有了图表,您编辑的问题就清楚多了。我对信号使用的立场是不变的:信号将与计算机和汽车之间交换的信息相对应。因此,在类关系图中,您可以将«signal»Movement记录为具有属性idvelocitydirection

在序列图中,然后使用Movement (X,100,0)发送和箭头。Signal允许显示协议交换的高级视图,而不会迷失在实际实现细节上:

然后可以在单独的图表中显示实现的详细信息。当然,在计算机一侧(一个图表,最后的动作是某种类型的发送)和在汽车一侧(另一个图表:如何接收和发送消息,以及解码其内容)上肯定涉及到几个类。我不提供示例,因为它看起来非常像您当前的图表,但是发送功能可能是由通信控制器实现的。

如果您试图将协议及其实现放在同一张图中,就像在第二张图中一样,因为没有分离关注点,所以会产生混淆:在这里,您说计算机正在调用汽车上的一个发送函数,而这根本不是您想要的。这样读者就很难看到协议真正需要的是什么,以及实现细节是什么。比如说我还不知道根据您的图表,setVelocity是不是应该直接给车发东西,还是要做一个速度发送动作信息的准备步骤。

最后但并非最不重要的一点是,请记住序列图只表示特定的场景。如果您想要在UML中正式定义协议,您还需要创建一个协议状态机来告知有效的连续消息。使用信号时,可以直接将其名称用作状态转换触发器/事件。

这篇关于如何用UML表示通信协议?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆