《第6章 程序编码优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第6章 程序编码优秀PPT.ppt(75页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第6章 程序编码现在学习的是第1页,共75页第6章 程序编码2023/2/24 *2结束返回所谓编码,是使用选定的程序设计语言,把模块的过程描述翻译为用该语言书写的源程序。源程序不仅要求语法上的正确性,还要求源程序具有良好的结构性和良好的程序设计风格。在程序编写时应考虑到,所写的程序将被别人阅读,一定要尽量使程序写得容易被人读懂。目前,人们编写源程序还不能使用自然语言,只能用某种程序设计语言。6.1 6.1 程序编码的目的程序编码的目的现在学习的是第2页,共75页2023/2/24 *3结束返回6.1 6.1 程序编码的目的程序编码的目的编码的目的:使用选定的程序设计语言,把模块的过程性描述翻
2、译为用该语言书写的源程序(源代码)。模块的过程性描述 (不可执行的)源程序(可执行的)编 码第6章 程序编码现在学习的是第3页,共75页2023/2/24 *4结束返回6.2 6.2 程序设计语言程序设计语言程序编码阶段的任务程序编码阶段的任务是将软件的详细设计转换成用程序是将软件的详细设计转换成用程序设计语言实现的程序代码设计语言实现的程序代码,即把用,即把用PDLPDL伪码写成的程序,伪码写成的程序,翻译成计算机能接受的诸如翻译成计算机能接受的诸如C C、C#C#、DelphiDelphi、汇编之类程、汇编之类程序设计语言的程序。序设计语言的程序。因此,程序设计语言的性能和设计风格对于程序
3、设计因此,程序设计语言的性能和设计风格对于程序设计的效能和质量有着直接的关系。的效能和质量有着直接的关系。第6章 程序编码现在学习的是第4页,共75页2023/2/24 *5结束返回6.2.1 6.2.1 程序设计语言的分类程序设计语言的分类程序设计语言有多种分类法程序设计语言有多种分类法按照语言的抽象级别按照语言的抽象级别,有,有低级语言低级语言和和高级语言高级语言。低级语言低级语言包括包括机器语言机器语言(第一代语言第一代语言)和和汇编语言汇编语言(第二代语言第二代语言),它们都是与特定计算机硬件密切相关的程序设计语言。,它们都是与特定计算机硬件密切相关的程序设计语言。高级语言高级语言是不
4、反映特定计算机体系结构的程序设计语言,其表示是不反映特定计算机体系结构的程序设计语言,其表示方法更接近待解决问题的表示方法,包括方法更接近待解决问题的表示方法,包括FORTRANFORTRAN、C C等,即第三等,即第三代语言。代语言。6.2 6.2 程序设计语言程序设计语言第6章 程序编码现在学习的是第5页,共75页2023/2/24 *6结束返回按照应用的范围按照应用的范围,有有通用语言通用语言和和专用语言专用语言。通用语言通用语言可适用于多种应用,包括可适用于多种应用,包括BasicBasic、FORTRANFORTRAN、COBOLCOBOL、C C以及面向对象语言以及面向对象语言Vi
5、sual CVisual C(VisualVisual族)、族)、JavaJava、族等。族等。专用语言专用语言是为特殊的应用设计的语言。通常具有自己特殊的语法形是为特殊的应用设计的语言。通常具有自己特殊的语法形式。面对特定的问题,输入结构及词汇表与该问题的相应范围密切式。面对特定的问题,输入结构及词汇表与该问题的相应范围密切相关。例如人工智能领域相关。例如人工智能领域LispLisp、PROLOGPROLOG,图像处理语言,图像处理语言MatlabMatlab等。等。6.2 6.2 程序设计语言程序设计语言第6章 程序编码现在学习的是第6页,共75页2023/2/24 *7结束返回按照对用户
6、的要求按照对用户的要求,有有过程性语言过程性语言和和非过程性语言非过程性语言。过程性语言过程性语言是一种通过指明一系列可执行的运算和运算次序来描是一种通过指明一系列可执行的运算和运算次序来描述计算过程的语言,如述计算过程的语言,如C C、FORTRANFORTRAN、COBOLCOBOL等。等。非过程性语言非过程性语言是一种不显式指定处理细节的程序设计语言,是一种不显式指定处理细节的程序设计语言,如查询语言如查询语言SQLSQL、程序生成器、判定支持语言、原型语言、程序生成器、判定支持语言、原型语言、形式化规格说明语言等。形式化规格说明语言等。6.2 6.2 程序设计语言程序设计语言第6章 程
7、序编码现在学习的是第7页,共75页2023/2/24 *8结束返回6.2.2 6.2.2 程序设计语言的选择程序设计语言的选择为某个特定开发项目选择程序设计语言时:为某个特定开发项目选择程序设计语言时:从从技术角度、工程角度、心理学角度技术角度、工程角度、心理学角度评价和比较各种语言评价和比较各种语言的适用程度;的适用程度;考虑考虑现实可能性现实可能性。需要作出某种合理的需要作出某种合理的折衷折衷。在选择与评价语言时,首先要从在选择与评价语言时,首先要从问题入手问题入手,确定它的,确定它的要求要求是什么是什么?这些要求的这些要求的相对重要性相对重要性如何如何?再根据这些要求和相对重要性来衡量再
8、根据这些要求和相对重要性来衡量能采用的语言。能采用的语言。6.2 6.2 程序设计语言程序设计语言第6章 程序编码现在学习的是第8页,共75页2023/2/24 *9结束返回通常考虑的因素有:通常考虑的因素有:项目的应用范围;项目的应用范围;算法和计算复杂性;算法和计算复杂性;软件执行的环境;软件执行的环境;性能上的考虑与实现的条件;性能上的考虑与实现的条件;数据结构的复杂性;数据结构的复杂性;软件开发者的知识水平和心理因素等软件开发者的知识水平和心理因素等。6.2 6.2 程序设计语言程序设计语言第6章 程序编码现在学习的是第9页,共75页6.2 6.2 程序设计语言程序设计语言第6章 程序
9、编码项目应用领域是选择语言的关键因素,有下列几种类型。1.科学工程计算软件(1)FORTRAN语言(2)Pascal语言(3)C语言(4)PL/1语言2.数据处理与数据库应用软件(1)Cobol语言(2)SQL语言(3)Oracle(4)FoxPro(5)Power Builder 现在学习的是第10页,共75页3.实时处理软件(1)汇编语言(2)Ada语言4.系统软件汇编语言、C语言、Pascal语言和Ada语言。5.人工智能软件(1)Lisp语言(2)Prolog语言6.2 6.2 程序设计语言程序设计语言第6章 程序编码现在学习的是第11页,共75页6.2 6.2 程序设计语言程序设计语
10、言第6章 程序编码选择语言的原则为:1.最少工作量原则;2.最少技巧性原则;3.最少错误原则;4.最少维护原则;5.最少记忆原则。现在学习的是第12页,共75页6.2 6.2 程序设计语言程序设计语言第6章 程序编码程序设计的总原则:1.先求正确后求快;2.先求清晰后求快;3.求快不忘保持程序正确;4.保持程序整洁以求快;5.不要因效率而牺牲清晰。现在学习的是第13页,共75页6.2 6.2 程序设计语言程序设计语言第6章 程序编码好程序的标准:1.易于测试和调试;2.易于维护;3.易于修改;4.设计简单;5.高效率。现在学习的是第14页,共75页6.2 6.2 程序设计语言程序设计语言第6章
11、 程序编码现在学习的是第15页,共75页6.2 6.2 程序设计语言程序设计语言第6章 程序编码现在学习的是第16页,共75页6.2 6.2 程序设计语言程序设计语言第6章 程序编码现在学习的是第17页,共75页2023/2/24 *18结束返回6.3 6.3 程序设计风格程序设计风格程序的良好风格包括:程序的良好风格包括:源程序文档化源程序文档化数据说明数据说明语句说明语句说明输入输入/输出方法输出方法第6章 程序编码现在学习的是第18页,共75页2023/2/24 *19结束返回6.3.1 6.3.1 源程序文档化源程序文档化 标识符的命名 n 标识符,包括模块名、变量名、常量名、标号名、
12、子程序名、数据区名以及缓冲区名等。n 这些名字应能反映它所代表的实际东西,应有一定实际意义。n 例如,表示次数的量用Times,表示总量用Total,表示平均值用Average,表示和的量用Sum等。6.3 6.3 程序设计风格程序设计风格第6章 程序编码现在学习的是第19页,共75页2023/2/24 *20结束返回名字不是越长越好,应当选择精炼的意义明确的名字。名字不是越长越好,应当选择精炼的意义明确的名字。必要时可使用缩写名字,但注意缩写规则要一致,并且要给必要时可使用缩写名字,但注意缩写规则要一致,并且要给每一个名字加注释。每一个名字加注释。在一个程序中,一个变量只应用于一种用途。在一
13、个程序中,一个变量只应用于一种用途。new.balance.accounts.payablenew.balance.accounts.payable /名字太长名字太长 nbap nbap /需加注释需加注释 N N/?6.3.1 6.3.1 源程序文档化源程序文档化第6章 程序编码现在学习的是第20页,共75页2023/2/24 *21结束返回程序的注释程序的注释 程序中的注释是程序员与日后的程序读者之间通信的重要程序中的注释是程序员与日后的程序读者之间通信的重要手段。手段。注释绝不是可有可无的。注释绝不是可有可无的。一些正规的程序文本中,注释行的数量占到整个源程一些正规的程序文本中,注释行
14、的数量占到整个源程序的序的1/31/3到到1/21/2,甚至更多。,甚至更多。注释分为注释分为序言性注释序言性注释和和功能性注释功能性注释。6.3.1 6.3.1 源程序文档化源程序文档化第6章 程序编码现在学习的是第21页,共75页2023/2/24 *22结束返回序言性注释序言性注释通常置于每个程序模块的开头部分,它应当通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序本身具有给出程序的整体说明,对于理解程序本身具有引导作用。引导作用。包括:包括:程序标题程序标题;有关本模块功能和目的的说明;有关本模块功能和目的的说明;6.3.1 6.3.1 源程序文档化源程序文档化第
15、6章 程序编码现在学习的是第22页,共75页2023/2/24 *23结束返回主要算法;主要算法;接口说明:接口说明:包括调用形式,参数描述,子程序清单;包括调用形式,参数描述,子程序清单;有关数据描述:有关数据描述:重要的变量及其用途,约束或限制条件,重要的变量及其用途,约束或限制条件,以及其它有关信息;以及其它有关信息;模块位置:模块位置:在哪一个源文件中,或隶属于哪一个软件包;在哪一个源文件中,或隶属于哪一个软件包;开发简历:开发简历:模块设计者,复审者,复审日期,修改日期及模块设计者,复审者,复审日期,修改日期及有关说明等。有关说明等。6.3.1 6.3.1 源程序文档化源程序文档化第
16、6章 程序编码现在学习的是第23页,共75页2023/2/24 *24结束返回功能性注释功能性注释功能性注释嵌在源程序体中,用以描述其后的语句或程功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样。序段是在做什么工作,或是执行了下面的语句会怎么样。要点:要点:描述一段程序,而不是每一个语句;描述一段程序,而不是每一个语句;用缩进和空行,使程序与注释容易区别;用缩进和空行,使程序与注释容易区别;注释要正确。注释要正确。6.3.1 6.3.1 源程序文档化源程序文档化第6章 程序编码现在学习的是第24页,共75页2023/2/24 *25结束返回 视觉
17、组织视觉组织 恰当地利用恰当地利用空格空格,可以突出运算的优先性,避免发生运算,可以突出运算的优先性,避免发生运算的错误。的错误。例如例如,将表达式,将表达式 (A-17)ANDNOT(B=49)ORC(A-17)ANDNOT(B=49)ORC写成写成 (A-17)AND NOT(B=49)OR C (A-17)AND NOT(B3,且N为奇数,以便进行多数表决。6.5 6.5 冗余编程及容错技术冗余编程及容错技术第6章 程序编码现在学习的是第58页,共75页动态冗余是指系统连接一个参与工作的主模块,同时准备若干个备用模块,当系统检测到工作的主观模块出现故障时,就切换到一个备用的模块,当换上的
18、备用模块又发生故障时,再切换到另一个备用模块,依次类推。主模块备用模块1备用模块2备用模块3输入转换开关输出动态冗余结构图6.5 6.5 冗余编程及容错技术冗余编程及容错技术第6章 程序编码现在学习的是第59页,共75页混合冗余是静态冗余和动态冗余的结合。通常有N个模块并行工作并进行多数表决,组成静态冗余,有M个模块作为动态冗余中的备用模块,当参与表决的一个并行模块出现故障时就用一个备用模块来替换,以维持静态冗余系统的完整性。并行模块2备用模块1备用模块2输入转 换 开 关输出混合冗余结构图并行模块1并行模块3多数表决器6.5 6.5 冗余编程及容错技术冗余编程及容错技术第6章 程序编码现在学
19、习的是第60页,共75页(2 2)信息冗余)信息冗余信息冗余是通过在数据中附加冗余的信息位来达到故障检测和容错的目的。通常情况下,附加的信息位越多,其检错纠错的能力就越强,但是这同时也增加了复杂度和难度。信息冗余最常见的有检错码和纠错码。检错码只能检查出错误的存在,不能改正错误,而纠错码能检查出错误并能纠正错误。常用的检错纠错码有奇偶校验码、海明码、循环码等。6.5 6.5 冗余编程及容错技术冗余编程及容错技术第6章 程序编码现在学习的是第61页,共75页(3 3)时间冗余)时间冗余时间冗余的基本思想是:重复执行指令或者一段程序来消除故障的影响,以达到容错的效果,它是用消耗时间来换取容错的目的
20、。根据执行的是一条指令还是一段程序,分成两种方法:n一种是指令复执。当检测出故障的时候,重复执行故障指令,若故障是瞬时的,则在指令复执期间可能不会出现,程序就可以继续向前运行。n另一种是程序返(卷)回。它不是重复执行一条指令,而是重复执行一小段程序。在整段程序中可以设置多个恢复点,程序有错误的情况下可以从一个个恢复点处开始重复执行程序。首先检验一小段程序的计算结果,若结果出现错误则返回再重复执行这个部分,若一次返回不能解决,可以多次返回,直到故障消除。6.5 6.5 冗余编程及容错技术冗余编程及容错技术第6章 程序编码现在学习的是第62页,共75页(4)冗余附加技术冗余技术实际上是对硬件、程序
21、、指令、数据等资源进行的冗余储备,所有这些冗余资源和技术统称为冗余附加技术。按不同的容错目的,实现冗余附加技术的侧重点不同。以屏蔽硬件错误为目的的冗余附加技术包括:n关键程序和数据的冗余存储和调用;n检测、表决、切换、重构、纠错和复算的实现。屏蔽软件错误的冗余附加技术包括:n各自独立设计的功能相同的冗余备份程序的存储及调用;n错误检测程序及错误恢复程序;n为实现容错软件所需的固化程序。6.5 6.5 冗余编程及容错技术冗余编程及容错技术第6章 程序编码现在学习的是第63页,共75页3.容错软件的设计过程容错系统设计过程如图所示:6.5 6.5 冗余编程及容错技术冗余编程及容错技术第6章 程序编
22、码建立需求规格说明设计软件体系结构分析错误类型确定容错范围确定容错措施修改冗余结构完成评估冗余效果容错系统设计过程现在学习的是第64页,共75页容错系统的设计过程如下:n(1)首先要按设计任务要求进行常规设计,尽量保证设计结果正确,不能把希望寄托在容错上。n(2)根据系统的工作环境对可能出现的错误分类,确定实现容错的范围。例如,对于硬件的瞬时错误可以采用指令复执或程序复算;对于永久性错误,则采用备份替换或系统重构方式。对于软件来说,只有最大限度地弄清发生错误的原因和规律,才能正确地判断和分类,实现成功容错。n(3)按照“成本-效益”最优的原则,选用某种冗余手段(结构、信息、时间)来实现对各类错
23、误的屏蔽。n(4)分析验证上述冗余结构的容错效果。如果没有达到预期效果,则应重新进行冗余设计,直到冗余效果满意为止。6.5 6.5 冗余编程及容错技术冗余编程及容错技术第6章 程序编码现在学习的是第65页,共75页2023/2/24 *66结束返回6.6 6.6 程序复杂性度量程序复杂性度量程序复杂性主要指模块内程序的复杂性程序复杂性主要指模块内程序的复杂性。它直接关系到软件开。它直接关系到软件开发费用的多少,开发周期的长短和软件内部错误的多少。发费用的多少,开发周期的长短和软件内部错误的多少。程序复杂性度量的参数主要有程序复杂性度量的参数主要有:规模:规模:程序指令条数或源程序行数程序指令条
24、数或源程序行数 难度:难度:与程序操作数和操作符有关的度量与程序操作数和操作符有关的度量 结构:结构:与程序分支数有关的度量与程序分支数有关的度量 智能度:智能度:算法的难易程度算法的难易程度第6章 程序编码现在学习的是第66页,共75页2023/2/24 *67结束返回1.1.代码行度量法代码行度量法度量程序的复杂性,最简单的方法就是统计程序的度量程序的复杂性,最简单的方法就是统计程序的源代码行数源代码行数。此方法基于两个此方法基于两个前提前提:程序复杂性随着程序规模的增加,不均衡地增长;程序复杂性随着程序规模的增加,不均衡地增长;控制程序规模的方法最好采用分而治之的办法。将一个控制程序规模
25、的方法最好采用分而治之的办法。将一个大程序分解成若干个简单的可理解的程序段。大程序分解成若干个简单的可理解的程序段。6.6 6.6 程序复杂性度量程序复杂性度量第6章 程序编码现在学习的是第67页,共75页2023/2/24 *68结束返回 方法的基本考虑是统计一个程序模块的方法的基本考虑是统计一个程序模块的源代码行数目源代码行数目,并以,并以源代码行数源代码行数做为做为程序复杂性的度量程序复杂性的度量。若设每行代码的出错率为每若设每行代码的出错率为每100100行源程序中可能有的错误数行源程序中可能有的错误数目,例如每行代码的出错率为目,例如每行代码的出错率为1 1,则是指每,则是指每100
26、100行源程序中行源程序中可能有一个错误。可能有一个错误。程序出错率的估算范围是从程序出错率的估算范围是从0.040.04-7-7之间之间。对于少于对于少于100100个语句的小程序,源代码行数与出错率是个语句的小程序,源代码行数与出错率是线性相关线性相关的。的。随着程序的增大,出错率以随着程序的增大,出错率以非线性非线性方式增长。方式增长。6.6 6.6 程序复杂性度量程序复杂性度量第6章 程序编码现在学习的是第68页,共75页n代码行估算技术为了使程序规模的估计值更接近实际值,可以由多名软件工程师分别作出估计,每个人都估计代码行的最小值(a)、最大值(b)和最可能值(m),分别算出这3种规
27、模的平均值()、()、(),再用下式计算程序代码行的估计值:6.6 6.6 程序复杂性度量程序复杂性度量第6章 程序编码现在学习的是第69页,共75页2023/2/24 *70结束返回McCabeMcCabe度量法,又称度量法,又称环路复杂性度量环路复杂性度量,是一种基于,是一种基于程序控制流程序控制流的的复杂性度量方法。复杂性度量方法。它基于一个程序模块的它基于一个程序模块的程序图程序图中中环路的个数环路的个数,因此计算它先要,因此计算它先要画出程序图。画出程序图。程序图程序图是退化的程序流程图。流程图中每个处理都退化成一个结点,是退化的程序流程图。流程图中每个处理都退化成一个结点,流线变成
28、连接不同结点的有向弧。流线变成连接不同结点的有向弧。6.6 6.6 程序复杂性度量程序复杂性度量第6章 程序编码2.McCabe2.McCabe度量法度量法现在学习的是第70页,共75页2023/2/24 *71结束返回程序流程图导出的程序图第6章 程序编码A开始开始BC输入输入DEFGJH输入输入K输出输出L结束结束ABCDEFGJKLH现在学习的是第71页,共75页2023/2/24 *72结束返回程序图仅描述程序内部的控制流程,完全不表现对数据的具体操作,程序图仅描述程序内部的控制流程,完全不表现对数据的具体操作,以及分支和循环的具体条件。以及分支和循环的具体条件。计算环路复杂性的方法计
29、算环路复杂性的方法:在一个有向图:在一个有向图G G中,环路的个数由以下公中,环路的个数由以下公式给出:式给出:V(G)V(G)m mn n2 2其中,其中,V(G)V(G)是有向图是有向图G G中环路个数,中环路个数,m m是图是图G G中弧数,中弧数,n n是图是图G G中结点数。中结点数。如上图:如上图:V(G)=12-11+2=3V(G)=12-11+2=3 也可用也可用 V(G)=P+1 V(G)=P+1或或V V(G G)等于程序图中有界封闭区和无界封闭)等于程序图中有界封闭区和无界封闭区的总个数。区的总个数。其中,其中,P P为判定点个数。为判定点个数。6.6 6.6 程序复杂性
30、度量程序复杂性度量第6章 程序编码现在学习的是第72页,共75页2023/2/24 *73结束返回环路复杂度取决于环路复杂度取决于程序控制结构程序控制结构的复杂度。当程序的分支数的复杂度。当程序的分支数目或循环数目增加时其复杂度也增加。目或循环数目增加时其复杂度也增加。环路复杂度与程序中覆盖的环路复杂度与程序中覆盖的路径条数有关路径条数有关。McCabeMcCabe环路复杂度隐含的前提是:环路复杂度隐含的前提是:错误与程序的判定加上错误与程序的判定加上子程序的调用数目成正比。子程序的调用数目成正比。环路复杂度是可加的。环路复杂度是可加的。McCabeMcCabe建议,建议,对于复杂度超过对于复
31、杂度超过1010的程序,应分成几个小程序,以的程序,应分成几个小程序,以减少程序中的错误。减少程序中的错误。6.6 6.6 程序复杂性度量程序复杂性度量第6章 程序编码现在学习的是第73页,共75页2023/2/24 *74结束返回这种度量的缺点是:这种度量的缺点是:对于不同种类的控制流的复杂性不能区分对于不同种类的控制流的复杂性不能区分简单简单IFIF语句与循环语句的复杂性同等看待语句与循环语句的复杂性同等看待嵌套嵌套IFIF语句与简单语句与简单CASECASE语句的复杂性是一样的语句的复杂性是一样的模块间接口当成一个简单分支一样处理模块间接口当成一个简单分支一样处理一个具有一个具有10001000行的顺序程序与一行语句的复杂性相同行的顺序程序与一行语句的复杂性相同6.6 6.6 程序复杂性度量程序复杂性度量第6章 程序编码现在学习的是第74页,共75页n课后练习n1.综合练习七(P171)n2.补充练习:现在学习的是第75页,共75页