面向数据结构的设计方法(Jackson方法)

标签:
软件设计jackson |
分类: 软件过程改进 |
面向数据结构的设计方法(Jackson方法)
1975年,M.A.Jackson 提出了一类至今仍广泛使用的软件开发方法。这一方法从目标系统的输入、输出数据入手,导出程序框架结构,在补充其他细节,就可得到完整的程序结构图。这一方法对输入、输出数据结构明确的中小型系统特别有效。该方法也可与其他方法结合,用于模块的详细设计。
JSD(Jackson System Development)是Jackson面向数据的结构化编程方法(JSP,Jackon Structured Programming)的产物。
JSD的基本概念是在考虑系统的功能之前,设计应先对运行环境的实体行为建模,然后系统的功能被加入这个模型。其核心思想是由数据结构,建立目标系统的模型,并演化为相应的程序结构。
数据结构对软件设计的影响很大,如一个数据结构具有重复性,那就一定会用循环(重复)结构来控制。如果一个数据结构具有选择性质,级为可能出现,也可能不出现的信息,就一定采用条件语句来控制。若一个数据结构是分层次的,软件的结构也必然是分层次。所以,数据结构充分地揭示了软件结构。因此,面向数据的设计方法定义了一组以数据结构为指导的映射过程。
1. JSD使用的结构表示法
Jackson方法把问题分解为由三种基本结构形式表示的层次结构。三种基本结构形式是顺序、选择和重复。Jacckson 提出了一种与数据结构层次图非常相似的数据结构表示法,以及一种映射和转换的过程。
三种基本结构类型的表示方法如下图所示。
图
顺序型指两个以上的事件从左到右顺序执行。选择型指两个以上事件一次只能执行一个(以#的方框表示)。重复型指事件重复输入多次(以带*的方框表示)。由三种基本结构的组合,可以形成更复杂的结构体系,见下图:
图
Jackson的层次结构图不仅可以用来描述数据结构,也可以用来描述客观事物的层次结构。例如下图描述了某大学的组织结构。
图
2.
JSD开发步骤
JSD开发分为四个步骤,以下结合例子说明。
仓库里存放了多种零件(如P1、P2、P3 ……),每种零件的每次变动(收到或发出)都有卡片做出记录。库存管理系统每月根据这样一叠卡片打印一张月报表,如表1所示,表中每一行列出了某种零件本月库存量的净增减变化。
月报表 |
|
零件名 |
增减数量 |
P1 |
+204 |
P2 |
-1200 |
P3 |
_451 |
… |
… |
2.1 数据结构化表示
确定输入、输出数据的逻辑结构,并用Jackson数据层次图描述所用结构。这里假定卡片已按零件分组,即将同一零件的卡片放在一起。输入数据是由一叠卡片组成的文件,文件包括许多零件组,每个零件组又有许多张卡片,每张卡片又可能是“收”或“发”。输出是月报表,它由表头和表体两部分组成,表体又由许多“行”组成,例子中的数据结构表示如图 4种的(b)、(c)。
2.2 找出输入与输出数据结构的对应关系
找出输入数据结构和输出数据结构中有对应关系的数据单元,所谓有对应关系的数据单元是指由直接因果关系,程序可以同时处理的数据单元。对于重复的数据单元,重复的次序和重复的次数都必须相同才算有对应关系。有对应关系的数据单元名称可以不相同。
这个例子中,输入和输出数据结构之间也是对应的。一个输入文件对应一张月报表,输入文件中的每个零件对应于月报表中的每一行,“零件组”个数与“行”数相同,“零件组”的排列次序与“行”的排列次序也是一致的。对应关系见图 4种的中的箭头所示。
但是,如果卡片不是按零件分组,而是按“收”或“发”的日期顺序排列(见图4
(a)),此时图4中的输入(a)和输出(c)之间就找不到对应的数据单元。这种情况称为“结构冲突”。
图
4 零件库输入文件和月报表文件结构图
2.3 确定程序结构
以输出数据结构为基础确定程序结构,确定程序结构时有三条规则:1)为每对有对应关系的数据单元,按照它们在数据结构中所在的层次,在程序结构的适当位置画一个程序框;2)在输入数据结构中有,但在输出数据结构中没有对应关系的数据单元,在程序结构中的适当位置画一个程序框;3)在输出数据结构中有,但在输入数据结构中没有对应关系的数据单元,在程序结构中的适当位置画一个程序框。
简单地说,每对有对应关系的数据单元合画一个框,没有对应关系的所有数据单元(包括输入数据结构和输出数据结构)各画一个框。
根据上述原则,画出程序结构图见5。
图 5 零件库系统程序结构图
2.4 列出和分配可执行操作
进一步是列出所有的操作,并把他们分配到程序结构的适当位置,这样就获得了完整的程序结构图,程序员就可以根据这个结构图进行程序的编码。例子中的有关操作见表2,并将操作分配到图5上。
编号 |
名称 |
1. |
读表头数据项 |
2. |
打印表头符号行 |
3. |
读零件卡片(收) |
4. |
读零件卡片(发) |
5. |
处理收发计算 |
6. |
生成同零件项 |
7. |
打印按输入数据结构数字行 |
8. |
打开文件 |
9. |
关闭文件 |
3.
JSD方法的总结