什么是UML中类似于结构化分析数据流图的模型?

33

回到黑暗时代(1980年代中期),我经常使用结构化分析中的数据流程图,发现它们非常有用。

我的现任雇主喜欢UML。 我通常使用BOUML,但它不绘制非UML图形。

哪种UML图与数据流程图相对应?

如果没有,则推荐使用哪种UML图表来展示相应的数据?

8个回答

25

可能最接近的是活动图。 它不完全相同;更多受到流程图的影响而非数据流图。 但是:您可以执行DFD中的某些有用操作,例如AD支持并发并将控制流与数据流区分开。

有关比较和差异的详细信息,请参见此问题

[顺便说一句,我仍然使用DFD:在许多情况下它们更简单、更优雅]

希望能有所帮助。


似乎没有其他答案即将出现。 - John R. Strohm
2
我不是UML专家,但我的理解是,UML图表最适合面向对象的设计。面向对象设计弱化了纯数据流,并将重点放在对象及其关系上。因此,您将无法在UML中找到相应的图表。希望这能帮助到您。 - O.C.
@OrcunC:是的,UML是面向对象的。但是:您可以混合使用DFD来定义处理过程,使用类图来定义结构,并使用状态图来控制。这正是Shlaer-Mellor OOA在90年代初所做的。 - sfinnie
如果我理解你的意思正确,你建议使用类图、活动图来代替数据流图。与普通的类图不同的是,它没有类级别的关系(如泛化或继承),而每个类只表示纯粹的数据,类之间的关联表示数据流。我并不是说这不可行,但为了避免混淆不匹配的概念,我更愿意不这样做。我想说的是,UML作为一个概念与DFD非常不同。我建议使用Visio而不是UML建模工具来完成这项工作。 - O.C.
1
@Orcunc:不完全正确。我建议您可以使用活动图来获得接近数据流程图(DFDs)的东西。活动图允许您显示活动(过程)之间的对象流(数据流)。当所有工作都完成后,如果DFDs能够满足您的需求,那么我建议您坚持使用它们。如果您的雇主需要说服,那么向他展示DFD与等效活动图相比看起来多简单吧!续... - sfinnie
显示剩余2条评论

13

UML 2有一个非常好的数据流程图类比: "信息流程图"。

在这里解释了信息流程图:https://web.archive.org/web/20121118061853/http://www.uml-diagrams.org/information-flow-diagrams.html

请注意,UML 2.5具有信息流和信息项,但术语 "信息流程图" 不是官方 UML 2.5 图表分类的一部分。因此,在正式情况下,只需创建一个类或组件图,并在其中添加大量信息流即可获得您的 "信息流程图"。我经常这样做,使用 UML 的信息项来表示我的数据。


2
不知道为什么你的正确回答会被踩,我已经给你点赞了。 - Doc Brown
我正在阅读 UML v2.5.1 规范,其中的“20 信息流”条款。它看起来是 UML 的完全组成部分,但人们不断说它不是 UML 图表分类的一部分。我不明白。我可以在哪里看到这个? - cluxter
在查看了UML v2.4.1规范之后,看起来信息流图确实在辅助包中,但是在v2.5.0和v2.5.1中已经成为UML分类法的一部分。如果有人有更多信息,我会很乐意了解。 - cluxter

