第5章 详细设计与编码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.2 过程设计的工具
• 伪代码的基本控制结构
简单陈述句结构:避免复合语句。 判定结构:IF_THEN_ELSE或CASE_OF结构。 重复结构:WHILE_DO或REPEAT_UNTIL结构。
5.2 过程设计的工具
• 伪代码实例:“检查订货单”例子
5.2 过程设计的工具
• 伪代码的特点
5.1 结构化程序设计
• 结构程序设计的主要原则
(7) 在程序设计过程中,尽量采用自顶向下(Top- Down)、逐步细化(Stepwise Refinement)的原则, 由粗到细,一步步展开。
5.1 结构化程序设计
• 自顶向下、逐步细化的设计过程
主要包括两个方面:
一是将复杂问题的解法分解和细化成由若干个模
• N-S图
Nassi和Shneiderman 提出了一种符合结构化程序
设计原则的图形描述工具,叫做盒图 (boxdiagram),也叫做N-S图。
在N-S图中,为了表示5种基本控制结构,规定了5 种图形构件。
5.2 过程设计的工具
• N-S图的基本控制结构
5.2 过程设计的工具
• N-S图的实例
5.3 程序设计语言
• 程序设计语言的性能
从软件心理学及软件工程角度对程序设计语言的 性能进行讨论。
5.3 程序设计语言
• 软件心理学的观点
(1) 一致性。表示一种语言所使用符号的兼容程度、 允许随意规定限制,以及允许对语法或语义破 例的程度。 (2) 二义性。虽然语言的编译程序总是以一种机械 的规则来解释语句,但读者则可能用不同的方 式来理解语句。 (3) 简洁性。程序设计语言的简洁性用来表示为了 用该语言编写程序,必须记忆的关于代码的信 息量。
5.1 结构化程序设计
• 结构程序设计的主要原则
(6) 严格控制GOTO语句,仅在下列情形才可使用: 用非结构化的程序设计语言去实现结构化的构 造。 若不使用GOTO语句就会使程序功能模糊。 在某种可以改善而不是损害程序可读性的情况 下。例如,在查找结束时,文件访问结束时, 出现错误情况要从循环中转出时,使用布尔变 量和条件结构来实现就不如用GOTO语句来得简 洁易懂。
5.1 结构化程序设计
自顶向下、逐步求精的方法的优点
(4) 程序清晰和模块化,使得在修改和重新设计一个软件时, 可复用的代码量最大。 (5) 程序的逻辑结构清晰,有利于程序正确性证明。 (6) 每一步工作仅在上层结点的基础上做不多的设计扩展, 便于检查。 (7) 有利于设计的分工和组织工作。
5.2 过程设计的工具
消GOTO语句;
1966年,Bohm和Jacopini证明:只用三种基本的 控制结构“顺序”、“选择”和“循环”就能实 现任何单入口和单出口的没有“死循环”的程序。
5.1 结构化程序设计
• 结构程序设计的概念
如果一个程序的代码块仅仅通过顺序、选择和循
环这三种基本控制结构进行连接,并且每个代码
块只有一个入口和一个出口,则称这个程序是结
构化的。
5.1 结构化程序设计
• 结构程序设计的主要原则
(1)使用语言中的顺序、选择、重复等有限的基本控 制结构表示程序逻辑。 (2)选用的控制结构只准许有一个入口和一个出口。 (3)程序语句组成容易识别的块(Block),每块只 有一个入口和一个出口。 (4)复杂结构应该用基本控制结构进行组合嵌套来实 现。 (5)语言中没有的控制结构,可用一段等价的程序段 模拟, 但要求该程序段在整个系统中应前后一致。
• 软件工程的观点
(1) 详细设计应能直接地容易地翻译成代码程序。 (2) 源程序应具有可移植性。 (3) 编译程序应具有较高的效率。 (4) 尽可能应用代码生成的自动工具。 (5) 可维护性。
5.3 程序设计语言
• 程序设计语言的分类
(1)
(2) (3)
从软件工程的角度,根据程序设计语言发展的 历程,可以将程序设计语言大致分为4类。 从属于机器的语言——第一代语言 汇编语言——第二代语言 高级程序设计语言——第三代语言 从20世纪50年代就开始出现,它们的特点是用途 广泛。典型的高级程序设计语言有ALGOL、 FORTRAN、COBOL、BASIC、PASCAL、C、C ++、 Lisp、PROLOG、Ada等。
块组成的层次结构; 二是将每个模块的功能逐步分解细化为一系列的 处理。
5.1 结构化程序设计
• 自顶向下、逐步细化的设计过程
在处理较大的复杂任务时,常采取“模块化”的
方法,即在程序设计时不是将全部内容都放在同
一个模块中,而是分成若干个模块,每个模块实 现一个功能。
模块分解完成后,下一步的任务就是将每个模块 的功能逐步分解细化为一系列的处理。
5.1 结构化程序设计
上述框架中每一个加工语句都可进一步细化成一个循环语句 main () { /*建立2到100的数组A[ ],其中A[i]=i*/ - - 1 for (i = 2;i <= 100;i++)A[i] = i; /* 建立2到10的素数表B[ ],存放2到10以内的素数*/ - 2 B[1] =2; B[2] = 3; B[3] = 5; B[4] = 7; /*若A[i]=i是B[ ]中任一数的倍数,则剔除A[i]*/ - - 3 for (j = 1; j <= 4; j++)
5.2 过程设计的工具
• 程序流程图的基本控制结构
百度文库.2 过程设计的工具
• 程序流程 图实例
5.2 过程设计的工具
• 程序流程图的标准符号(国家标准)
5.2 过程设计的工具
• 循环的标准符号
5.2 过程设计的工具
• 注解符的使用
5.2 过程设计的工具
• 多选择判断
5.2 过程设计的工具
5.3 程序设计语言
• 软件心理学的观点
(4) 局部性。是指程序设计语言的综合特性。在编 码的过程中,由语句组合成模块,由模块组装为 程序系统结构,并在组装过程中实现模块的高内 聚和低耦合,可使程序的局部性加强。 (5) 传统性。人们学习一种新的程序设计语言的能 力受到传统的影响。
5.3 程序设计语言
5.1 结构化程序设计
• 自顶向下、逐步细化的设计过程
在概要设计阶段,我们已经采用自顶向下、逐步
细化的方法,把复杂问题的解法分解和细化成了
由许多功能模块组成的层次结构的软件系统。
在详细设计和编码阶段,我们还应当采取自顶向 下、逐步求精的方法,把模块的功能逐步分解, 细化为一系列具体的步骤,进而翻译成一系列用
(1) 有固定的关键字外语法,提供全部结构化控制结构、数 据说明和模块特征。外语法的关键字是有限的词汇集,它 们能对伪代码正文进行结构分割,使之变得易于理解。 (2) 内语法使用自然语言来描述处理特性,为开发者提供方 便,提高可读性。 (3) 有数据说明机制,包括简单的(如标量和数组)与复杂 的(如链表和层次结构)的数据结构。 (4) 有子程序定义与调用机制,用以表达各种方式的接口说 明。
表达过程规格说明的工具称为过程描述工具,可 以将过程描述工具分为以下3类。 (1) 图形工具:把过程的细节用图形方式描述出来, 如程序流程图、N-S图、PAD图、决策树等。 (2) 表格工具:用一张表来表达过程的细节。这张 表列出了各种可能的操作及其相应的条件,即描 述了输入、处理和输出信息,如决策表。 (3) 语言工具:用某种类高级语言(称为伪代码) 来描述过程的细节,如很多数据结构教材中使用 类Pascal、类C语言来描述算法。
5.2 过程设计的工具
• N-S图的扩展表示
5.2 过程设计的工具
• PAD图
PAD(problem analysis diagram )是日本日立公 司提出,由程序流程图演化来的,用结构化程序 设计思想表现程序逻辑结构的图形工具。 PAD也设臵了5种基本控制结构的图式,并允许递 归使用。
5.2 过程设计的工具
某种程序设计语言写成的程序。
5.1 结构化程序设计
• 自顶向下、逐步细化方法举例
用筛选法求100以内的素数。
所谓的筛选法,就是从2到100中去掉2,3,5,7的
倍数,剩下的就是100以内的素数。
5.1 结构化程序设计
首先按程序功能写出一个框架
main () { 建立2到100的数组A[ ],其中A[i]=i;- - - - - 1 建立2到10的素数表B[ ],存放2到10以内的素数;- - 2 若A[i]=i是B[ ]中任一数的倍数,则剔除A[i]; - - 3 输出A[ ]中所有没有被剔除的数; - - - - - - - 4 }
5.2 过程设计的工具
• 程序流程图的基本控制结构
(1) 顺序型:几个连续的加工步骤依次排列构成。 (2) 选择型:由某个逻辑判断式的取值决定选择两个 加工中的一个。 (3) 先判定(while)型循环:在循环控制条件成立 时,重复执行特定的加工。 (4) 后判定(until)型循环:重复执行某些特定的 加工,直至控制条件成立。 (5) 多情况(case)型选择:列举多种加工情况, 根据控制变量的取值,选择执行其一。
5.2 过程设计的工具
• 程序流程图
程序流程图也称为程序框图,是软件开发者最熟 悉的算法表达工具。 早期的流程图也存在一些缺点。特别是表示程序 控制流程的箭头,使用的灵活性极大,程序员可 以不受任何约束,随意转移控制,这将不符合结 构化程序设计的思想。 为使用流程图描述结构化程序,必须对流程图加 以限制。
• PAD图的基本控制结构
5.2 过程设计的工具
• PAD图的实例
5.2 过程设计的工具
• PAD的扩充控制结构
5.2 过程设计的工具
• PAD的优点 使用PAD符号所设计出来的程序必然是结构化程序。 PAD图描绘程序结构清晰,图中竖线的总条数就是 程序的层次数。 用PAD图表现程序逻辑易读、易懂、易记。 容易将PAD图自动转换为高级语言源程序。 PAD图既可以表示程序逻辑,也可用于描绘数据结 构。 PAD图的符号支持自顶向下、逐步求精方法的使用。
检查A[ ]所有的数能否被B[j]整除并将能被整除的数从A[]中剔除;
/*输出A[ ]中所有没有被剔除的数*/ for (i = 2; i <= 100; i++)
若A[i]没有被剔除,则输出之
- - - - - - - 4
}
5.1 结构化程序设计
自顶向下、逐步求精的方法的优点
(1) 自顶向下、逐步求精方法符合人们解决复杂问题的普遍 规律。可提高软件开发的成功率和生产率。 (2) 用先全局后局部,先整体后细节,先抽象后具体的逐步 求精的过程开发出来的程序具有清晰的层次结构,因此程 序容易阅读和理解。 (3) 程序自顶向下、逐步细化,分解成树形结构。 在同一 层的结点上做细化工作,相互之间没有关系,因此它们之 间的细化工作相互独立。在任何一步发生错误,一般只影 响它下层的结点,同一层的其他结点不受影响。
5.2 过程设计的工具
• N-S图的特点
(1) 图中每个矩形框(除CASE构造中表示条件取值的矩形框 外)都是明确定义了的功能域(即一个特定控制结构的作 用域),以图形表示,清晰可见。 (2) 它的控制转移不能任意规定,必须遵守结构化程序设计 的要求。 (3) 很容易确定局部数据和(或)全局数据的作用域。 (4) 很容易表现嵌套关系,也可以表示模块的层次结构。
5.2 过程设计的工具
• 伪代码
伪代码是一种介于自然语言和形式化语言之间的 半形式化语言,是一种用于描述功能模块的算法 设计和加工细节的语言,也称为程序设计语言 (Program Design Language,PDL)。 伪码的语法规则分为“外语法”和“内语法”。 外语法应当符合一般程序设计语言常用语句的语 法规则; 内语法可以用英语中一些简单的句子、短语和通 用的数学符号来描述程序应执行的功能。
第2部分 结构化软件开发方法
第5章 详细设计与编码
5.1 结构化程序设计
• 由于软件开发和维护中存在的一系列严重 问题,于20世纪60年代爆发了软件危机。 • 为了克服软件危机,引发了程序设计的一 场革命,诞生了结构化程序设计方法。
5.1 结构化程序设计
• 结构化程序设计的概念与原则
最早由E. W. Dijkstra提出;建议从高级语言中取