第5章-编码

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章编码•程序设计语言•程序设计风格•编码规范•程序效率与性能分析5.1程序设计语言•程序设计语言的性能从软件工程角度对程序设计语言的性能进行讨论。5.1程序设计语言•软件工程的观点(1)详细设计应能直接地容易地翻译成代码程序。(2)源程序应具有可移植性。(3)编译程序应具有较高的效率。(4)尽可能应用代码生成的自动工具。(5)可维护性。5.1程序设计语言•程序设计语言的分类从软件工程的角度,根据程序设计语言发展的历程,可以将程序设计语言大致分为4类。(1)从属于机器的语言——第一代语言(2)汇编语言——第二代语言(3)高级程序设计语言——第三代语言从20世纪50年代就开始出现。典型的高级程序设计语言有ALGOL、FORTRAN、COBOL、C、C++、Lisp、PROLOG、Ada等。5.1程序设计语言•程序设计语言的分类(4)第四代语言(4GL)4GL以数据库管理系统所提供的功能为核心,进一步构造了开发高层软件系统的开发环境,如报表生成系统、多窗口表格设计系统、菜单生成系统等。4GL提供了功能强大的非过程化问题定义手段,用户只需告诉系统做什么,而无须说明怎么做。5.1程序设计语言•程序设计语言的选择在选择编程语言时,可以考虑以下因素。(1)应用领域:目标系统的应用领域不同,需要采取的系统开发范型也不同,所以要考虑支持相应范型的编程语言。(2)系统用户的要求。(3)编程语言自身的功能。(4)编码和维护成本及开发环境。(5)编程人员的技能。(6)软件可移植性。7程序设计语言的选择原则•C语言:适合系统底层实现以及实时应用•FORTRAN:工程领域•COBOL:商业领域•PROLOG和LISP:人工智能领域•程序设计工具–Dephi、VB:适合MIS应用–C、C++:适合信息处理、通信与控制等应用–Java:适合平台无关的应用–JSP、ASP:适合Web应用5.2程序设计风格•在软件生存期中,人们经常要阅读程序。•在编写程序时多花些工夫,讲求程序的风格,这将大量地减少人们读程序的时间。•程序设计风格–源程序文档化–数据说明的方法–语句结构–输入/输出方法5.2程序设计风格•源程序文档化标识符的命名安排注释程序的视觉组织5.2程序设计风格•标识符的命名标识符包括模块名、变量名、常量名、标号名、子程序名以及数据区名、缓冲区名等。名字能够见名知意。5.2程序设计风格•程序的注释注释行的数量占到整个源程序的1/3到1/2。注释分为序言性注释和功能性注释。6/8/202012函数intGetNum(void)/****************************************************************函数名称:GetNum函数功能:产生一个1到MAX_NUMBER之间的随机数,供游戏者猜测。函数参数:无函数返回值:返回产生的随机数****************************************************************/intGetNum(void){intx;printf(Amagicnumberbetween1and%dhasbeenchosen.\n,MAX_NUMBER);x=rand();/*调用标准库函数rand产生一个随机数*/x=x%MAX_NUMBER+1;/*将这个随机数限制在1~MAX_NUMBER之间*/return(x);/*返回这个随机数给调用者*/}5.2程序设计风格•序言性注释有些软件开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出。(1)程序标题。(2)有关本模块功能和目的的说明。(3)主要算法。(4)接口说明:包括调用形式,参数描述,子程序清单。(5)有关数据描述:重要的变量及其用途,约束或限制条件,以及其他有关信息。(6)模块位置:在哪一个源文件中,或隶属于哪一个软件包。(7)开发简历:模块设计者,复审者,复审日期,修改日期、有关说明等。5.2程序设计风格•功能性注释功能性注释嵌在源程序体中,用以描述其后的语句或程序段,也就是解释下面要“做什么”,或是执行了下面的语句会怎么样。下面的注释行仅仅重复了后面的语句,对于理解它的工作并没有什么作用。/*Addamounttototal*/total=amount+total;如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图:/*Addmonthly-salestoannual-total*/total=amount+total;5.2程序设计风格•功能性注释书写功能性注释,要注意以下几点。(1)用于描述一段程序,而不是每一个语句。(2)用缩进和空行,使程序与注释容易区别。(3)注释要正确。5.2程序设计风格•视觉组织—空格、空行和移行空格:恰当地利用空格,可以突出运算的优先性,避免发生运算的错误。例如,将表达式(a<-17)&&!(b<=49)||c写成(a<-17)&&!(b<=49)||c就更清楚。空行:自然的程序段之间可用空行隔开。5.2程序设计风格•视觉组织—空格、空行和移行移行:移行也叫做向右缩格。对于选择语句和循环语句,把其中的程序段语句向右做阶梯式移行,可使程序的逻辑结构更加清晰,层次更加分明。5.2程序设计风格•数据说明标准化(1)数据说明的次序应当规范化,使数据属性容易查找,也有利于测试、排错和维护。①常量说明。②简单变量类型说明。③数组说明。④公用数据块说明。⑤所有的文件说明。5.2程序设计风格•数据说明标准化(2)当多个变量名用一个语句说明时,应当对这些变量按字母顺序排列。例如,将intsize,length,width,cost,price;进行如下改写更好。intcost,length,price,size,width;(3)对于复杂的数据结构,应当使用注释对其进行说明。5.2程序设计风格•语句结构简单化在编码阶段,语句结构要力求简单、直接,不能为了片面追求效率而使语句复杂化。(1)在一行内只写一条语句。例如,下面程序的可读性很差。for(i=1;i=n-1;i++){t=i;for(j=i+1;j=n;j++)if(a[j]a[t])t=j;if(t!=i){temp=a[t];a[t]=a[i];a[i]=temp}}5.2程序设计风格•可以将上面的程序段改写成如下形式:5.2程序设计风格(2)程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写得过于紧凑。例如,有一个用C语句写出的程序段:如果改写成下面的程序段,其功能就能够一目了然了。5.2程序设计风格(3)程序编写得要简单,写清楚,直截了当地说明程序员的用意。例如,下面是是一个有双重循环的程序段,得到的结果是一个N×N的二维数组。如果写成以下的形式,就能让读者直接了解程序编写者的意图了。5.2程序设计风格(4)除非对效率有特殊的要求,程序编写要做到清晰第一,效率第二。(5)避免使用临时变量而使可读性下降。例如,由于简单变量的运算比下标变量的运算要快,有的程序员为了追求效率,会将语句x=a[i]+1/a[i];写成ai=a[i];x=ai+1/ai;这样做,虽然效率要高一些,但引进了临时变量,把一个计算公式拆成了几行,增加了理解的难度。5.2程序设计风格(6)让编译程序做简单的优化。(7)尽可能使用库函数。(8)避免不必要的转移,同时如果能保持程序可读性,则不必用GOTO语句。5.2程序设计风格•例如,有一个求3个数中最小值的程序,对应的流程图及程序如下:5.2程序设计风格(9)尽量只采用3种基本的控制结构来编写程序。(10)避免使用空的else语句和if…thenif…语句。这种结构容易使读者产生误解。例如,下面的程序可能产生二义性问题。5.2程序设计风格(11)避免采用过于复杂的条件测试。(12)尽量减少使用“否定”条件的条件语句。例如,如果在程序中出现if(!(char<'0'||char>'9'))……将其改成下面的语句,含义会更直接。if(char='0'&&char='9')……5.2程序设计风格•输入/输出规范化输入/输出的方式和格式应当尽可能方便用户的使用。5.2程序设计风格•输入/输出的原则(1)对所有的输入数据都进行检验,从而识别错误的输入,以保证每个数据的有效性。(2)检查输入项的各种重要组合的合理性,必要时报告输入状态信息。(3)使得输入的步骤和操作尽可能简单,并保持简单的输入格式。(4)输入数据时,应允许使用自由格式输入。(5)应允许默认值。(6)输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目。5.2程序设计风格•输入/输出的原则(续)(7)在以交互式输入/输出方式进行输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明可使用选择项的种类和取值范围。同时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息。(8)当程序设计语言对输入/输出格式有严格要求时,应保持输入格式与输入语句要求的一致性。(9)给所有的输出加注解,并设计输出报表格式。5.3编码规范•在参考微软、Bell等公司编码规范的基础上,本节以C/C++为示例对编码规范给出简要介绍。•规范涉及版面、注释、标识符命名、变量使用、代码可测性、程序效率、质量保证、代码编译、单元测试、程序版本与维护。1.版面(1)程序块要采用缩进风格编写,缩进的空格数为4个。但对于由开发工具自动生成的代码可以有不一致。(2)相对独立的程序块之间、变量说明之后应加空行。(3)较长的语句(80字符)要分成多行写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。(4)循环、判断等语句中的条件测试若有较长的表达式,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。if(year%4==0&&year%100!=0||year%400==0)1.版面(5)不允许把多个短语句写在一行中,即一行只写一条语句。inta,b,c;a=3;b=4;c=5;改为:inta,b,c;a=3;b=4;c=5;1.版面(6)if、while、for、default、do等语句自占一行。(7)只用空格键,不要使用TAB键。以免用不同的编辑器阅读程序时,因TAB键所设置的空格数目不同而造成程序布局不整齐。(8)函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。1.版面(9)程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体开始、类定义、结构定义、枚举定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。1.版面•例如,下面的程序段不符合规范。•应书写为以下格式:1.版面(10)在两个以上的变量、常量间进行判等操作时,操作符之前、之后或者前后要加空格;进行非判等操作时,如果是关系密切的操作符(如-、::),后面不应加空格。p-data改写为:p-data由于留空格所产生的清晰性是相对的,所以,在已非常清晰的语句中没有必要再留空格,如括号内侧(左括号后面和右括号前面)不要加空格,多重括号间不必加空格。if((year%4==0&&year%100!=0)||year%400==0)2.注释•注释的原则是有助于对程序的阅读理解。(1)一般情况下,注释量一般控制在20%到50%之间。(2)说明性文件(如头文件.h文件、.inc文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本、生成日期、作者、内容、功能、与其他文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。(3)源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。2.注释(4)函数头部应进行注释,列出:函数的目的/功能、输入参

1 / 71
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功