第五章 详细设计
? 结构程序设计
? 详细设计的工具
? Jackson程序设计方法
? Warnier程序设计方法
? 程序复杂程度的定量度量
结构程序设计
? 自顶向下逐步求精
? 具有单入、单出的控制结构 (取消 GOTO语
句)
? 五种控制结构
? 顺序结构
? 选择结构
? 先判断循环结构
? 后判断循环结构
? 多选择结构
结构程序设计
(1) 顺序结构 (2) 选择结构
A
B
P
BA
F T
(3) 先判定型循环结构
T
P
S
F
结构程序设计
(4) 后判定型循环结构
(until-loop structure)
F
S
T
P
(5) 多情况选择 (case structure)
T A1
F
P=1
T A2
F
P=2
…
T An
F
P=n
结构程序设计
? 任何复杂的程序流程图都应由以上五种基
本结构组合而成。
? 优点
? 容易掌握,且历史“悠久”,使用广泛。
? 缺点
? 本质上不具备逐步求精的特点,对于提高
? 大型系统的可理解性作用甚微;
? 不易表示数据结构;
? 转移控制太方便。
详细设计的工具
? 5.2.1 程序流程图
? 5.2.2 盒图 (N_S图 )
? 5.2.3 PAD图
? 5.2.4 判定表
? 5.2.5 判定树
? 5.2.6 过程设计语言 (PDL)
? 5.2.7 模块开发文件夹
详细设计的工具
? 程序流程图
详细设计的工具
? 程序流程图
详细设计的工具
? 盒图 (N_S图 )
详细设计的工具
? 盒图 (N_S图 ) 例子
详细设计的工具
? 盒图 (N_S图 )
? 特点
? 没有箭头,不允许随意转移控制
? 每个矩形框 (Case中条件取值例外 )都是一个功能域
(即一个特定结构的作用域 ),结构表示明确
? 局部及全程数据的作用域易见
? 易表现嵌套关系 (embedded structure)以及模块的层
次结构
详细设计的工具
? 问题分析图 (PDA图 )
详细设计的工具
? 盒图和 PDA图的转换
x4T F
Do-Until x5
i g
h
f
k
x1T F
b
Do-Until x6
a
j
详细设计的工具
开始 ?
结束 ?
a
j
Until x5 i
Until x6
b
x1
k
f
x4
g
h
? 盒图和 PDA图的转换
详细设计的工具
?问题分析图 (PDA图 )
? 特点
? 结构清晰,层次分明,易读
? 支持逐步求精的设计思想
? 容易将 PAD自动转换为高级语言源程序
详细设计的工具
? 判定表与判定树
? 表示复杂的条件组合与应做动作之间的对应关系
? 判定表与判定树并不适用于作为一种通用的设计工
具,通常将之用于辅助测试
? 例, 航空行李托运费的算法
? 按规定:重量不超过 30公斤的行李可免费托运。重
量超过 30公斤时,对超运部分,头等舱国内乘客收 4
元 /公斤;其它舱位国内乘客收 6元 /公斤;外国乘客
收费为国内乘客的 2倍;残疾乘客的收费为正常乘客
的 1/2。
详细设计的工具
1 2 3 4 5 6 7 8 9
1ú 11 11 11 T T T T F F F F
1· 11 11 T F T F T F T F
11 11 11 11 F F T T F F T T
11 11 11 11 W £ 3 0 T F F F F F F F F
11 ·1 ′
(W - 3 0 ) ′ 2 ′
(W - 3 0 ) ′ 3 ′
(W - 3 0 ) ′ 4 ′ ′
(W - 3 0 ) ′ 6 ′ ′
(W - 3 0 ) ′ 8 ′
(W - 3 0 ) ′ 1 2 ′
11 11 1¨ ±í ±í 11 11 11 11 11 ·1 11 11 ·¨
规则
规则数 ?
条件
动作
详细设计的工具
行李费
算法
行李重量
W > 30
行李重量
W £ 30 免费
国内乘客
外国乘客
头等舱
其他舱
残疾乘客
正常乘客
(W-30) ′2
(W-30) ′4
残疾乘客
正常乘客
(W-30) ′3
(W-30) ′6
头等舱
其他舱
残疾乘客
正常乘客
(W-30) ′4
(W-30) ′8
残疾乘客
正常乘客
(W-30) ′6
(W-30) ′12
用判定树表示计算行李费的算法
详细设计的工具
? 过程设计语言 (PDL)
? 应具备 特点
? 关键字有固定的语法
? 处理特点用自然语言描述
? 有数据说明
? 有子程序定义与调用机制
详细设计的工具
? 过程设计语言 (PDL)
? 优点
? 易于实现由 PDL到源代码的自动转换
? 缺点
? 不够直观
? 模块开发文件夹
? 记录模块开发过程的文档
Jackson程序设计方法
? 5.3.1 Jackson图
? 5.3.2 改进的 Jackson图
? 5.3.3 Jackson方法
Jackson程序设计方法
? Jackson图 (改进 )
? 以数据结构 (data structure)为基础设计每个模块的处理过
程
A
B C
A
Bo Co
S
A
B*
I
顺序 选择 重复
改进的 Jackson图
Jackson程序设计方法
? Jackson方法 (具体示例见 P90)
? 步骤
? 用 Jackson图描述 I\O 的数据结构
? 在两个图中指出有直接因果关系 (causality)、可以同
时处理的单元(重复的次序,次数均相同)
? 把有对应关系的单元合为一个处理框,画在相应的
层次中(不同层以低层为准)
? 列出所有操作条件,并分配到上幅程序结构图中
? 用伪代码 (Pseudocode) 表示程序。
Warnier程序设计方法
? 5.4.1 Warnier方法
? 5.4.2 Warnier方法的辅助技术
Warnier程序设计方法
? Warnier方法
? 步骤 (示例见 P96)
? 用 Warnier 图描述 I\O的数据结构
? 导出程序结构,用 Warnier图描绘程序的处理层次
? 画出程序流程图,并将每个处理框编号
? 分类写出伪码
? 将前一步分类结果标号排序,得到处理过程的伪码
? Warnier方法的辅助技术
? 当 I\O 数据有多个时,借助判定表
程序复杂程度的定量度量
? 5.5.1 McCode方法
? 5.5.2 Halstead方法
程序复杂程度的定量度量
? McCode方法
? 由程序流程图导出程序图
TOTAL=TOTAL+A
K++
输入 A
输出 K,L,TOTAL
停止
T
开始
K=0L=0
TOTAL=0
输入 A
Do While TOTAL<1000 and
A?0
F
A>0T
L++
F
a( 开始 )
b( 入口 )
c
d
e
f
g
h
i
j( 出口 )
k( 停止 )
导
出
程序复杂程度的定量度量
? McCode方法
? 计算复杂度
? V(G) = m - n + p
? 其中 V(G) 为强连通有向图 G中线性无关环 的个数 (称
为 ; m 是边数 ; n 是 节 点 数 ; p 是 G中连通集的数
目
程序复杂程度的定量度量
? McCode方法
? 实例计算 a( 开始 )
b( 入口 )
c
d
e
f
g
h
i
j( 出口 )
k( 停止 )
注意,
?对于一个正常的程
序,其 CFG应是连通
的,即 p = 1.
?通常 程序图 不是强
连通的,故须从出口
到入口画一条虚弧,
使其成为强连通图。
?对于平面图 G,
V(G) =G在平面上围
成的区域的个数。31911V ( G ) ????
程序复杂程度的定量度量
? Halstead方法
? 公式
? 其中 H为程序长度,n1表示不同运算符的个
数,n2表示不同操作数的个数
? E表示程序中包含的错误个数 (误差 <8%)
22212 l o gl o g nnnn 1 ??H
3 0 00/)(l o g 212 nnNE ??
? 结构程序设计
? 详细设计的工具
? Jackson程序设计方法
? Warnier程序设计方法
? 程序复杂程度的定量度量
结构程序设计
? 自顶向下逐步求精
? 具有单入、单出的控制结构 (取消 GOTO语
句)
? 五种控制结构
? 顺序结构
? 选择结构
? 先判断循环结构
? 后判断循环结构
? 多选择结构
结构程序设计
(1) 顺序结构 (2) 选择结构
A
B
P
BA
F T
(3) 先判定型循环结构
T
P
S
F
结构程序设计
(4) 后判定型循环结构
(until-loop structure)
F
S
T
P
(5) 多情况选择 (case structure)
T A1
F
P=1
T A2
F
P=2
…
T An
F
P=n
结构程序设计
? 任何复杂的程序流程图都应由以上五种基
本结构组合而成。
? 优点
? 容易掌握,且历史“悠久”,使用广泛。
? 缺点
? 本质上不具备逐步求精的特点,对于提高
? 大型系统的可理解性作用甚微;
? 不易表示数据结构;
? 转移控制太方便。
详细设计的工具
? 5.2.1 程序流程图
? 5.2.2 盒图 (N_S图 )
? 5.2.3 PAD图
? 5.2.4 判定表
? 5.2.5 判定树
? 5.2.6 过程设计语言 (PDL)
? 5.2.7 模块开发文件夹
详细设计的工具
? 程序流程图
详细设计的工具
? 程序流程图
详细设计的工具
? 盒图 (N_S图 )
详细设计的工具
? 盒图 (N_S图 ) 例子
详细设计的工具
? 盒图 (N_S图 )
? 特点
? 没有箭头,不允许随意转移控制
? 每个矩形框 (Case中条件取值例外 )都是一个功能域
(即一个特定结构的作用域 ),结构表示明确
? 局部及全程数据的作用域易见
? 易表现嵌套关系 (embedded structure)以及模块的层
次结构
详细设计的工具
? 问题分析图 (PDA图 )
详细设计的工具
? 盒图和 PDA图的转换
x4T F
Do-Until x5
i g
h
f
k
x1T F
b
Do-Until x6
a
j
详细设计的工具
开始 ?
结束 ?
a
j
Until x5 i
Until x6
b
x1
k
f
x4
g
h
? 盒图和 PDA图的转换
详细设计的工具
?问题分析图 (PDA图 )
? 特点
? 结构清晰,层次分明,易读
? 支持逐步求精的设计思想
? 容易将 PAD自动转换为高级语言源程序
详细设计的工具
? 判定表与判定树
? 表示复杂的条件组合与应做动作之间的对应关系
? 判定表与判定树并不适用于作为一种通用的设计工
具,通常将之用于辅助测试
? 例, 航空行李托运费的算法
? 按规定:重量不超过 30公斤的行李可免费托运。重
量超过 30公斤时,对超运部分,头等舱国内乘客收 4
元 /公斤;其它舱位国内乘客收 6元 /公斤;外国乘客
收费为国内乘客的 2倍;残疾乘客的收费为正常乘客
的 1/2。
详细设计的工具
1 2 3 4 5 6 7 8 9
1ú 11 11 11 T T T T F F F F
1· 11 11 T F T F T F T F
11 11 11 11 F F T T F F T T
11 11 11 11 W £ 3 0 T F F F F F F F F
11 ·1 ′
(W - 3 0 ) ′ 2 ′
(W - 3 0 ) ′ 3 ′
(W - 3 0 ) ′ 4 ′ ′
(W - 3 0 ) ′ 6 ′ ′
(W - 3 0 ) ′ 8 ′
(W - 3 0 ) ′ 1 2 ′
11 11 1¨ ±í ±í 11 11 11 11 11 ·1 11 11 ·¨
规则
规则数 ?
条件
动作
详细设计的工具
行李费
算法
行李重量
W > 30
行李重量
W £ 30 免费
国内乘客
外国乘客
头等舱
其他舱
残疾乘客
正常乘客
(W-30) ′2
(W-30) ′4
残疾乘客
正常乘客
(W-30) ′3
(W-30) ′6
头等舱
其他舱
残疾乘客
正常乘客
(W-30) ′4
(W-30) ′8
残疾乘客
正常乘客
(W-30) ′6
(W-30) ′12
用判定树表示计算行李费的算法
详细设计的工具
? 过程设计语言 (PDL)
? 应具备 特点
? 关键字有固定的语法
? 处理特点用自然语言描述
? 有数据说明
? 有子程序定义与调用机制
详细设计的工具
? 过程设计语言 (PDL)
? 优点
? 易于实现由 PDL到源代码的自动转换
? 缺点
? 不够直观
? 模块开发文件夹
? 记录模块开发过程的文档
Jackson程序设计方法
? 5.3.1 Jackson图
? 5.3.2 改进的 Jackson图
? 5.3.3 Jackson方法
Jackson程序设计方法
? Jackson图 (改进 )
? 以数据结构 (data structure)为基础设计每个模块的处理过
程
A
B C
A
Bo Co
S
A
B*
I
顺序 选择 重复
改进的 Jackson图
Jackson程序设计方法
? Jackson方法 (具体示例见 P90)
? 步骤
? 用 Jackson图描述 I\O 的数据结构
? 在两个图中指出有直接因果关系 (causality)、可以同
时处理的单元(重复的次序,次数均相同)
? 把有对应关系的单元合为一个处理框,画在相应的
层次中(不同层以低层为准)
? 列出所有操作条件,并分配到上幅程序结构图中
? 用伪代码 (Pseudocode) 表示程序。
Warnier程序设计方法
? 5.4.1 Warnier方法
? 5.4.2 Warnier方法的辅助技术
Warnier程序设计方法
? Warnier方法
? 步骤 (示例见 P96)
? 用 Warnier 图描述 I\O的数据结构
? 导出程序结构,用 Warnier图描绘程序的处理层次
? 画出程序流程图,并将每个处理框编号
? 分类写出伪码
? 将前一步分类结果标号排序,得到处理过程的伪码
? Warnier方法的辅助技术
? 当 I\O 数据有多个时,借助判定表
程序复杂程度的定量度量
? 5.5.1 McCode方法
? 5.5.2 Halstead方法
程序复杂程度的定量度量
? McCode方法
? 由程序流程图导出程序图
TOTAL=TOTAL+A
K++
输入 A
输出 K,L,TOTAL
停止
T
开始
K=0L=0
TOTAL=0
输入 A
Do While TOTAL<1000 and
A?0
F
A>0T
L++
F
a( 开始 )
b( 入口 )
c
d
e
f
g
h
i
j( 出口 )
k( 停止 )
导
出
程序复杂程度的定量度量
? McCode方法
? 计算复杂度
? V(G) = m - n + p
? 其中 V(G) 为强连通有向图 G中线性无关环 的个数 (称
为 ; m 是边数 ; n 是 节 点 数 ; p 是 G中连通集的数
目
程序复杂程度的定量度量
? McCode方法
? 实例计算 a( 开始 )
b( 入口 )
c
d
e
f
g
h
i
j( 出口 )
k( 停止 )
注意,
?对于一个正常的程
序,其 CFG应是连通
的,即 p = 1.
?通常 程序图 不是强
连通的,故须从出口
到入口画一条虚弧,
使其成为强连通图。
?对于平面图 G,
V(G) =G在平面上围
成的区域的个数。31911V ( G ) ????
程序复杂程度的定量度量
? Halstead方法
? 公式
? 其中 H为程序长度,n1表示不同运算符的个
数,n2表示不同操作数的个数
? E表示程序中包含的错误个数 (误差 <8%)
22212 l o gl o g nnnn 1 ??H
3 0 00/)(l o g 212 nnNE ??