是否有一种描述线程的局部UML方法

时间:2009-06-05 03:44:52

标签: multithreading uml

我喜欢使用UML图来描述我的软件。在大多数情况下,这些图表仅供我自己使用,我将它们用于更多涉及的代码,交互等方面。我将从中受益于将来能够回顾它们。

我发现自己做了一些不同的方法就是绘制线程图。线程本质上倾向于弹出更复杂的代码片段并跟踪它们通常是我的设计文档的主要目的。

在过去,我在序列图中使用了一个符号来显示新线程的创建,但回顾一些图表这样做,它有时在对象的生命周期 - 序列图所针对的 - 和线程的生命周期之间是模糊的。是否有更好的方法将线程合并到UML中?

8 个答案:

答案 0 :(得分:11)

我设法制作了一个在绘制时对我有意义的图表。基本前提是我用表示线程生命周期的蓝框重叠表示类实例的灰色框。它让我跟踪的主要事情是知道当我调用某些方法时我将执行哪个线程。

毫无疑问,有更好,更直观的方法来进行线程和类建模。对我而言,衡量成功的标准是我自己的图表是否在6个月后仍能给予我相同的理解水平。

答案 1 :(得分:9)

活动,序列和状态图是所有显示线程行为的正确方法。

1st:(对于vs的评论)UML中有两组图表或建模元素,静态结构,如你所说,以及行为。任何一本书都会帮助你理解分裂,通常在内容/ TOC中,另外它可以在Martin Fowler的UML Distilled的第11页上看到,在我看来,开始UML是一个近乎真实的标准。

第二名:(对于sipwiz的问题和评论)活动图通常不被理解为建模业务流程,但是它们可以用于此,大多数示例或简单的教程都会从业务中接近它观点出发

讨论您对线程建模的选择:

活动图 - 允许使用BAR和使用行来分叉和指定并发。请注意,底部的示例不是业务流程example。大多数人可以阅读这些,业务,管理和开发人员,但有时他们可能缺乏细节或变得混乱。

序列交互图 - 在同一篇文章example中,您将看到序列图允许您通过使用标签“par”装入可并行化的行为来指定序列中的并行行为,这有助于向读者展示可以或应该并行调用哪些方法,即通过不同的线程。这是我将用于详细开发人员的方法,例如围绕构建对象的讨论。

状态图 - 状态图就像活动允许使用BAR和用法行进行并发。

注意: 这些不会为特定线程建模并且它是精确的提升周期,因为这是实例/运行时建模级别的一部分,如果这是什么你想澄清你的问题,我会回应。我只是使用上面的一个来建模,因为除了MDA / UML专家之外没有人会打电话给你,而你没有生成一个正在运行的系统。

另外:请注意,大多数UML书籍都可以找到更多详细信息。 还利用了:http://www.jguru.com/faq/view.jsp?EID=56322

答案 2 :(得分:8)

传统上使用Petri网以图解方式描绘了线程。 Rob Martin对UML中的多线程有an article,您可能会发现它很有用。

更新 - 只记得您可以在活动图表中表示带有分叉的线程 - 我已设法find something that explains this

很难找到Petri Nets的任何免费教程,但我知道Petri Nets对于建模并发性有好处,所以我谷歌“生产者 - 消费者Petri网”(我最喜欢的线程)和{{3} }。

我还发现了一些显示Petri网found this的幻灯片。

答案 3 :(得分:4)

UML活动图有fork和join元素来显示并行的逻辑流。

答案 4 :(得分:2)

我不知道一种方法,但是考虑到一个线程在许多语言中实现为Thread(或类似的)类,使用序列图似乎并不完全不合适。

最兼容UML的方法可能是添加某种注释,表明'object'代表一个线程。

答案 5 :(得分:2)

UML由UML上层结构定义,您可以在http://www.omg.org/spec/UML找到它。 如果您阅读规范,则会发现UML类可以处于活动状态。 Active Class是meta-属性isActive设置为true的类。它的描述也不同。 活动类的对象实例自动执行“分类器行为”。对于任何行为,您可以通过等待异步信号(AcceptEventActions)和调用方法(CallOperationAction)或其他行为(CallBehaviorActions)的活动来定义它。这就是在UML中建模活动对象的方式。您只需阅读UML规范。

答案 6 :(得分:1)

活动图将使用 forks和join来表示线程来模拟软件的内部工作。要找到完全如何正确建模,请参阅Conrad Bock的优秀系列文章。 Here是涵盖分支和联接的文章,但您应该按照链接回到本系列的第一篇文章,以了解如何使用" Colored Petri Nets"正确建模。这不是你的想法(这很简单)!

OMG处有一个新的进程内标准,用于称为Alf的语言,为活动图提供更方便的表面符号,用于表示代码。来自规范:

  

动作语言的主要目标是充当指定可执行文件的表面符号   更广泛的模型中的行为,主要使用通常的图形符号表示   UML。例如,这可能包括类操作或转换效果的方法   国家机器上的行为。

对于程序员来说,你可能不会比Alf更直观。它将完美转换为UML活动图。

答案 7 :(得分:0)

UML最强点是描绘静态结构。如果你使用短命的线程,我也没有看到任何简单的方法来绘制它们。也许你可以通过改变一下来找到解决方案:你为什么要使用/需要线程?它们提供的功能是什么?如果它们彼此交互并遵循一些(消息传递)API,那么将它们作为组件绘制可能是有意义的。