4
在面向对象设计中,没有等同的模型。数据与功能分离是数据流图(DFD)的重点,这对于按照过程处理很有帮助。如果你试图使用面向对象设计进行扩展(到世界观),你最终会使用用例图,这对于捕捉本质非常有用。我喜欢DFD,它们非常高级,但可以通过打开DFD框并将其称为一级等级等来进行扩展。
我目前正在学习Go编程语言,它完全不使用对象,在某些方面,我认为DFD建模更适合它。
我也在寻找可以完成此类工作的图表。在Go中,广泛使用基本数据类型的结构体。您可以将原始扩展方法附加到其中,这类似于面向对象,但实际上,如果查看汇编代码,则似乎是函数的语法糖,其第一个参数是要操作的结构体。
我的建议是,如果要进行面向对象的编码,请使用面向对象设计。它们映射更好,并且有助于考虑系统。如果您来自20世纪80年代/90年代的编程,需要花费一些时间才能从过程性代码中解脱出来。一旦您开始考虑对象,那么面向对象设计方法就可以正常工作。它不是严格的方法,因为没有直接的答案可以告诉您使用哪些部分,只是我发现思考对象是最困难的部分。关于这个问题,一本好书是“Object Thinking--David West”......它有助于先考虑对象。一旦开始,很难停止,你可能会像某些人一样陷入名词王国,这是一个可怕的地方,因为你会写无尽的样板代码,以便完美地描述系统。这是编码地狱的一种形式,多年来我一直远离它。
如果您在允许过程性代码甚至混合面向对象/过程性的语言中进行编码,则需要在开始编码之前决定您的范例,例如在Python和Object Pascal(Delphi)中,您可以选择使用面向对象或过程性编码将代码混合到混乱的范例中。这将决定应该使用哪些图表工具以及如何分析系统。
最近,在Java和C#中出现了提供函数编程技术的变化。我发现这些并不属于编程的任何一个类别(面向对象或过程性)。尝试将功能性编程代码映射到对象中是一场噩梦。
对不起,我没有提供答案,但这取决于您正在编写的代码。

如果您查看汇编代码,它似乎是一个函数的语法糖,其第一个参数是您希望函数操作的结构体。你认为Java或C ++中的成员函数是什么? - MikeMB
1
不同的人有不同的想法。我见过很多情况下,面向对象编程被用来代替过时的过程式风格;结果就是一团糟。最佳教师奖应该颁给我认识的一位老师,他用植物的层次结构作为继承的例子。说真的,番茄对象?@user7665665提到的“信息流程图”是一个很好的建议(给你的老板)。我想说的是,在传统函数可以胜任的工作中,尽量不要使用番茄(你知道我的意思)。最后,多范式存在是因为它很有用:接受它,并添加一个数据流程图。 - A Koscianski

3
没有直接的类比,因为UML强调面向对象设计,而DFD来自结构化系统分析和设计(SSAD)。在UML中,一些图表,特别是“交互图”组中的那些图表具有可能对数据流和处理元素建模的特点。通信图可以用于反映DFD的大部分方面,而序列图可以模拟特定的流程。如果您想建议DFD语义,则可以使用带有数据处理和数据存储的构造型对象,并使用外部实体的参与者。
值得注意的是,Sparx Systems Enterprise Architect虽然主要是UML工具,但包括了DFD作为扩展。

2

类似的图表包括:

  1. 信息流程图
  2. 通信图
  3. 时序图

0

我使用Enterprise Architect的“动态视图”分析图。
控制=过程
信息=数据存储
在许多方面,他们的分析图比数据流图好得多,因为您还可以展示发送和接收事件的形式,并且还有一个过程符号,但我更喜欢控制。它包括对象和决策。


0
理论上,在 UML 中可以定义新的图表类型,可选地扩展一个或多个传统的图表类型。在 UML 中定义的规范图表类型实际上是作为 UML 元模型本身的一部分定义的。
形式上,在由对象管理组(OMG)发布的 UML 规范 中提供了 UML 元模型的定义,以及 MOF 中定义的相应的元元模型 - 还有一个相应的 规范 - 此外还伴随着正式的 OCL 规范,关于在 UML 模型中使用 OCL 语言应用约束的定义 - 然后是 XMI 规范,关于如何以机器可读格式存储 UML 模型的规范。
表面上,所有这些规范都可以结合起来应用,就像在 UML 建模的任何单个框架“底层”一样 - 无论是在使用 UML 元模型的 Ecore 子集,还是在经典的 UML 中。

回顾有关数据流程图的简短学术演示 - 虽然与UML图种的正式定义有所偏离,但仍在MOF元元模型应用的更广泛背景下 - 也许是规范的BPMN元模型 - 在其传统的图形抽象语法中 - 也许BPMN可以提供一些类比于数据流程图的东西?

当然,建模实践可能因供应商和应用环境而异。


0
我认为数据流程图就像是一个顺序图,因为数据生产者和数据消费者通过同步和/或异步消息来创建、使用和销毁数据对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接