如何用UML表示通信协议? [英] How to represent communication protocol in 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轿车。(还是我错了?)确认也是如此。
感谢您的回复。你是金子!
推荐答案
一般通信协议
表示两台设备之间发送移动消息的方式主要有两种:
目标设备上的
movement()
操作,带速度和方向参数。您通常会在序列图中显示交换,并带有一个从发送方到接收方的调用箭头。返回消息可以仅标记为ACK。A
«signal» Movement
:Signals对应事件消息。在类图中,它们表示为一个类,但是使用«signal»
关键字:velocity
和direction
将是该信号的属性。ACK
将是另一个信号。能够接收信号的类将其显示为reception(看起来像一个操作,但同样带有«Signal»关键字)。
在这两种情况下,您将使用几乎完全相同的序列图显示通信协议的交互。但是信号是用于异步通信的,并且更好地反映了通信的性质。它的语义性更适合您的需求。
如果您更喜欢communication diagram而不是交互图,信号方法会更清晰,因为通信图不显示返回消息。
为什么需要信号(您的编辑)
有了图表,您编辑的问题就清楚多了。我对信号使用的立场是不变的:信号将与计算机和汽车之间交换的信息相对应。因此,在类关系图中,您可以将«signal»Movement
记录为具有属性id
、velocity
和direction
:
Movement (X,100,0)
发送和箭头。Signal允许显示协议交换的高级视图,而不会迷失在实际实现细节上:
然后可以在单独的图表中显示实现的详细信息。当然,在计算机一侧(一个图表,最后的动作是某种类型的发送)和在汽车一侧(另一个图表:如何接收和发送消息,以及解码其内容)上肯定涉及到几个类。我不提供示例,因为它看起来非常像您当前的图表,但是发送功能可能是由通信控制器实现的。如果您试图将协议及其实现放在同一张图中,就像在第二张图中一样,因为没有分离关注点,所以会产生混淆:在这里,您说计算机正在调用汽车上的一个发送函数,而这根本不是您想要的。这样读者就很难看到协议真正需要的是什么,以及实现细节是什么。比如说我还不知道根据您的图表,setVelocity
是不是应该直接给车发东西,还是要做一个速度发送动作信息的准备步骤。
这篇关于如何用UML表示通信协议?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!