文章目录
- 6.1 结构程序设计
- 6.2 人机界面设计
- 6.3 过程设计的工具
- 6.3.1 程序流程图(程序框图)
- 6.3.2 盒图(N-S图)
- 6.3.3 PAD图(问题分析图)
- 6.3.4 判定表
- 6.3.5 判断树
- 6.3.6 过程设计语言
- 6.4 面向数据结构的设计方法
- 6.4.1 Jackson图
- 6.4.2 改进的Jackson图
- 6.5 程序复杂程度的定量度量
- 6.5.1 McCabe方法
- 6.5.2 Halstead方法
- 详细设计阶段的根本目标:确定应该怎样具体地实现所要求的系统
- 详细设计阶段的任务不是具体地编写程序
- 详细设计不仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出的处理过程应该尽可能简明易懂。
- 结构程序设计技术是实现详细设计目标的关键技术,也是详细设计的逻辑基础。
6.1 结构程序设计
- 经典定义
- 如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
- 程序设计新定义:
- 结构程序设计方法是尽可能少用GO TO语句的程序设计方法。
- 控制结构
- (1)基本控制结构
- 三种基本的控制结构是“顺序”“选择”和“循环”,它们的流程图分别为
- 【注意】牢记三种基本控制结构,此为常考内容。
- 3种基本控制结构保证每个代码块单入口和单出口,结构程序设计是详细设计的逻辑基础。
- (2)扩展的控制结构
- DO UNTIL和DO CASE的流程图分别是
- (1)基本控制结构
- 如果只允许使用顺序、IF_THEN_ELSE型分支、DO_WHILE型循环这三种基本控制结构,为经典结构程序设计
- 还允许使用DO_CASE型多分支结构和DO_UNTIL型循环结构,为扩展的结构程序设计
- 如果还允许使用LEAVE(或BREAK)结构,为修正的结构程序设计
6.2 人机界面设计
- 重要性
- 人机界面设计是接口设计的重要组成部分
- 对于交互式系统来说,人机界面设计和数据设计、体系结构设计及过程设计一样重要。
- 人机界面的质量直接影响用户对软件产品的接受程度。
- 设计问题
- (1)系统响应时间;
- (2)用户帮助设施;
- (3)出错信息处理;
- (4)命令交互。
- 设计过程
- 用户界面设计是一个迭代的过程,也就是说,通常先创建设计模型,再用原型实现这个设计模型,并由用户试用和评估,然后根据用户意见进行修改。
- 人机界面设计指南
- 有助于设计者设计出友好、高效的人机界面
- 一般交互指南
- 信息显示指南
- 数据输入指南
6.3 过程设计的工具
- 过程设计的工具,描述程序处理过程的工具,可以分为图形、表格、语言三类
6.3.1 程序流程图(程序框图)
- (1)符号表示
- 程序流程图中使用的符号表示如图所示。
- (2)优点
- 对控制流程的描绘很直观,便于初学者掌握。
- (3)缺点
- ① 没遵循逐步求精的原则,它诱使程序员过早地考虑程序的控制流程, 而不去考虑程序的全局结构。
- ② 程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以随意转移控制。
- ③ 程序流程图不易表示数据结构。
6.3.2 盒图(N-S图)
- (1)特点
- ① 功能域明确;
- ② 不可能任意转移控制;
- ③ 很容易确定局部和全程数据的作用域;
- ④ 很容易表示嵌套关系,也可以表示模块的层次结构。
- (2)表示
- 下图给出了结构化控制结构的盒图表示,也给出了调用子程序的盒图表示方法。
- (3)优点
- ① 盒图没有箭头,因此不允许随意转移控制。
- ② 盒图可以使程序员逐步养成用结构化的方式思考问题和解决问题的习惯。
6.3.3 PAD图(问题分析图)
- (1)符号表示
- PAD图用二维树形结构的图来表示程序的控制流,下图给出PAD图的基本符号。
- (2)优点
- ① 使用PAD符号所设计出来的程序必然是结构化程序。
- ② PAD图所描绘的程序结构十分清晰。
- ③ 用PAD图表现程序逻辑,易读、易懂、易记。
- ④ 容易使用软件工具将PAD图自动转换成高级语言源程序,提高了软件可靠性和软件生产率。
- ⑤ 即可用于表示程序逻辑,也可用于描绘数据结构。
- ⑥ PAD图的符号支持自顶向下、逐步求精方法的使用。
- 【注意】PAD图中竖线的总条数就是程序的层次数。
- PAD图是面向高级程序设计语言的,为每种常用的高级程序设计语言提供了一整套相应的图形符号
6.3.4 判定表
- (1)适用性
- 算法中包含多重嵌套的条件选择时使用判定表。
- 判定表能够清晰地表示复杂的条件组合与应做的动作之间的对应关系
- (2)组成
- ① 左上部列出所有条件;
- ② 左下部是所有可能做的动作;
- ③ 右上部是表示各种条件组合的一个矩阵;
- ④ 右下部是和每种条件组合相对应的动作。
- 【注意】判定表右半部的每一列实质上是一条规则,规定了与特定的条件组合相对应的动作。
6.3.5 判断树
- 判定树是判定表的变种,能够清晰地表示复杂的条件组合与应做的动作之间的对应关系
6.3.6 过程设计语言
- (1)定义
- 过程设计语言(PDL),即伪码,它是用正文形式表示数据和处理过程的设计工具。
- (2)优点
- ① 可作为注释直接插在源程序中,有助于保持文档和程序的一致性,提高文档的质量。
- ② 可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDL的书写和编辑工作。
- ③ 已经有自动处理PDL的程序存在,且可以自动由PDL生成程序代码。
- (3)缺点
- 不如图形工具形象直观,不如判定表清晰简单。
6.4 面向数据结构的设计方法
6.4.1 Jackson图
- (1)分类
- Jackson图根据程序中数据元素彼此间的逻辑关系可分为顺序结构、选择结构和重复结构3类,具体如下:
- ① 顺序结构
- 【注意】图中每个元素只出现一次,出现的次序依次是B、C和D。
- ② 选择结构
- 【注意】在B、C和D的右上角有小圆圈做标记。
- ③ 重复结构
- 【注意】在B的右上角有星号标记。
- (2)优点
- ① 便于表示层次结构,而且是对结构进行自顶向下分解的有力工具。
- ② 形象直观可读性好。
- ③ 既能表示数据结构也能表示程序结构。
- (3)缺点
- ① 图中无法表示选择条件或循环结束条件,影响了图的表达能力,也不易直接把图翻译成程序。
- ② 框间连线为斜线,不易在行式打印机上输出。
6.4.2 改进的Jackson图
- (1)表示
- 改进的Jackson图。
- (a)顺序结构:B、C、D中任一个都不能是选择出现或重复出现的数据元素。
- (b)选择结构:S右面括号中的数字i是分支条件的编号。
- (c)可选结构:A或者是元素B或者不出现。
- (d)重复结构:循环结束条件的编号为i。
- (2)与层次图的比较
- ① 层次图中的一个方框代表一个模块;而Jackson图中一个方框并不代表一个模块。
- ② 层次图表现的是调用关系;而Jackson图表现的是组成关系。
6.5 程序复杂程度的定量度量
6.5.1 McCabe方法
- (1)流图
- ① 定义
- 流图实质上是“退化了的”程序流程图,它仅仅描绘程序的控制流程,完全不表现对数据具体操作以及分支或循环的具体条件。
- ② 程序流程图映射成流图
- 下图说明了把程序流程图映射成流图的方法。
- a.流图中用圆表示结点,一个圆代表一条或多条语句。程序流程图中的一个顺序的处理框序列和一个菱形判定框,可以映射成流图中的一个结点。
- b.流图中的箭头线称为边,代表控制流。流图中一条边必须终止于一个结点,即使这个结点并不代表任何语句。
- c.由边和结点围成的面积称为区域,计算区域数时应包括图外部未被围起来的区域。
- ③ PDL翻译成流图
- a.基本情况
- 下图是用PDL表示的处理过程及与之对应的流图。
- b.包含复合条件
- 复合条件,就是在条件中包含了一个或多个布尔运算符。下图是由包含复合条件的PDL片段翻译成的流图。
- a.基本情况
- ① 定义
- (2)环形复杂度
- ① 定义
- McCabe方法根据程序控制流的复杂程度定量度量程序的复杂程度,度量出的结果称为程序的环形复杂度。
- ② 计算方法
- 环形复杂度定量度量程序的逻辑复杂度,可以用下述3种方法中的任何一种来计算环形复杂度:
- a.流图中线性无关的区域数等于环形复杂度。
- b.流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。
- c.流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。
- 环形复杂度定量度量程序的逻辑复杂度,可以用下述3种方法中的任何一种来计算环形复杂度:
- ① 定义
- 环形复杂度V(G)=10是模块规模的合理上限。
6.5.2 Halstead方法
- (1)定义
- Halstead方法是根据程序中运算符和操作数的总数来度量程序的复杂程度。
- (2)方法
- ① 程序长度N定义(N1为程序中运算符出现的总次数,N2为操作数出现的总次数):N=N1+N2;
- ② 预测程序长度的公式(使用的不同运算符的个数n1,不同操作数的个数n2):H=n1log2(n1)+n2log2(n2);
- ③ 预测程序中包含错误的个数的公式:E=Nlog2(n1+n2)/3000。