UML 之 数据流图(DFD)

    数据流图(Data Flow Diagram):简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。

本文参考书籍:软件设计和体系结构(第二版) 秦航主编

1、DFD两种类型

      数据流图有两种典型结构,一是变换型结构,它所描述的工作可表示为输入、主处理和输出,呈线性状态。另一种是事务型结构,这种数据流图呈束状,即一束数据流平行流入或流出,可能同时有几个事务要求处理。

      数据流图不是传统的流程图框图数据流也不是控制流。数据流图是从数据的角度来描述一个系统,而框图是从对数据进行加工的工作人员的角度来描述系统。

                                           变换型结构数据流图

                                                   事务型结构数据流图

2、四大组成元素

      数据流是名词。在数据流图中数据流用带箭头的线表示,在其线旁标注数据流名。在数据流图中应该描绘所有可能的数据流向,而不应该描绘出现某个数据流的条件。  

      数据流图中有以下几种主要元素:

(1)数据流。数据流是数据在系统内传播的路径,因此由一组成分固定的数据组成。如订票单由旅客姓名、年龄、单位等数据项组成。由于数据流是流动中的数据,所以必须有流向,除了与数据存储之间的数据流不用命名外,数据流应该用名词或名词短语命名。

(2)外部实体。代表系统之外的实体,可以是人、物或其他软件系统。

(3)加工。(唯一用动词表示)加工是对数据进行处理的单元,它接收一定的数据输入,对其进行处理,并产生输出。

(4)数据存储。表示信息的静态存储,可以代表文件、文件的一部分、数据库的元素等。(读文件是箭头从存储指向加工,写文件 箭头是从加工指向存储)

3、注意事项

(1)不能重名,必须名词,除了与存储外,不需要有名,其他情况必须带有名称。一个加工的输出数据流不应与输入数据流同名,即使它们的组成成分相同。

(2)保持数据守恒。也就是说,一个加工所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者说是通过该加工能产生的数据。

(3)每个加工必须既有输入数据流,又有输出数据流。

(4)所有的数据流必须以一个外部实体开始,并以一个外部实体结束。

(5)外部实体之间不应该存在数据流,因为数据流的起点和终点中必须有一个是加工 (处理)。

⑥父图与子图的平衡。子图的输入输出数据流同父图相应加工的输入输出数据流必须一致,此即父图与子图的平衡。

      在分层DFD中,需要保持父图与子图的平衡。即父图中某加工的输入输出数据流必须与其子图的输入输出数据流在数量和名字上相同,或者父图的一个输入(或输出)数据流对应于子图中几个输入(或输出)数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一个数据流。

4、DFD画法

(1)确定系统的输入输出

由于系统究竟包括哪些功能可能一时难于弄清楚,可使范围尽量大一些,把可能有的内容全部都包括进去。此时,应该向用户了解“系统从外界接受什么数据”、“系统向外界送出什么数据”等信息,然后,根据用户的答复画出数据流图的外围。

(2)由外向里画系统的顶层数据流图

首先,将系统的输入数据和输出数据用一连串的加工连接起来。在数据流的值发生变化的地方就是一个加工。接着,给各个加工命名。然后,给加工之间的数据命名。最后,给文件命名。

(3)自顶向下逐层分解,绘出分层数据流图

对于大型的系统,为了控制复杂性,便于理解,需要采用自顶向下逐层分解的方法进行,即用分层的方法将一个数据流图分解成几个数据流图来分别表示。

    

(1)首先画系统的输入输出,即先画顶层数据流图。顶层流图只包含一个加工,用以表示被开发的系统,然后考虑该系统有哪些输入数据、输出数据流。顶层图的作用在于表明被开发系统的范围以及它和周围环境的数据交换关系。下图为飞机机票预订系统的顶层图。

(2)画系统内部,即画下层数据流图。不再分解的加工称为基本加工。一般将层号从0开始编号,采用自顶向下,由外向内的原则。画0层数据流图时,分解顶层流图的系统为若干子系统,决定每个子系统间的数据接口和活动关系。例如,在上面的机票预订系统按功能可分成两部分,一部分为旅行社预订机票,另一部分为旅客取票,两部分通过机票文件的数据存储联系起来,0层数据流图如

