如何用UML表示通信协议?

2024-04-12

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

“计算机”触发“遥控车”的“setVelocity()”函数。

在这一点上,我想通过说以下的话来完善沟通:

  • 计算机发送“移动”消息
  • 速度场设置为 100,方向场设置为 0
  • 遥控车通过发送 ACK 消息进行确认
  • 带有消息 ID“Movement”和序列号 X。

我怎么做?

EDIT:澄清

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

但是当我尝试添加消息时,至少存在两个问题:

  • 看起来计算机首先触发了 setVelocity() 函数,然后依次触发了 sendBluetoothMessage() ,这不是顺序的。 setVelocity() 的以下内容实际上是其中发生的事情。
  • sendBluetoothMessage()实际上是Computer的一个函数。但这里它属于遥控车。 (或者我错了?)对于 ACK 来说也是同样的事情。

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


一般通信协议

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

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

  2. A «signal» Movement: Signals https://www.uml-diagrams.org/common-behaviors.html#signal对应事件消息。在类图中,它们像一个类一样表示,但带有«signal»关键词:velocity and direction将是该信号的属性。ACK将是另一个信号。能够接收信号的类显示为接待 https://www.uml-diagrams.org/common-behaviors.html#reception(看起来像一个操作,但又带有“signal”关键字)。

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

如果你更喜欢通讯图 https://www.uml-diagrams.org/communication-diagrams.html在交互图上,信号方法会更清晰,因为通信图不显示返回消息。

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

有了图表,您编辑的问题就更加清晰了。我对信号使用的立场没有改变:信号将对应于计算机和汽车之间交换的信息。因此,在类图中,您可以记录«signal»Movement因为有属性id, velocity and direction:

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

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

