第5章 详细设计(结构化)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
选择结构
选择结构的数据包含两个或多个数据元素,每次使 用这个数据时按一定条件从这些数据元素中选择一 个。
47
5.4.1 逻辑数据结构
重复结构
重复结构的数据,根据使用时的条件由一个数据元 素出现零次或多次构成。
48
5.4.2 设计步骤
基本上由下述五个步骤组成:
分析并确定输入数据和输出数据的逻辑结构,并用 Jackson图描绘这些数据结构。 找出输入数据结构和输出数据结构中有对应关系的 数据单元。所谓有对应关系是指有直接的因果关 系,在程序中可以同时处理的数据单元(对于重复出 现的数据单元必须重复的次序和次数都相同才可能 有对应关系)。
23
5.3.2 N-S图
24
例
25
5.3.2 N-S图
N-S图的嵌套定义形式
26
5.3.3 问题分析图(PAD)
PAD是问题分析图(Problem Analysis Diagram) 的英文缩写,自1973年由日本日立公司发明以 后,已得到一定程度的推广。它用二维树形结 构的图来表示程序的控制流,将这种图翻译成 程序代码比较容易。 PAD也设置了五种基本控制结构的图式,并允 许递归使用。
50
改进的Jackson图
51
5.4.2 设计步骤
列出所有操作和条件(包括分支条件和循环结束条 件),并且把它们分配到程序结构图的适当位置。 用伪码表示程序。
52
例
一个正文文件由若干个记录组成,每个记录是 一个字符串。要求统计每个记录中空格字符的 个数,以及文件中空格字符的总个数。要求的 输出数据格式是,每复制一行输入字符串之 后,另起一行印出这个字符串中的空格数,最 后印出文件中空格的总个数。
49
5.4.2 设计步骤
用下述三条规则从描绘数据结构的Jackson图导出 描绘程序结构的Jackson图。
为每对有对应关系的数据单元,按照它们在数据结构图中 的层次在程序结构图的相应层次画一个处理框(注意,如 果这对数据单元在输入数据结构和输出数据结构中所处的 层次不同,则和它们对应的处理框在程源自文库结构图中所处的 层次与它们之中在数据结构图中层次低的那个对应)。 根据输入数据结构中剩余的每个数据单元所处的层次,在 程序结构图的相应层次分别为它们画上对应的处理框。 根据输出数据结构中剩余的每个数据单元所处的层次,在 程序结构图的相应层次分别为它们画上对应的处理框
42
5.3.6 判定树
例
43
5.4 Jackson方法
面向数据结构的设计方法就是用数据结构作为程序设 计的基础。 这种方法的最终目标是得出对程序处理过程的描述, 最适合于在详细设计阶段使用,也就是说,在完成了 软件结构设计之后,可以使用面向数据结构的方法来 设计每个模块的处理过程。 使用面向数据结构的设计方法,当然首先需要分析确 定数据结构,并且用适当的工具清晰地描述数据结构。
确定每个模块的算法。 确定每一个模块的数据组织。 为每个模块设计一组测试用例。 编写详细设计说明书。
4
5.1 概述
详细设计的原则
模块的逻辑描述正确可靠、清晰易读。 采用结构化程序设计方法,改善控制结构,降低程 序复杂度,提高程序的可读性、可测试性和可维护 性。
5
5.2 结构程序设计
结构程序设计是一种设计程序的技术,它采用 自顶向下逐步求精的设计方法和单入口单出口 的控制结构。 只用3种基本的控制结构就能实现任何单入口 单出口的程序:
顺序 选择 循环
6
5.2 结构化程序设计
经典的控制结构
7
5.2 结构化程序设计
扩充的控制结构
8
5.2 结构化程序设计
使用结构程序设计技术的好处:
自顶向下逐步求精的方法符合人类解决复杂问题的普遍规 律,可以显著提高软件开发的成功率和生产率。 先全局后局部、先整体后细节、先抽象后具体的逐步求精过 程开发出的程序有清晰的层次结构。 使用单入口单出口的控制结构而不使用GO TO语句,使得程 序的静态结构和它的动态执行情况比较一致。 控制结构有确定的逻辑模式,编写程序代码只限于使用很少 几种直截了当的方式。 程序清晰和模块化使得在修改和重新设计一个软件时可以重 用的代码量最大。 程序的逻辑结构清晰,有利于程序正确性证明。
17
5.3.1 程序流程图
程序流程图也称为程序框图,程序流程图使用 五种基本控制结构是:
18
5.3.1 程序流程图
19
示例
例
20
程序流程图的标准符号
21
循环的标准符号
注解的使用
22
5.3.2 N-S图
出于要有一种不允许违背结构程序设计精神的 图形工具的考虑,Nassi和Shneiderman提出了 盒图,又称为N-S图。 盒图没有箭头,因此不允许随意转移控制。坚 持使用盒图作为详细设计的工具,可以使程序 员逐步养成用结构化的方式思考问题和解决问 题的习惯。
41
T ×
5 T F T F
6 F T F F
7 F F F F
8 F T T F
9 F F T F
× ×
5.3.6 判定树
判定树是判定表的变种,也能清晰地表示复杂 的条件组合与应做的动作之间的对应关系。 判定树的优点在于,它的形式简单到不需任何 说明,一眼就可以看出其含义,因此易于掌握 和使用。 多年来判定树一直受到人们的重视,是一种比 较常用的系统分析和设计的工具。
第5章 详细设计
教学内容
5.1 概述 5.2 结构程序设计 5.3 过程设计的工具 5.4 面向数据结构的设计方法 5.5 程序复杂程度的度量 5.6 人机界面设计 5.7 小结 习题
2
5.1 概述
回答应该怎么具体地实现所要求的系统。
(每个模块的实现算法、所需的局部数据结构 )
3
5.1 概述
详细设计的任务
34
5.3.4 PDL
使用PDL语言,逐步求精:
PROCEDURE spellcheck BEGIN --* split document into single words LOOP get next word add word to word list in sortorder EXIT WHEN all words processed END LOOP
32
5.3.4 PDL
PDL的特点
提供全部结构化控制结构、数据说明和模块特征。 能对PDL正文进行结构分割,使之变得易于理解。 为了区别关键字,规定关键字一律大写,其它单词 一律小写。或者规定关键字加下划线,或者规定它 们为黑体字。
33
5.3.4 PDL
内语法使用自然语言来描述处理特性。内语法比较 灵活,只要写清楚就可以,不必考虑语法错,以利 于人们可把主要精力放在描述算法的逻辑上。 有数据说明机制,包括简单的(如标量和数组)与复 杂的(如链表和层次结构)的数据结构。 有子程序定义与调用机制,用以表达各种方式的接 口说明。
31
示例: 拼词检查程序
PROCEDURE spellcheck IS BEGIN split document into single words lood up words in dictionary display words which are not in dictionary create a new dictionary END spellcheck
35
5.3.4 PDL
--* look up words in dictionary LOOP get word from word list IF word not in dictionary THEN --* display words not in dictionary display word prompt on user terminal IF user response says word OK THEN add word to good word list ELSE add word to bad word list ENDIF ENDIF EXIT WHEN all words processed END LOOP
53
例
(a) 输入数据结构;(b) 输出数据结构
54
例
描绘统计空格程 序结构的Jackson图
55
例
把操作和 条件分配 到程序结 构图的适 当位置
130 write ( A ); 140 end
11
5.2 结构化程序设计
程序2 if ( A < B ) and ( A < C ) then write ( A ) else if ( A B ) and ( B < C ) then write ( B ) else write ( C ) endif endif
38
5.3.5 判定表
判定表组成
一张判定表由4部分组成。 左上部列出所有条件,左下部是所有可能的动作。 右上部是表示各种条件组合的一个矩阵,右下部是 和每种条件组合相对应的动作。 判定表右半部的每一列实质上是一条规则,规定了 与特定的条件组合相对应的操作。
39
5.3.5 判定表
例子:计算行李费
假设某航空公司规定,乘客可以免费托运重量不超 过30公斤的行李。 当行李重量超过30公斤时:
对头等舱的国内乘客超重部分每公斤收费4元; 对其他舱的国内乘客超重部分每公斤收费6元; 对外国乘客超重部分每公斤收费比国内乘客多一倍; 对残疾乘客超重部分每公斤收费比正常乘客少一半。
40
5.3.5 判定表
例子:计算行李费
1 国内乘客 头等仓 残疾乘客 行李重量 W≤30 免费 (W-30)× 2 (W-30)× 3 (W-30)× 4 (W-30)× 6 (W-30)× 8 (W-30)× 12 2 T T F F 3 T F F F 4 T T T F × × × × × ×
44
5.4.1 逻辑数据结构
虽然程序中实际使用的数据结构种类繁多,但 是它们的数据元素彼此间的逻辑关系却只有顺 序、选择和重复三类,因此,逻辑数据结构也 只有这三类。
45
5.4.1 逻辑数据结构
顺序结构
顺序结构的数据由一个或多个数据元素组成,每个 元素按确定次序出现一次。
46
5.4.1 逻辑数据结构
12
5.2 结构化程序设计
例:非结构化到结构化
13
5.2 结构化程序设计
例:非结构化到结构化
14
5.3 过程设计
在过程设计阶段,要决定各个模块的实现算 法,并精确地表达这些算法。
从软件开发的工程化观点来看,在使用程序设 计语言编制程序以前,需要对所采用算法的逻 辑关系进行分析,设计出全部必要的过程细 节,并给予清晰的表达。这就是过程设计的任 务。
9
5.2 结构化程序设计
打印A, B, C三数中最小者的程序
10
5.2 结构化程序设计
程序1 if ( A < B ) goto 120; if ( B < C ) goto 110; 100 110 120 write ( C ); goto 140; write ( B ); goto 140; if ( A < C ) goto 130; goto 100;
36
5.3.4 PDL
--* create a new words dictionary dictionary := merge dictionary and good word list END spellcheck
37
5.3.5 判定表
当算法中包含多重嵌套的条件选择时,用程序 流程图、盒图、PAD图或过程设计语言(PDL) 都不易清楚地描述。 判定表却能够清晰地表示复杂的条件组合与应 做的动作之间的对应关系。
27
5.3.3 问题分析图(PAD)
28
例
29
5.3.3 问题分析图(PAD)
PAD的扩充控制结构
30
5.3.4 PDL
PDL (Procedure Design Language)是一种用于 描述功能模块的算法设计和加工细节的语言。 称为设计程序用语言。它是一种伪码。 伪码的语法规则分为“外语法”和“内语法”。 PDL具有严格的关键字外语法,用于定义控制 结构和数据结构,同时它的表示实际操作和条 件的内语法又是灵活自由的,可使用自然语言 的词汇。
15
5.3 过程设计
过程设计的原则和方法
清晰第一的设计风格
结构第一,效率第二
结构化的控制结构
所有的模块只使用单入口、单出口的3种基本控制结构
逐步细化的实现方法
把给定的模块功能转换成详细过程性描述
16
5.3 过程设计
表达过程规格说明的工具叫做详细设计工具, 它可以分为以下六类:
程序流程图 N-S图 PAD图 PDL语言 判定表 判定树
选择结构的数据包含两个或多个数据元素,每次使 用这个数据时按一定条件从这些数据元素中选择一 个。
47
5.4.1 逻辑数据结构
重复结构
重复结构的数据,根据使用时的条件由一个数据元 素出现零次或多次构成。
48
5.4.2 设计步骤
基本上由下述五个步骤组成:
分析并确定输入数据和输出数据的逻辑结构,并用 Jackson图描绘这些数据结构。 找出输入数据结构和输出数据结构中有对应关系的 数据单元。所谓有对应关系是指有直接的因果关 系,在程序中可以同时处理的数据单元(对于重复出 现的数据单元必须重复的次序和次数都相同才可能 有对应关系)。
23
5.3.2 N-S图
24
例
25
5.3.2 N-S图
N-S图的嵌套定义形式
26
5.3.3 问题分析图(PAD)
PAD是问题分析图(Problem Analysis Diagram) 的英文缩写,自1973年由日本日立公司发明以 后,已得到一定程度的推广。它用二维树形结 构的图来表示程序的控制流,将这种图翻译成 程序代码比较容易。 PAD也设置了五种基本控制结构的图式,并允 许递归使用。
50
改进的Jackson图
51
5.4.2 设计步骤
列出所有操作和条件(包括分支条件和循环结束条 件),并且把它们分配到程序结构图的适当位置。 用伪码表示程序。
52
例
一个正文文件由若干个记录组成,每个记录是 一个字符串。要求统计每个记录中空格字符的 个数,以及文件中空格字符的总个数。要求的 输出数据格式是,每复制一行输入字符串之 后,另起一行印出这个字符串中的空格数,最 后印出文件中空格的总个数。
49
5.4.2 设计步骤
用下述三条规则从描绘数据结构的Jackson图导出 描绘程序结构的Jackson图。
为每对有对应关系的数据单元,按照它们在数据结构图中 的层次在程序结构图的相应层次画一个处理框(注意,如 果这对数据单元在输入数据结构和输出数据结构中所处的 层次不同,则和它们对应的处理框在程源自文库结构图中所处的 层次与它们之中在数据结构图中层次低的那个对应)。 根据输入数据结构中剩余的每个数据单元所处的层次,在 程序结构图的相应层次分别为它们画上对应的处理框。 根据输出数据结构中剩余的每个数据单元所处的层次,在 程序结构图的相应层次分别为它们画上对应的处理框
42
5.3.6 判定树
例
43
5.4 Jackson方法
面向数据结构的设计方法就是用数据结构作为程序设 计的基础。 这种方法的最终目标是得出对程序处理过程的描述, 最适合于在详细设计阶段使用,也就是说,在完成了 软件结构设计之后,可以使用面向数据结构的方法来 设计每个模块的处理过程。 使用面向数据结构的设计方法,当然首先需要分析确 定数据结构,并且用适当的工具清晰地描述数据结构。
确定每个模块的算法。 确定每一个模块的数据组织。 为每个模块设计一组测试用例。 编写详细设计说明书。
4
5.1 概述
详细设计的原则
模块的逻辑描述正确可靠、清晰易读。 采用结构化程序设计方法,改善控制结构,降低程 序复杂度,提高程序的可读性、可测试性和可维护 性。
5
5.2 结构程序设计
结构程序设计是一种设计程序的技术,它采用 自顶向下逐步求精的设计方法和单入口单出口 的控制结构。 只用3种基本的控制结构就能实现任何单入口 单出口的程序:
顺序 选择 循环
6
5.2 结构化程序设计
经典的控制结构
7
5.2 结构化程序设计
扩充的控制结构
8
5.2 结构化程序设计
使用结构程序设计技术的好处:
自顶向下逐步求精的方法符合人类解决复杂问题的普遍规 律,可以显著提高软件开发的成功率和生产率。 先全局后局部、先整体后细节、先抽象后具体的逐步求精过 程开发出的程序有清晰的层次结构。 使用单入口单出口的控制结构而不使用GO TO语句,使得程 序的静态结构和它的动态执行情况比较一致。 控制结构有确定的逻辑模式,编写程序代码只限于使用很少 几种直截了当的方式。 程序清晰和模块化使得在修改和重新设计一个软件时可以重 用的代码量最大。 程序的逻辑结构清晰,有利于程序正确性证明。
17
5.3.1 程序流程图
程序流程图也称为程序框图,程序流程图使用 五种基本控制结构是:
18
5.3.1 程序流程图
19
示例
例
20
程序流程图的标准符号
21
循环的标准符号
注解的使用
22
5.3.2 N-S图
出于要有一种不允许违背结构程序设计精神的 图形工具的考虑,Nassi和Shneiderman提出了 盒图,又称为N-S图。 盒图没有箭头,因此不允许随意转移控制。坚 持使用盒图作为详细设计的工具,可以使程序 员逐步养成用结构化的方式思考问题和解决问 题的习惯。
41
T ×
5 T F T F
6 F T F F
7 F F F F
8 F T T F
9 F F T F
× ×
5.3.6 判定树
判定树是判定表的变种,也能清晰地表示复杂 的条件组合与应做的动作之间的对应关系。 判定树的优点在于,它的形式简单到不需任何 说明,一眼就可以看出其含义,因此易于掌握 和使用。 多年来判定树一直受到人们的重视,是一种比 较常用的系统分析和设计的工具。
第5章 详细设计
教学内容
5.1 概述 5.2 结构程序设计 5.3 过程设计的工具 5.4 面向数据结构的设计方法 5.5 程序复杂程度的度量 5.6 人机界面设计 5.7 小结 习题
2
5.1 概述
回答应该怎么具体地实现所要求的系统。
(每个模块的实现算法、所需的局部数据结构 )
3
5.1 概述
详细设计的任务
34
5.3.4 PDL
使用PDL语言,逐步求精:
PROCEDURE spellcheck BEGIN --* split document into single words LOOP get next word add word to word list in sortorder EXIT WHEN all words processed END LOOP
32
5.3.4 PDL
PDL的特点
提供全部结构化控制结构、数据说明和模块特征。 能对PDL正文进行结构分割,使之变得易于理解。 为了区别关键字,规定关键字一律大写,其它单词 一律小写。或者规定关键字加下划线,或者规定它 们为黑体字。
33
5.3.4 PDL
内语法使用自然语言来描述处理特性。内语法比较 灵活,只要写清楚就可以,不必考虑语法错,以利 于人们可把主要精力放在描述算法的逻辑上。 有数据说明机制,包括简单的(如标量和数组)与复 杂的(如链表和层次结构)的数据结构。 有子程序定义与调用机制,用以表达各种方式的接 口说明。
31
示例: 拼词检查程序
PROCEDURE spellcheck IS BEGIN split document into single words lood up words in dictionary display words which are not in dictionary create a new dictionary END spellcheck
35
5.3.4 PDL
--* look up words in dictionary LOOP get word from word list IF word not in dictionary THEN --* display words not in dictionary display word prompt on user terminal IF user response says word OK THEN add word to good word list ELSE add word to bad word list ENDIF ENDIF EXIT WHEN all words processed END LOOP
53
例
(a) 输入数据结构;(b) 输出数据结构
54
例
描绘统计空格程 序结构的Jackson图
55
例
把操作和 条件分配 到程序结 构图的适 当位置
130 write ( A ); 140 end
11
5.2 结构化程序设计
程序2 if ( A < B ) and ( A < C ) then write ( A ) else if ( A B ) and ( B < C ) then write ( B ) else write ( C ) endif endif
38
5.3.5 判定表
判定表组成
一张判定表由4部分组成。 左上部列出所有条件,左下部是所有可能的动作。 右上部是表示各种条件组合的一个矩阵,右下部是 和每种条件组合相对应的动作。 判定表右半部的每一列实质上是一条规则,规定了 与特定的条件组合相对应的操作。
39
5.3.5 判定表
例子:计算行李费
假设某航空公司规定,乘客可以免费托运重量不超 过30公斤的行李。 当行李重量超过30公斤时:
对头等舱的国内乘客超重部分每公斤收费4元; 对其他舱的国内乘客超重部分每公斤收费6元; 对外国乘客超重部分每公斤收费比国内乘客多一倍; 对残疾乘客超重部分每公斤收费比正常乘客少一半。
40
5.3.5 判定表
例子:计算行李费
1 国内乘客 头等仓 残疾乘客 行李重量 W≤30 免费 (W-30)× 2 (W-30)× 3 (W-30)× 4 (W-30)× 6 (W-30)× 8 (W-30)× 12 2 T T F F 3 T F F F 4 T T T F × × × × × ×
44
5.4.1 逻辑数据结构
虽然程序中实际使用的数据结构种类繁多,但 是它们的数据元素彼此间的逻辑关系却只有顺 序、选择和重复三类,因此,逻辑数据结构也 只有这三类。
45
5.4.1 逻辑数据结构
顺序结构
顺序结构的数据由一个或多个数据元素组成,每个 元素按确定次序出现一次。
46
5.4.1 逻辑数据结构
12
5.2 结构化程序设计
例:非结构化到结构化
13
5.2 结构化程序设计
例:非结构化到结构化
14
5.3 过程设计
在过程设计阶段,要决定各个模块的实现算 法,并精确地表达这些算法。
从软件开发的工程化观点来看,在使用程序设 计语言编制程序以前,需要对所采用算法的逻 辑关系进行分析,设计出全部必要的过程细 节,并给予清晰的表达。这就是过程设计的任 务。
9
5.2 结构化程序设计
打印A, B, C三数中最小者的程序
10
5.2 结构化程序设计
程序1 if ( A < B ) goto 120; if ( B < C ) goto 110; 100 110 120 write ( C ); goto 140; write ( B ); goto 140; if ( A < C ) goto 130; goto 100;
36
5.3.4 PDL
--* create a new words dictionary dictionary := merge dictionary and good word list END spellcheck
37
5.3.5 判定表
当算法中包含多重嵌套的条件选择时,用程序 流程图、盒图、PAD图或过程设计语言(PDL) 都不易清楚地描述。 判定表却能够清晰地表示复杂的条件组合与应 做的动作之间的对应关系。
27
5.3.3 问题分析图(PAD)
28
例
29
5.3.3 问题分析图(PAD)
PAD的扩充控制结构
30
5.3.4 PDL
PDL (Procedure Design Language)是一种用于 描述功能模块的算法设计和加工细节的语言。 称为设计程序用语言。它是一种伪码。 伪码的语法规则分为“外语法”和“内语法”。 PDL具有严格的关键字外语法,用于定义控制 结构和数据结构,同时它的表示实际操作和条 件的内语法又是灵活自由的,可使用自然语言 的词汇。
15
5.3 过程设计
过程设计的原则和方法
清晰第一的设计风格
结构第一,效率第二
结构化的控制结构
所有的模块只使用单入口、单出口的3种基本控制结构
逐步细化的实现方法
把给定的模块功能转换成详细过程性描述
16
5.3 过程设计
表达过程规格说明的工具叫做详细设计工具, 它可以分为以下六类:
程序流程图 N-S图 PAD图 PDL语言 判定表 判定树