目录
[1 结构化程序设计](#1 结构化程序设计)
[2 人机界面设计](#2 人机界面设计)
[2.1 设计问题](#2.1 设计问题)
[2.2 设计过程 p121](#2.2 设计过程 p121)
[2.3 人机界面设计指南 p122](#2.3 人机界面设计指南 p122)
[3 过程设计的工具](#3 过程设计的工具)
[3.1 程序流程图 p124](#3.1 程序流程图 p124)
[3.2 盒图 p125](#3.2 盒图 p125)
[3.3 PAD图 (问题分析图) p126](#3.3 PAD图 (问题分析图) p126)
[3.4 判定表 P127](#3.4 判定表 P127)
[3.5 判定树 p128](#3.5 判定树 p128)
[3.6 过程设计语言 p128](#3.6 过程设计语言 p128)
[4 面向数据结构的设计方法 p129](#4 面向数据结构的设计方法 p129)
[4.1 Jackson图](#4.1 Jackson图)
[4.2 改进的Jackson图 p131](#4.2 改进的Jackson图 p131)
[4.3 Jackon方法 p132](#4.3 Jackon方法 p132)
[5 程序复杂程度的定量度量](#5 程序复杂程度的定量度量)
[5.1 McCabe 方法 p137](#5.1 McCabe 方法 p137)
[5.2 Halstead 方法 p139了解](#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.用户帮助设施
具体设计用户帮助设施,必须解决下述一系列问题
在用户与系统交互期间,是否 在任何时候 都能获得关于系统任何功能的帮助信息?(全部或部分)
用户 怎样请求 帮助?(帮助菜单、功能键、 Help 命令)
怎样显示 帮助信息?(独立窗口、某个参考文档、屏幕固定位置显示简短提示)
用户 怎样返回 正常的交互方式?(返回按钮、功能键)
怎样组织 帮助信息 ? (通过关键字访问、层次结构、超文本结构)
3.出错信息处理
出错信息或警告信息应具有的属性:
是用户 可以理解的 术语( not error code )
应该提高有助于 从错误中恢复 的建设性意见
信息应该指出错误可能导致哪些 负面后果 (如破坏数据文件)等
信息应该伴随 视觉 听觉 上的提示,如警告声等
信息 不能带有指责色彩
4.命令交互 p121
提供命令交互应考虑的问题**:**
是否每个菜单选项都有对应的命令?
采用何种命令形式?(控制序列,如 ctrl + ... ;功能键;键入命令)
学习和记忆命令的难度多大?忘了怎么办?
用户是否可以定制或缩写命令?
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
- 一个程序的环形复杂度取决于它的程序图**(流图)** 包含的判定结点的数量。
2.计算环形复杂度的方法
V ( G ) =流图中区域数(包括图外区域)如图: V ( G ) =4
V ( G ) =判定结点数+ 1 (IF语句,WHILE循环或FOR循环都相当于1个判断,而CASE语句或其他多分支语句相当的判断数等于可能的分支数减1)
V ( G )= E - N + 2 E: 边数 N: 结点数