(一)分层数据流图的设计方法 :
=====
第一步,画子系统的输入输出
把整个系统视为一个大的加工,然后根据数据系统从哪些外部实体接收数据流,以及系统发送数据流到那些外部实体,就可以画出输入输出图。这张图称为顶层图。
第二步,画子系统的内部
把顶层图的加工分解成若干个加工,并用数据流将这些加工连接起来,使得顶层图的输入数据经过若干加工处理后,变成顶层图的输出数据流。这张图称为0层图。从一个加工画出一张数据流图的过程就是对加工的分解。
可以用下述方法来确定加工:
在数据流的组成或值发生变化的地方应该画出一个加工,这个加工的功能就是实现这一变化,也可以根据系统的功能决定加工。
确定数据流的方法
用户把若干数据当作一个单位来处理(这些数据一起到达、一起处理)时,可以把这些数据看成一个数据流。
关于数据存储
对于一些以后某个时间要使用的数据,可以组织成为一个数据存储来表示。
第三步,画加工的内部
把每个加工看作一个小系统,把加工的输入输出数据流看成小系统的输入输出流。于是可以象画0层图一样画出每个小系统的加工的DFD图。
第四步,画子加工的分解图
对第三步分解出来的DFD图中的每个加工,重复第三步的分解过程,直到图中尚未分解的加工都是足够简单的(即不可再分解)。至此,得到了一套分层数据流图。
第五步,对数据流图和加工编号
对于一个软件系统,其数据流图可能有许多层,每一层又有许多张图。为了区分不同的加工和不同的DFD子图,应该对每张图进行编号,以便于管理。
● 顶层图只有一张,图中的加工也只有一个,所以不必为其编号。
● 0层图只有一张,图中的加工号分别是0.1、0.2、…,或者1, 2 。
● 子图就是父图中被分解的加工号。
● 子图中的加工号是由图号、圆点和序号组成,如:1.12,1.3 等等。
========================
(二)应该注意的问题:
1. 应适当的为数据流、加工、数据存储以及外部实体命名,名字应该反映该成分的实际含义,避免使用空洞的名字。
2. 画数据流图,不是画控制流。
3. 一个加工的输出数据流,不应与输入数据流同名,及时他们的组成完全相同。
4. 允许一个加工有多条数据流流向另一个加工,也允许一个加工有两条相同的输出数据流流向不同的加工。
5. 保持父图与子图的平衡。也就是说,父图中的某加工的输入输出流必须与他的子图的输入输出数据流在数量上和名字上相同。值得注意的是,如果父图中的一个输入(输出)数据流对应于子图中的几个输入(输出)数据流,而子图中组成这些数据流的数据项的全体正好是父图中的这一个数据流,那么他们仍然算是平衡的。
6. 在自顶向下的分解过程中,若一个数据存储首次出现时,只与一个加工有关系,那么这个数据存储应作为这个加工的内部文件而不必画出。
7. 保持数据守恒,也就是,一个加工的所有输出数据流中的数据必须能从该加工的输出流中直接获得,或者通过该加工能产生的数据。
8. 每个加工必须既有输入数据流,又有输出数据流。
9. 在整套数据流图中,每个数据存储必须既有读的数据流,又有写的数据流。但是在某张子图中,可能只有读没有写,或者只有写没有读。
特别注意上面的几点,都是考试的目标。近两年考试的内容都集中到2、5、6、8的几点上。
============
(三)范例一:
数据流图(DFD)
数据流图,简称DFD,是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。
下图是一个飞机机票预订系统的数据流图,它反映的功能是:旅行社把预订机票的旅客信息 (姓名、年龄、单位、身份证号码、旅行时间、目的地等)输入机票预订系统。系统为旅客安排航班,打印出取票通知单(附有应交的账款)。旅客在飞机起飞的前一天凭取票通知单交款取票,系统检验无误,输出机票给旅客。
=================
(四)基本图形符号:
数据流图有四种基本图形符号:
:箭头,表示数据流;
〇:圆或椭圆,表示加工;
= :双杠,表示数据存储;
□:方框,表示数据的源点或终点。
(1) 数据流。数据流是数据在系统内传播的路径,因此由一组成分固定的数据组成。如订票单由旅客姓名、年龄、单位、身份证号、日期、目的地等数据项组成。由于数据流是流动中的数据,所以必须有流向,除了与数据存储之间的数据流不用命名外,数据流应该用名词或名词短语命名。
(2)加工(又称为数据处理)。对数据流进行某些操作或变换。每个加工也要有名字,通常是动词短语,简明地描述完成什么加工。在分层的数据流图中,加工还应编号。
(3)数据存储(又称为文件),指暂时保存的数据,它可以是数据库文件或任何形式的数据组织。
(4)数据源点或终点,是本软件系统外部环境中的实体(包括人员、组织或其他软件系统),统称外部实体。一般只出现在数据流图的顶层图。
3.3.2画数据流图的步骤
(1)首先画系统的输入输出,即先画顶层数据流图。顶层流图只包含一个加工,用以表示被开发的系统,然后考虑该系统有哪些输入数据、输出数据流。顶层图的作用在于表明被开发系统的范围以及它和周围环境的数据交换关系。下图为飞机机票预订系统的顶层图。
(2)画系统内部,即画下层数据流图。不再分解的加工称为基本加工。一般将层号从0开始编号,采用自顶向下,由外向内的原则。画0层数据流图时,分解顶层流图的系统为若干子系统,决定每个子系统间的数据接口和活动关系。例如,在上面的机票预订系统按功能可分成两部分,一部分为旅行社预订机票,另一部分为旅客取票,两部分通过机票文件的数据存储联系起来,0层数据流图如图3-4。
(3)注意事项。
①命名。不论数据流、数据存储还是加工,合适的命名使人们易于理解其含义。
②画数据流而不是控制流。数据流反映系统“做什么”,不反映“如何做”,因此箭头上的数据流名称只能是名词或名词短语,整个图中不反映加工的执行顺序。
③一般不画物质流。数据流反映能用计算机处理的数据,并不是实物,因此对目标系统的数据流图一般不要画物质流。
④每个加工至少有一个输入数据流和一个输出数据流,反映出此加工数据的来源与加工的结果。
⑤编号。如果一张数据流图中的某个加工分解成另一张数据流图时,则上层图为父图,直接下层图为子图。子图及其所有的加工都应编号。
⑥父图与子图的平衡。子图的输入输出数据流同父图相应加工的输入输出数据流必须一致,此即父图与子图的平衡。
⑦局部数据存储。当某层数据流图中的数据存储不是父图中相应加工的外部接口,而只是本图中某些加工之间的数据接口,则称这些数据存储为局部数据存储。
⑧提高数据流图的易懂性。注意合理分解,要把一个加工分解成几个功能相对独立的子加工,这样可以减少加工之间输入、输出数据流的数目,增加数据流图的可理解性。
图3-6给出了采用这套符号画出的等价于图3-2的DFD。
3.3.3流程图的实例
==================
(五)其他:
同一个数据流图上不能有同名的数据流,如果两个以上的数据流指向一个加工,或是从一个加工中输出两个以上的数据流,这些数据流往往存在一定关系,如图:
数据存储文件:流向数据存储的数据流可以理解为写入文件或查询文件,从数据存储流出的数据流可以理解为从文件读数据或得到查询结果。
数据源点或终点:是系统外部环境中的实体,也称外部实体。它们作为系统与系统外部环境的接口界面,在实际问题中可能是人员、组织、其他硬件系统等。一般出现在顶层数据流图中。
数据流图的设计原则
下面我们通过一些示例来说明这些设计原则
示例1:
上图违反了父图与子图的平衡原则。
因为父图中有提货单输出流,但子图中没有与这条输出流相关的输出流。
我们看两者的输入流,父图的输入流是订货单,而子图的输入流是数量,账号,客户,这是平衡的,因为子图的三条输入流是对父图输入流的分解,同样子图中的加工4.1,4.2,4.3也可以看成是对父图加工4的分解,这符合自顶向下,逐层细化原则
示例2:
下面是一张有错的数据流图。
(1)根据数据守恒原则,外部实体和外部实体,外部实体和数据存储之间不能存在数据流,,存储与存储之间也不应该有数据流,数据流必须跟加工有关,没有加工数据流不可能流来流去的。
(2)对于加工,输入是A,输出还是A,也违反了数据守恒原则,输入与输出一样,加工没有作用。
(3)对于加工,只有输入没有输出,违反了数据守恒原则。比如,人不可能只吃饭,不大小便。嘿嘿
(4)对于加工,只有输出没有输入,违反了数据守恒原则。比如,人不可能一直大小便,但不吃饭。嘿嘿
示例3:
加工细节隐蔽原则说的是:在画父图时,只需画出加工和加工之间的关系,而不必画出各个加工内部的细节,例如上面的父图中,并没有画出加工1的内部细节
再进行对加工1进行细化的时候,我们就应该画出它的内部细节,如第二个图。
简化加工之间的关系:加工间的数据流越少,各个加工就越相对独立,耦合越低,所以应尽量减少加工间输入/输出数据流的数目。
均匀分解:不要出现,一些加工分解了10层,而另一些加工分解了3层这样的情况
忽略枝节:暂时不要考虑一些例外情况,出错处理等枝节性问题。
表现的是输入流而不是控制流:不要和程序流程图混淆,数据流图,强调从数据加工的角度来描述系统,自然是数据流。
这些原则中,最重要的当属:保持父图与子图平衡,保持数据平衡,加工细节隐蔽
一般从这三个原则来考查一张数据流图是否正确。
数据字典
数据字典的就是对数据流图中出现的所有被命名的图形元素在数据字典中作为一个词条加以定义,使每个图形元素的名称都有一个确切的解释。
在对数据流和数据文件词条进行描述时可能包含一定的数据结构,对于数据结构的描述常用的是定义是。如下表
在数据字典中有4种类型的条目:
1、数据项条目:通常为数据项的值类型,允许的取值范围等
2、数据流条目:给出某个数据流的定义,列出该数据流的各组成数据项。
3、文件条目:对文件的定义,列出期组成的数据项
4、加工条目:对每个不能再分解的加工做说明,包括加工的激发条件,加工的逻辑,优先级等等。
示例:
图书管理系统中
查询请求信息=[查询读者请求信息|查询图书请求信息]
读者情况=读者号+姓名+所在单位+{借书情况}
根据上面的定义表,我们很容易看出这些条目的意思。
下面我们来看一个数据流图的综合应用问题,这样有助于我们理解数据流图。
需求:
根据以上信息提出的几个问题!希望对这几个问题的解析,能加深大家对数据流图的理解。
对于问题1:
我们前面提到过,
可以通过数据流图那三个重要设计原则(保持父图与子图平衡,保持数据平衡,加工细节隐蔽)来考查一张数据流图是否正确。
1、查看是否平衡,即子图中的输入流合输出流和父图是否对应;
2、查看数据守恒,处理查询请求没有输入,登记读者信息没有输出.
正确应该如红色箭头画法。
对于问题2:
1、首先我们看到对于加工2,父图和子图是平衡的,所以,本题只能是2.1和2.2或者他们和文件之间缺少数据流。
只得根据需求描述去分析到底缺失哪些数据流。
根据在原需求中的
我们可以很轻松的判断出缺少哪些数据流,如下图红色箭头
对于问题3:这是一个数据字典的应用问题。
根据以上我们截取需求中的信息,,注意红色部分,再结合我们开始介绍的数据字典定义符号的使用,即可很轻松解决这个问题。
管理工作请求单=[购入新书|读者借书|读者还书|图书注销]
入库单=分类目录号+书名+作者+价格+数量+购书日期。