DFD(数据流程图)和活动图之间的区别

29

我需要了解它们之间的差异,以便正确地使用它们。

DFD和活动图之间的区别是什么?


不要使用数据流程图——它们已经过时了。 - John Saunders
34
C语言虽然老旧,但仍有其用处。不要因为某样东西已经老了就轻易地对其进行否定。否则我的妻子多年前就会离开我了 :-) - paxdiablo
6
DFD 没有问题,它们可以在 UML 无法胜任的地方发挥作用,特别是在建模线程执行和数据传递的情况下。 - WeNeedAnswers
5个回答

31

实际上,它是相当合乎逻辑的。您只需要看名字。

数据流程图中,“框框”之间的线表示系统组件之间流动的数据。因为这些只显示数据流,而不给出顺序的指示(1)

活动图中,这些线仅是活动之间的转换,根本不代表数据流。它们更代表活动和决策的顺序。您可以从中看出事情发生的顺序。

这是一个简单的解释,但应该是一个很好的起点。有关DFDs活动图的进一步信息可以从维基百科获得。


(1)还有一种图表风格,即UML序列图,可以显示特定会话类型的排序,例如(请参见顺序图的维基百科条目):

UML sequence diagram example

这个时间从上到下递增,所以顺序应该很明显。


@John,我从未见过它们被用于那种方式。这些线条一直代表控制流而不是数据流。实际上,我们最初学的是它们只是具有并发性的流程图 :-) 当然,我可能在这方面错了,这不会是第一次,但我认为唯一的方法是仍将其视为控制流程图,但让某些对象与控制一起流动。 - paxdiablo
2
@paxdiablo:活动图可能包括带有对象流边缘的对象流:http://www.uml-diagrams.org/activity-diagrams.html#object-flow-edge - Jakub Narębski

16

明确偏见: 我是DFDs支持者。

@John正确指出活动图可以用来表示对象流。@pax同样正确地指出它们很少被使用。

对我来说,DFD有两个巨大的优势:

  1. 与对象模型相关联。DFD上的数据存储提供了一种非常好的方式来将所产生/消耗的数据与对象模型链接起来。这对于一致性和确保思维连贯非常有用。

  2. 它们弱化了控制流。设计经常会过度约束顺序。活动图确实支持并发-但需要用户去记住和使用。因此,默认情况下过度串行化。 DFD则不需要。它们在没有任何额外的用户努力下展示了真正的序列依赖关系。因此,也更容易看到因果关系。如果进程a和b都需要数据输入D,则在图表上显而易见。因此,并行活动是显而易见的。

别误会我的意思-我并不反对活动图。在控制流是主要考虑因素的情况下,我会选择AD而不是DFD。但是根据经验,我会认为在约70-80%的情况下,DFD是一个更有用的工具。

当然,你的情况可能有所不同。


作为数据流图(DFDs)的支持者,你能告诉我DFDs是否仅与结构化编程和活动图对象导向编程有关吗?我经常在网络上看到这样的表达方式,并且在学习中被教授SSADM而非UML,似乎二者无法共存。这是真的吗?必须如此吗? - bluekeys
3
@Dsjbirch:不,没有什么固有的东西将DFD与过程性程序联系在一起 - 或将AD与OO联系起来。OMT和Shlaer-Mellor是在UML之前使用DFD表达处理的面向对象方法。AD实际上是流程图的演变,并且没有任何关���面向对象的东西。例如SSADM和UML之间的分离更多地在于其支持者的理念。虽然存在一些差异,但两者都基于类似的建模构造。您应该使用对您有效的方法,如果这意味着选择不同技术的方面,那完全没问题。希望对您有所帮助。 - sfinnie

1

我认为,对于那些需要向高级管理层和CIO解释流程(无论是计算机还是手动流程)的人来说,简单明了最好,并且在被要求提供详细信息时,数据流图可以更好地传达信息。尽管如此,更好的方法始终是练习故事情节并用简单的答案回答问题。

关于工具和产品的年龄,最后一个评论是,记住大多数情况下它们都在运营业务且表现良好。格言“你打破它(或替换它),你就拥有它”可能会让你成为英雄,也可能让你成为小丑。

我们有一个CIO希望替换所有主机应用程序,理由仅仅是它们是旧技术。人们必须权衡后果并理解替换是否能够处理工作负载。你是否想过为什么JPMC,Credit Swiss,Walmart和Bank of America等公司仍然在运行主机?

对于使用的任何分析工具,我的道歉,确保文档化替换的所有方面,包括工作负载,I/O,并发用户,采用曲线和可扩展性。


0

数据流程代表一个模块或独立代码内的流程。然而,时序图代表不同模块之间活动的时序。

在某些点上它们可能传递相同的信息。

我基本上在接口文档中使用时序图,这将与其他模块/元素共享,然而在低级设计文档中将使用DFD,以便于开发一个模块或网络元素的代码。


0
如果我们更仔细地观察数据流程图,就会发现当节点从所有边收集数据后,它就开始处理这些数据。而要进行处理,它需要一个活动标记,表示对处理器的访问权限。通常获取该标记的过程被省略了,但它必须存在。通常,整个节点作为标记放入双端队列中,在该队列的另一端存储空闲的活动(处理器或线程)。线程池是这种队列的完美例子,准备工作的节点被表示为任务。一旦节点遇到活动,它们都将从队列中取出,并且实际处理将开始。当处理完成时,活动将返回队列。这样,我们可以把活动想象成一种特殊类型的标记。
因此,数据流和活动图仅是一般主动数据流程图的简化版,其中省略了活动或数据标记。但通常情况下,两种标记都可以同时在图表中表示。

程序员过去常将线程视为活动,但如果我们仔细观察,会发现当一个线程准备好执行时,它会排队等待处理器,只有当一个空闲的处理器切换到该线程时,真正的执行才开始。这与任务在线程池上执行的情况类似。因此,从简化的角度来看,线程是一种活动,而从更严格的角度来看,线程是一种数据令牌,唯一真正的活动是物理处理器。这表明活动令牌与数据令牌并没有区别。实际上,我们可以忽略节点追踪活动的路径,将数据流节点本身视为一个活动,当其所有边缘(输入)都包含数据时,它立即开始工作。


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