<think>嗯,用户问的是画数据流图用什么工具,我需要先理解数据流图是什么。数据流图DFD)是结构化系统分析的工具,用来展示系统内部的数据流动和处理过程。接下来,我需要考虑用户可能的背景,可能是学生或者刚入行的开发人员,想学习如何绘制数据流图。 首先,用户可能需要知道数据流图的基本概念,但问题已经聚焦在工具上,所以重点应放在工具推荐。需要分门别类,比如传统绘图工具、专业工具、在线工具、编程工具等,这样用户可以根据自己的需求选择。 然后,每个类别里要列出常用的软件,比如Visio、Lucidchart、Draw.io这些比较流行的工具。对于每个工具,需要简单说明优缺点,比如Visio功能强大但需要付费,Draw.io免费但功能可能稍逊。还要考虑到用户可能需要的平台兼容性,比如在线工具无需安装,适合快速使用。 另外,用户可能对数据流图的绘制步骤不太清楚,是否需要简要说明?但根据问题,用户主要问的是工具,所以可能不需要详细步骤,但可以提到一些工具提供模板或符号库,方便绘制。 还要注意推荐的工具是否有学习资源或社区支持,比如Visual Paradigm有教程,这对新手有帮助。同时,开源工具如PlantUML可能适合喜欢用代码生成的用户,但需要一定的学习成本。 需要检查是否有遗漏的工具类别,比如是否提到专业工具中的Enterprise Architect,或者编程工具中的Graphviz。还要确保推荐的工具覆盖不同用户需求,比如学生可能更喜欢免费工具,企业用户可能需要专业版。 最后,总结部分要简明扼要,根据用户需求推荐合适的工具,并提醒注意绘图的规范性,比如分层清晰、符号统一,这部分能帮助用户正确使用工具,避免画出不符合标准的数据流图。 现在需要组织语言,结构清晰,分点说明,让用户容易理解。同时确保每个工具的特点明确,比如是否免费、是否在线、适合什么场景。可能需要用列表形式,但用户要求避免Markdown,所以用自然段分点。还要注意中文表达,术语准确,比如“数据存储”“外部实体”等。 检查是否有错误,比如Visio是否支持数据流图符号,Draw.io是否确实有模板。确认每个工具的描述正确,避免误导用户。最后,确保回答符合系统级指令,数学公式正确,但这里可能用不到数学公式,所以可以忽略。结构上分步骤,先介绍工具类型,再具体推荐,最后总结,符合用户要求的结构清晰。</think>画数据流图(Data Flow Diagram, DFD)主要用于描述系统中数据的流动、处理和存储关系,常用于系统分析与设计。以下是具体工具和方法的逐步说明: --- ### **一、常用工具分类** #### 1. **传统绘图工具** - **Microsoft Visio** - **特点**:功能全面,内置DFD符号库,支持自定义形状。 - **适用场景**:企业级复杂系统设计,需较高规范性。 - **注意**:需付费,学习成本中等。 - **Lucidchart** - **特点**:在线协作,模板丰富,支持实时共享。 - **适用场景**:团队协作或快速原型设计。 - **注意**:免费版功能有限,高级版需订阅。 #### 2. **免费在线工具** - **Draw.io(现为diagrams.net)** - **特点**:完全免费,界面简洁,支持导出多种格式(PNG、PDF等)。 - **适用场景**:学生、个人开发者或小型项目。 - **注意**:符号库需手动加载DFD相关模板。 - **Visual Paradigm Online** - **特点**:提供DFD专用模板,支持一键生成分层图。 - **适用场景**:快速生成多层数据流图(如上下文图、Level 0/1图)。 - **注意**:免费版有导出限制。 #### 3. **专业建模工具** - **Enterprise Architect** - **特点**:集成UMLDFD建模,支持代码生成与反向工程。 - **适用场景**:大型系统开发,需结合其他模型(如用例图)。 - **注意**:价格较高,适合专业团队。 - **EdrawMax(亿图图示)** - **特点**:中文友好,模板丰富,支持跨平台。 - **适用场景**:教育或非技术用户快速上手。 - **注意**:部分高级功能需付费。 #### 4. **编程/文本生成工具** - **PlantUML** - **特点**:通过代码生成图表,支持版本控制。 - **示例代码**: ```plaintext @startdfd component "订单系统" as Order database "库存数据库" as DB entity "客户" as Customer Customer --> Order : 提交订单 Order --> DB : 查询库存 @enddfd ``` - **适用场景**:开发者偏好代码化设计,需集成到文档工具(如Markdown)。 - **注意**:需熟悉语法,可视化编辑能力弱。 - **Graphviz** - **特点**:基于DOT语言生成流程图,可自定义布局。 - **适用场景**:自动化生成复杂数据流关系。 - **注意**:需编程基础,调试布局较耗时。 --- ### **二、绘制数据流图的关键步骤** 1. **确定系统边界**:明确上下文图中的外部实体(如用户、其他系统)。 2. **分层细化**: - Level 0图:概括主要流程(如“订单处理”“库存更新”)。 - Level 1图:分解Level 0中的每个处理节点。 3. **标注数据流**:用箭头标明数据方向,并添加简短描述(如“订单详情”“库存状态”)。 4. **添加数据存储**:用双横线表示数据库或文件(如“用户信息表”)。 --- ### **三、推荐选择建议** - **学生/个人使用**:优先选Draw.io或PlantUML(免费且轻量)。 - **团队协作**:Lucidchart或Visual Paradigm Online(实时协作功能强)。 - **企业级设计**:Microsoft Visio或Enterprise Architect(支持复杂需求)。 --- ### **四、注意事项** - **规范性**:遵循DFD符号标准(如圆形表处理、箭头表数据流)。 - **分层清晰**:避免单张图过度复杂,通过分层逐步展开细节。 - **工具适配性**:若需与开发流程结合,优先支持代码生成的工具(如PlantUML)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhousenshan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值