目录
1 结构化程序设计
2 人机界面设计
2.1 设计问题
2.2 设计过程 p121
2.3 人机界面设计指南 p122
3 过程设计的工具
3.1 程序流程图 p124
3.2 盒图 p125
3.3 PAD图 (问题分析图) p126
3.4 判定表 P127
3.5 判定树 p128
3.6 过程设计语言 p128
4 面向数据结构的设计方法 p129
4.1 Jackson图
4.2 改进的Jackson图 p131
4.3 Jackon方法 p132
5 程序复杂程度的定量度量
5.1 McCabe 方法 p137
5.2 Halstead 方法 p139了解
1.详细设计的根本目标 p117
2.详细设计的基本任务(重点)
确定每个模块的具体执行过程,主要有:
1 结构化程序设计
1.什么是结构化程序 p118
最早由E.W.Dijkstra在60年代中期提出。
经典定义:如果一个程序的代码块仅仅通过顺序、选择和循环这 3 种基本控制结构进行连接,而且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
比较全面的定义:结构程序设计是尽可能少用 GOTO 语句的程序设计方法,最好仅仅在检测出错误时才使用 GOTO 语句,而且应该总是使用前向的 GOTO 语句。
p119
l经典的结构程序设计:只允许使用顺序、IF-THEN-ELSE型分支和DO-WHILE型循环
l扩展的结构程序设计:除上述三种还允许使用DO-CASE型多分支和DO-UNTIL型循环
l修正的结构程序设计:再允许使用LEAVE(或BREAK)结构
基本的结构化控制 结构
判断这两个流程图是否为结构化设计
违背单入单出
2 人机界面设计
用户界面应具有的特点:可使用性、灵活性、简洁性、可靠性
2.1 设计问题
4个问题 p120
① 系统响应时间
② 用户帮助设施
③ 出错信息处理
④ 命令交互
1.系统响应时间
(1)定义:系统响应时间指从用户完成某个控制动作到软件给出预期的响应之间的这段时间
(2)属性: 长度:响应时间的长短。响应时间过长会令用户感到不安、沮丧!
易变性:响应时间相对于平均响应时间的偏差。尽量稳定,以便建立稳定的工作节奏
2.用户帮助设施
具体设计用户帮助设施,必须解决下述一系列问题
3.出错信息处理
出错信息或警告信息应具有的属性:
4.命令交互 p121
提供命令交互应考虑的问题:
2.2 设计过程 p121
2.3 人机界面设计指南 p122
一般交互界面
信息显示界面
数据输入界面
3 过程设计的工具
(1)图形工具
l程序流程图(FC)
l盒图( NS )
l问题分析图 ( PAD )
(2)表格工具
l判定表
l判定树
(3)语言工具
l过程设计语言( PDL )
3.1 程序流程图 p124
优点:
直观清晰、易于使用,是普遍采用的工具。
缺点:
反映的是最后的结果,不易反映逐步求精的过程
可以随心所欲地画控制流程线的流向,容易造成非结构化的程序结构。
不易表示数据结构。
程序流程图的标准符号
计算n阶乘的程序流程图
3.2 盒图 p125
特点
(1)功能域(即一个特定控制结构的作用域)明确可以从盒图上一眼看出来
(2)不可能转移控制
(3)很容易确定局部和全程数据的作用域
(4)很容易变现嵌套关系,也可以表示模块的层次结构
优点:
只能描述结构化程序所允许的标准结构。
程序结构用方框表示,清晰可见。
缺点:
当程序内嵌套层数增多时,内层方块越画越小,增加了画图的困难,并使图形的清晰性受到影响。
五种基本控制结构在盒图中的表示
计算n阶乘
3.3 PAD图 (问题分析图) p126
优点
(1)使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序
(2)PAD图描绘的程序结构十分清晰
(3)用PAD图表现程序逻辑,易读,易懂,易记
(4)容易将PAD图转换成高级语言源程序
(5)用于表示程序逻辑,也可用于描绘数据结构
(6)PAD的符号支持自顶向下,逐步求精的方法使用
五种基本控制结构在PAD图中的表示
3.4 判定表 P127
左上部列出所有条件,左下部是所有可能做出的动作,右上部是表示各种条件的组合的一个矩阵,右下部是和每种条件组合相对应的动作
例题:下面以行李托运费的算法为例说明判定表的组织方法。假设某航空公司规定,乘客可以免费托运重量不超过30kg的行李。当行李重量超过30kg时,对头等舱的国内乘客超重部分每公斤收费4元,对其他舱的国内乘客超重部分每公斤收费6元,对外国乘客超重部分每公斤收费比国内乘客多一倍,对残疾乘客超重部分每公斤收费比正常乘客少一半。
3.5 判定树 p128
判定树是判定表的变种,能清晰表示复杂的条件组合与操作之间的关系,形式简单,不需要做任何说明,是常见的系统分析工具
3.6 过程设计语言 p128
也称伪码( pseudo code ) ,是一种介于自然语言和形式化语言之间的语言,用于描述功能模块的算法设计和处理细节
例题:
(1)为什么说它是非结构化的?
通常所说的结构化程序,是按照经典的结构程序的定义衡量,符合定义规定的程序。图示的程序的循环控制结构有两个出口,显然不符合狭义的结构程序的定义,因此是非结构化的程序。
(2)设计一个等价的结构化程序。
使用附加的标志变量flag,至少有两种方法可以把该程序改造为等价的结构化程序,图示盒图描绘了等价的结构化程序。
(3)再设计一个不用flag的程序
4 面向数据结构的设计方法 p129
4.1 Jackson图
描述数据结构:顺序、选择、重复。
4.2 改进的Jackson图 p131
(a)顺序结构
(b)选择结构,S右面括号的数字i是分支条件的编号
(c)可选结构,A或者B 或者不出现
(d)重复结构,循环结束条件编号为i
4.3 Jackon方法 p132
步骤:
1.确定输入数据和输出数据逻辑结构,用Jackson图表达;
2.确定输入结构和输出结构中有对应关系(因果)的单元;
3.描绘数据结构的Jackson图导出描绘程序结构Jackson图;
4.列出所有操作和条件,分配到Jackson图中;
5.用伪码表示。
例:一个正文文件由若干记录组成,每个记录是一个字符串。
1)设计程序统计每个记录中空格字符的个数,输出数据的格式是,每读入一个记录(字符串)之后,另起一行打印出这个字符串及其空格数;
2)最后打印出文件中空格的总个数。
分析输入、输出数据结构,用Jackson图描绘,并找出两者对应的数据单元:
p133 图6.12
导出描绘程序结构的Jackson图:
p134 图6.13
5 程序复杂程度的定量度量
5.1 McCabe 方法 p137
1. 一个程序的环形复杂度取决于它的程序图(流图) 包含的判定结点的数量。
2.计算环形复杂度的方法
V ( G ) =流图中区域数(包括图外区域)如图: V ( G ) =4
V ( G ) =判定结点数+ 1 (IF语句,WHILE循环或FOR循环都相当于1个判断,而CASE语句或其他多分支语句相当的判断数等于可能的分支数减1)
V ( G )= E - N + 2 E: 边数 N: 结点数