如果您尝试将协议及其实现放在同一个图中(如第二个图中所示),由于缺乏关注点分离,它会变得混乱:这里您说计算机正在调用汽车上的发送函数,这不是一切你想要的。读者很难看出协议真正需要什么,以及实现细节是什么。比如,根据你的图我还是不知道,如果setVelocity应该直接向汽车发送一些东西,或者如果它是发送速度运动消息的准备步骤。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用UML表示通信协议? 的相关文章

  • 如何使用用例关系 - uml

    嘿伙计们 我一直在研究 UML 并且正在尝试设计问题的用例图 假设我的应用程序包含以下内容 两个要求 创建团队 创建玩家 这是这笔交易 用户可以创建一个球队 创建球队后可以为该球队创建球员 非必需 但在这个应用程序中有多个用户 一个用户可以
  • 如何在这个系统内进行通信?

    我们打算设计一个具有三个 层 的系统 总部 只有一台服务器 区域上有很多 节点 使用 iPad 的用户 HQ 与节点进行 2 路通信 节点与用户进行 2 路通信 用户从不与总部沟通 反之亦然 权力机构规定总部的 Windows 应用程序 使
  • 如何在重写方法中表示调用基类方法?

    我有一个子类想要向基类函数添加更多功能 我如何表示它也执行基类函数而不仅仅是新添加的功能 有趣的问题 我用 Enterprise Architect 尝试过 它确实让我选择了父级的操作 但图中的显示没有改变 看来您需要为此使用注释 如你看到
  • 在 NetBeans 7.1.1 中创建 UML 类图

    我想安装 启用 NetBeans 插件来创建和查看 UML 图 如图所示here http wiki netbeans org wiki images b b8 Vista Nimbus Uml Screenshot NBLookAndFe
  • 如何使用消息代理和数据库设计分布式应用程序?

    我想实现一个分布式销售点系统 有点像中描述的系统销售点应用程序架构建议 https stackoverflow com questions 2454629 point of sale app architecture advice 它是一个
  • 如何在 UML 属性中指定枚举文字作为默认值?

    我目前使用 EMF UML Implementation 进行一些模型转换 在我的模型转换中 我创建了一个具有一些属性的 uml 类 这些属性是我也创建的枚举类型 某些属性应该获得默认值 默认值应该是枚举文字 现在的问题是 如何将枚举文字获
  • 从现有架构生成表关系图(SQL Server)[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有办法生成一个图表 显示现有表及其与数据库的连接的关系 这是针对 SQL Server 2008 Express Edition 的
  • 如何创建堆积线图

    在 R 中创建堆积条形图有多种解决方案 但如何绘制堆积线图呢 可以使用以下命令创建堆积线图ggplot2包裹 一些示例数据 set seed 11 df lt data frame a rlnorm 30 b 1 10 c rep LETT
  • 建模/记录功能程序

    我发现 UML 对于记录 OO 系统的各个方面非常有用 特别是用于总体架构的类图和用于说明特定例程的序列图 我想为我的 clojure 应用程序做同样的事情 我目前对模型驱动开发不感兴趣 只是对交流应用程序如何工作感兴趣 UML 是函数式编
  • java:与批处理服务器通信的最佳技术是什么?

    我有一个 WEB 应用程序 带有纯 Java servlet 它具有一些繁重的计算工作 具有数据库访问功能 可以在异步模式下完成 我计划使用专用服务器来执行此类批处理作业 并且我想知道使用哪些工具 技术 协议用于 WEB 服务器中的 ser
  • 离线、跨选项卡通信(仅限 JavaScript)

    是否可以找到某些网站的国外实例 Ofc 这些是独立打开的选项卡 不是通过 window open 我需要阻止用户打开 2 个选项卡 并向之前打开的选项卡发送消息以告知无法打开 2 个选项卡 2个独立的选项卡可能会破坏页面离线存储和webSQ
  • 如何在 UML 类图中表示“事件”?

    这是我的代码片段 public class Notation INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged private N
  • Eclipse:如何安装 UML2 工具

    我想尝试 UML2 Tools for Eclipse 如图所示本教程 http www vogella de articles UML article html 我目前拥有面向 Java EE 开发人员的 Eclipse 3 6 Heli
  • 基于 C# .NET 文档的应用程序操作图

    我想开发一个新的应用程序 用户可以在其中创建描述流程的图表 我认为在这种情况下 基于文档的应用程序是我唯一的选择 我熟悉C net C MFC 和J2EE 根据您的经验 实现这一目标的最佳方法是什么 我应该关注哪个平台 图表必须由方框和箭头
  • Dia:图表编辑器:盒子对象的限制?

    如标题所示 我尝试为 hte 3d 图形引擎 ogre3d 开发尽可能少的方案 问题是大图方案 Ogre Root 类需要相当多的从它下降的箭头 用关系箭头连接框的模型是它们只能通过边界周围的特定点 称为 关节 或其他东西 进入 退出 但现
  • 如何使用 js/uml 对 JavaScript 文件进行逆向工程?

    Goal 我的目标是从我的 JavaScript 项目 由多个 js 文件组成 中获取 UML 模型并将其存储为 XMI 我已经走了多远 我在网上搜索了一下 发现js uml是第一个去的地方 我已经设法让 js uml 插件与 Eclips
  • UML状态图中守卫和事件的区别

    我以为我可以区分event and guard 但我遇到了一个与守卫类似的事件 counter gt 4 pin is high switch on event 我将变量计数器从小于 4 的某个值更改为大于 4 的值作为事件 这是否意味着事
  • 如何在时序图上表示 if 条件 1 else if 条件 2?

    我想知道 如何在序列图上表示 if cond1 else if cond2 语句 if condition1 Do something else if condition2 Do something else if 我不确定是否有两个独立的
  • 与竞争的消费者顺序处理消息

    Problem 我以特定顺序 FIFO 在队列上接收消息 比如订单 我的队列中有竞争的消费者 为了进一步增加复杂性 消费者可能只对订单的特定版本感兴趣 具体取决于其状态 例如版本 1 版本 2 和版本 5 订单版本号在订单上可用 但不能用于
  • 如何在 UML 中正式记录 C# 属性?

    在 UML 类图中记录类的 C 属性的正确方法是什么 我还没有决定这是否是我的答案 但我想我会把它扔在那里以便讨论 这看起来可以接受吗 它是属性类型的实例 其中元数据值放入下面的标记值中 我刚刚弄清楚如何添加自定义立体类型 该箭头只是一个标

随机推荐

  • C#:无法将“System.Int64”类型的对象转换为“System.Int32”类型

    我的代码如下 Dictionary
  • 网络断开后,raft follower如何重新加入?

    我在木筏上遇到了问题 在论文 寻找一种可理解的共识算法 扩展版 中写道 要开始选举 追随者会增加其当前的 任期并过渡到候选状态 第 5 2 节 它还说 AppendEntries RPC 和 RequestVot RPC 中的接收者应为 R
  • CSS - 根据宽度设置高度

    我可以在 CSS 中使用宽度设置高度吗 这就是我现在所拥有的 width 22 5 height width 2 25 background fff url images image bg png background repeat no
  • ASP.NET 有没有更好的方法来查找其他控件中的控件?

    我目前在 ascx 控件中有一个下拉菜单 我需要从同一页面上的另一个 ascx 后面的代码中 找到 它 它的值用作 ascx 2 上 ObjectDataSource 的参数 我目前正在使用这段丑陋的代码 它有效 但我意识到如果控制顺序发生
  • 从 AnyObject 转换为 CGColor?没有错误或警告

    你好 StackOverflow 自从升级到 swift 2 0 以来 我遇到了一个奇怪的问题 我正在尝试设置边框颜色 所以我正在写self layer borderColor borderColor as CGColor其中 border
  • JComboBox 警告阻止在 Eclipse 中打开设计页面

    好的 我正在使用 eclipse 及其 GUI 编辑器 我有一个像这样的字符串 public static String blah Blah Blah Blah Blah 和一个像这样的 JComboBox JComboBox comboB
  • Kafka中如何实现强一致性?

    尝试了解 Kafka 中的一致性维护 请找出场景并帮助理解 Number of partition 2 Replication factor 3 Number of broker in the cluster 4 那么 为了实现强一致性 需
  • 比较日期 < 或 DateDiff 哪个更好?

    哪个被认为更好 select from TableA where productDate lt 12 9 2013 or select from TableA where DATEDIFF day productDate 12 9 2013
  • 使用 drupal_get_form() 传递参数

    这是我使用钩子的自定义模块 假设如果我想将参数传递给 custom1 default form 函数调用 我应该如何传递参数
  • 方案:为什么内部定义比外部定义快?

    我尝试运行下面的程序 define odd internal x define even x if zero x t odd internal sub1 x if zero x f even sub1 x define odd extern
  • printf 类型提升和符号扩展

    我对 printf 和一般情况下类型提升如何发生感到困惑 我尝试了以下代码 unsigned char uc 255 signed char sc 128 printf unsigned char value d n uc printf s
  • 从 {AER} 的 ivreg() 获取第一阶段结果

    有没有办法从中提取第一阶段的结果ivreg 我想看看在不运行单独回归的情况下计算结果如何 这里有一些代码 其中包括 IV 以及我如何手动估计第一阶段以及通过进入第二阶段进行双重检查 library AER y lt rnorm 100 5
  • 反向传播实现问题

    我应该做什么 我有一个黑白图像 100x100px 我应该训练一个反向传播 http en wikipedia org wiki Backpropagation神经网络与该图像 输入是图像的 x y 坐标 从 0 到 99 输出是 1 白色
  • 使用tensorflow-gpu获得可重现的结果

    使用 Tensorflow 处理项目 但是 我似乎无法重现我的结果 我尝试过设置图形级别种子 numpy 随机种子甚至操作级别种子 然而 它仍然无法重现 在 Google 搜索中 大多数人都将罪魁祸首归咎于 reduce sum 函数 因为
  • AS3:将变量转换为动态类型

    是否可以动态地将变量转换为类型 其中类型将是类型的变量Class 考虑以下因素 无效 var myClass Class MyClass var myInstance myClass new myClass 对于上下文 我正在 Flex 4
  • 使用 Swift 以编程方式闪烁屏幕(在“屏幕截图”上)

    为了从这里转换 Objective C 示例 如何以编程方式闪烁屏幕 https stackoverflow com questions 5254508 how to flash screen programmatically我写了以下代码
  • 撤消核心数据更改的操作名称

    我正在寻找一种内置 或易于实现 的方法来让核心数据撤消 重做操作名称读起来像 撤消编辑名字 而不是像它们那样简单地 撤消 或 重做 默认情况下 我有一个核心数据应用程序 并且正在使用它NSUndoManager作为我的 Windows 撤消
  • Spring RedisTemplate:8次调用后方法键挂起

    我使用 Spring RedisTemplate spring data redis 1 7 1 与 Redis 进行通信 我需要通过正则表达式获取然后删除键 例如 context user1 我用的方法 RedisTemplate key
  • Dagger - 在不同组件上获取相同实例

    我遇到了类似的问题this https stackoverflow com questions 40745279 dagger 2 provide same instance between multiple component with
  • 如何用UML表示通信协议?

    在我的 UML 模型中 我有一个系统及其相互通信的子组件 例如 我有一台计算机和一个遥控机器人 它们通过蓝牙进行通信 目前图中的流程类似于 计算机 触发 遥控车 的 setVelocity 函数 在这一点上 我想通过说以下的话来完善沟通 计