面向数据结构的分析与设计
典型方法:
- Jackon方法
- Warnier方法
主要特点:
- 以信息对象及其操作作为核心进行需求分析
- 认为复合信息对象具有层次结构,并且可按顺序、选择、重复三种结构分解为成员信息对象
- 提供由层次信息结构映射为程序结构的机制,从而为软件设计奠定良好的基础
JSP:Jackon结构程序设计方法
JSD:Jackon系统开发方法
JSP方法
总结了COBOL事务处理程序中的开发方法而发展起来的,特点:
- 重点不是自顶向下逐步求精,而是在数据结构基础上进行构造
- 根据输入/输出的数据结构建立程序结构
目标:获得简单清晰的设计方案
设计原则:使**程序结构与问题结构(数据结构) **相对应
数据结构与程序结构
数据处理系统处理的是具有层次结构的数据,因而其问题结构可以用它处理的数据结构来表示:
数据结构与程序结构的表示
JSP方法采用Jackon图来表示数据结构与程序结构
结构图是一种从左到右阅读的树状层次结构图
- 数据结构图中方框表示数据,程序结构图中方框就表示模块(过程或函数)
- 基本元素:底部的叶子节点成为基本元素
- 结构元素:在底部节点以上的节点成为结构元素
- 三种程序元素类型:顺序元素、选择元素、重复元素
顺序元素
一个顺序元素由一个或多个从左到右的元素组成
每个组成的元素只出现一次
如图中,元素D是由元素A、元素B及元素C顺序组成的序列
选择元素
-
选择是“If Then Else”或“Case”结构,而且必须有两个或多个元素
-
使用选择元素时根据指定的条件从这些子元素中选择一个子元素
-
供选择的子元素用右上角标以小圆的矩形表示
实例:左图A、B、C是D的可选项,而S是选择条件
-
如果需要一个“If A==B Then X Else do nothing”那么需要加入一个空元素
实例:右上图中空元素用一个标有连字符的矩形表示
重复元素
- 重复元素仅由一个子元素组成,表示重复元素由子元素重复0次或多次组成
- 子元素用右上角标以星号的矩形表示
- 下图表示元素D由元素A重复0次或多次组成,其中I是重复条件
结构正文的表示形式-1
- 结构正文又称伪码,完全与结构图相对应
- 结构正文分为:顺序结构正文、选择结构正文、重复结构正文
顺序结构正文:
D Seq 顺序
A; 元素D是由元素A
B; 元素B
C; 元素C组成
D END 元素D是元素A、元素B、元素C的序列
选择结构正文:
D Select cond1 //选择
A //元素D或是由一个元素A
Or cond2
B //或是由一个元素B
Or cond3
C //或是由一个元素C组成 D END cond1、cond2、cond3分别是选择A,B,C的条件
重复结构正文:
D Iter until cond //重复
A; // 元素D是由1个或多个元素A组成。
D END //元素D 是元素A的重复
或
D Iter while cond
A; //元素D是由0至多个元素A组成
D END //cond为循环条件
示例:打印表格程序的输出数据结构a和对应的程序结构b
JSP方法的分析和设计步骤
例6.2:一个正文文件由若干个记录组成,每个记录是一个字符串,要求统计每个记录中空格个数,以及文件中空格的总数。
要求输出的格式是:每复制一行输入字符串后,另起一行输出该字符串中的空格数,最后输出文件空格的总数。
步骤:
- 分析并确定输入和输出数据结构的逻辑结构,并用Jackon图画出
-
找出输入数据结构与输出数据结构中有对应关系的数据元素
-
有对应关系:是指由直接因果关系,即程序中可以同时处理的数据元素
-
对于表示“重复“的数据元素,只有其重复次数和次序都相同时才有对应关系”
-
输入/输出数据结构最高层次的两个数据元素总是有对应关系的
-
-
从描述数据结构的Jackon图导出描述程序结构的Jackon图,导出规则:
-
有对应关系的数据元素,按照它们在数据结构中的层次在程序结构图的相应层次上画一个处理框
-
为输入数据结构图中剩余的每个数据元素,在程序结构图的相应层次上画一个处理框
-
为输出数据结构图中剩余的每个数据元素,在程序结构图的相应层次上画一个处理框
结果:
-
-
列出所有操作和条件,并将他们分配到程序结构图的赎当位置
-
首先从输出操作开始,再回到输入操作
-
加入必须的与条件有关的操作
-
最后把每个操作都分配到程序结构中去
设变量sum存放一行字符串中的空格数;totalsum存放空格总数;pointer用来指示当前分析的字符在字符串中的位置,可列出其所有操作,并对其编号如下:
①停止
② 打开文件
③ 关闭文件
④ 打印字符串
⑤ 打印空格数
⑥ 打印空格总数
⑦ sum:=sum+1
⑧ totalsum:=totalsum+1
⑨ 读入字符串
⑩ sum:=0
totalsum:=0
pointer:=1
pointer:=pointer+1条件列表如下:
I(1):文件结束
I(2):字符串结束
S(3):字符是空格与相当将条件与相应的循环条件关联,并将①~13 操作按次序的模块进行关联,按从左至右决定先后顺序,关联后的程序结构图
-
-
把带有操作的程序结构图转换成结构正文,同时加入选择及迭代条件
统计空格 seq
打开文件
读入字符串
totalsum := 0
程序体 iter until 文件结束
处理字符串 seq
印字符串 seq
打印字符串
印字符串 end
sum := 0
pointer := 1
分析字符串 iter until 字符串结束
分析字符 select 字符是空格
处理空格 seq
sum := sum + 1
pointer := pointer + 1
处理空格 end
分析字符 or 字符不是空格
处理非空格 seq
pointer := pointer + 1
处理非空格 end
分析字符 end
分析字符串 end
印空格数 seq
打印空格数
印空格数 end
totalsum := totalsum + 1
读入字符串
处理字符串 end
程序体 end
印空格总数 seq
打印空格总数
印空格总数 end
关闭文件
停止
统计空格 end
JSP方法的特点
- 简单、易学、形象直观、可读性好
- 便于表示层次结构
- 适用于小型数据处理系统
JSD方法简介
JSP广泛使用十多年后,Jackon把它进行了扩充,不再局限于中小规模范围的问题及顺序范围,新的开发方法称为JSD。
JSD覆盖了整个系统的分析到实现。
JSD的本质:先建立一个现实模型,然后加入功能性处理,最后阶段逻辑系统才转换为实际设计。
JSD方法步骤
- 标识实体与行为:建立现实的模型,列出与系统有关的实体表及活动表
- 生成实体结构图:分析实体表中实体之间的关系,形成实体结构图
- 创造软件系统模型:根据现实世界,对实体与行为的组合建立进程模型
- 扩充功能性过程:说明系统输出的功能,必要时在规格说明中加入附加的处理
- 施加时间控制:开发者考虑进程调度的某些特征,这些特征可能影响系统功能所输出的结果的正确性及时间关系
- 实现:开发者考虑运行系统的软硬件方面的问题,采用变换技术、调度技术、数据库定义技术等,以使系统能有效地运行
小结
面向数据结构的分析和设计方法是以数据结构为中心,从输入/输出的数据结构导出程序结构
由于这种方法在国内用得比较少,因此只作了简单的方法介绍,主要是通过一个实例来介绍JSP方法,使读者对这种方法有一个了解。