【问题标题】:UML Activity Diagram with variable number of concurrent flows具有可变数量并发流的 UML 活动图
【发布时间】:2018-01-17 01:18:11
【问题描述】:

我正在努力在 UML 中建模一个发生可变数量并发流的场景。一个良好而简单的现实生活场景将是 POOL 拼车服务。对于第一个骑手来说,整个流程似乎很容易。然而,一旦第一个骑手在车里,司机接了第二个骑手,那么在图表上就很难显示了,因为现在骑手 1 和骑手 2 是并发流,这些并发流的数量总是可变的,在 0 和 number 之间汽车的最大座位数。

对这种行为建模的最佳 UML 图类型和技术是什么?如何向观众解释和描述可变数量的并发流?

受众是非技术性的,他们是高层管理人员/财务人员,所以我想保留有关线程/类/对象的具体细节。

这是我的尝试:

【问题讨论】:

    标签: concurrency uml


    【解决方案1】:

    您在图表中显示的是对整个应用程序流程的分析。这具有一些示例性特征,针对骑手应用程序的一个实例、服务器的一个实例和司机应用程序的一个实例进行展示。您现在想为任意数量的骑手和司机应用程序实例显示此内容。这是设计,因为包含多个骑手实例的分析与一个实例相同,因为各个骑手应用程序实例之间没有交互(至少在您的示例中没有给出)。驱动程序实例也是如此。这意味着并发只发生在服务器设计的范围内。在这里,您需要明确地处理这个问题。所以首先你应该开发一个静态设计来处理不同的客户端类型,即你应该有一个用于骑手应用程序的客户端外观和一个用于驱动程序的客户端外观。客户端和服务器之间的每次交互都有会话对象等等。此外,您还有一个包含服务器逻辑的服务器组件。现在您需要决定服务器如何处理来自客户端的请求。由于每个客户端都有线程是没有好处的,因此您有一个线程池和请求队列。

    您应该为每个服务器线程定义一个活动,显示如何处理数据,例如出列、排序、处理,这是通过显示一次来完成的。当您需要在线程之间进行通信时,您可以使用发送和接收消息动作,这是活动之间同步和通信的正确模型元素。此外,您应该为客户端外观定义活动,显示如何从客户端应用程序接收数据并将其发送给它们。在那里你的观点也应该集中在实例上。

    另一种可能性是使用状态图显示实例的状态以及它们如何使用事件和操作进行同步。但是这样一来,您想要显示的动作就不太显眼了。

    一般来说,多线程在 UML 中被非常隐式地处理。这当然有一些缺点,也有一些好处。尤其是对于低级设计(例如,对于安全关键系统)需要明确视图的非常复杂的情况,这是一个问题。有一些专用的建模语言可用,例如 AADL。对于大多数业务应用程序和 esp。非常大规模的应用程序 UML 方式是好的或至少绝对足够。由于更明确的方式会导致更高层次上更复杂的设计,因此我们的目标是防止这种情况发生。

    【讨论】:

    • 非常感谢您抽出宝贵时间回答我的问题。由于观众是相当非技术性的,作为高层管理人员/财务人员,我更愿意将低级别的细节(如线程/类)保留在这张图片之外。我的重点是用可能最简单的方式解释有多个并发活动,它们可以异步启动/停止。我喜欢您指出服务器/骑手/驱动程序实例数量的方式。
    【解决方案2】:

    这是另一种在活动图上显示灰色并发流的方法,但还添加了额外的活动/状态图以显示驱动程序的观点。最重要的是,我添加了信号,因为它们应该描述异步活动。

    但是我担心并发流可能仍然令人困惑。在最简单的情况下,会有:1 个服务器1 个驱动程序(驱动程序应用)和多个骑手(骑手应用)。活动图上可见的内容表明存在多个驱动程序(驱动程序应用程序)!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多