资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,/19,软件编码,1,内容,编码要求,程序设计语言的发展和选择,编码风格,软件效率,编程规范举例,2,一.编码要求,语法正确,源程序结构良好:可读性建立在良好的程序结构和编写风格上。,便于测试和排除故障,易于扩充,3,结构化程序设计方法,在编码中要求坚持以下原则:,(1)使用语言中的顺序、选择、循环等有限的基本控制结构来表示程序逻辑。,(2)选用的控制结构只准许一个入口和一个出口。,(3)由程序语句组成容易识别的块,每块只有一个入口和一个出口。,(4)复杂结构应该用基本控制结构进行组合嵌套来实现。,(5)严格控制,GOTO,语句,仅在下列情形才可使用:用一个非结构化的程序设计语言实现一个结构化的构造;在某种可以改善而不是损害程序可读性的情况下。,要求一定的,编程格式,,如,程序行以锯齿排列,每个模块长度限制在一到两页中,且每行只有一条语句,程序中要加上必要的注释等。,然而并非所有的程序语言都完全适合于结构化程序设计。,4,二.程序设计语言的发展和选择,面向机器,的语言,汇编语言,(第二代),机器语言,(第一代),高级语言,(第三代),基础语言,结构化,语言,面向对象,语言,超高级,语言,第四代,语言,Fortran、Basic、,COBOl,等,历史悠久、应用广泛。,PASCAL、C、,Ada,等,有结构化控制结构,面向过程。,C、JAVA,等面向对象。,把汇编语言翻译成机器语言的程序称为汇编程序,翻译的过程称为汇编。,编译方式,代码事先通过编译器生成机器语言代码,再由操作系统调度执行,如,Delphi,语言、,C+,语言等。,解释方式,该方式并不事先生成目标程序,而是边解释边执行,如,BASIC,语言、脚本语言等。,5,程序设计语言的选择,适宜的程序语言不仅能减少编码的困难,还可以得到更容易阅读和维护的程序。,理论标准,:具有理想的模块化机制、易于阅读和使用的控制结构及数据结构,;,具有完善、独立的编译机制,。,实用标准,:,系统用户的要求,、,工程的规模,、,软件的运行环境,、,可以得到的软件开发工具,、,软件开发人员的知识,、,软件的性能要求,、,软件的应用领域,。,应该对各种要求和标准进行权衡,,,选择一种最适合,的。,常见的程序设计语言(自学),6,采用有实际意义的符号名,有实际意义的名字能帮助理解和记忆。,例如,d=s*t,与,distance=speed*time。,当然,符号的名字也不要过长,过长显然会增加打字量,一般以4-12个字符为宜。最好事先统一约定好。,三.编码风格,不要用过于相似的符号名,过于相似的名字容易引起误解或打字错误。如,ell、,emm,、,enn,、,emmn,、,ennn,等放在一 起很容易混淆;又如,positionx,和,positiony,是仅仅末尾不相同的长标识符,如果编译程序只识别前八个字符就会出现错误,所以是不安全的。,1、,标识符应按意取名,7,符号名中一般不要带有数字,字母,o、l、z、s,和数字0、1、2、5极易混淆,如,no5s,难与,n0ss,区分。,避免用关键字,同一符号名不要有多种含义,如果一个符号在程序的不同段中表示不同的含义,则阅读时易于误解。,尽量照顾数学习惯,已知量用,a、b、c,,未知量用,x、y、z,等,如果它们对换一下就感到别扭和造成不必要的难以理解了。如,和,8,2.程序应加注释,序言性注释,(置于模块的起始部分),说明每个模块的用途、功能。说明模块的接口即调用形式、参数描述及从属模块的清单。,数据描述:指重要数据的名称、用途、限制、约束及其他信息。开发历史:指设计者、审阅者姓名及日期,修改说明及日期。,9,功能性注释(嵌于源程序内部),说明程序段,而不是每一行程序都要加注释。,说明程序段或语句的功能以及数据的状态,而不是程序的翻译。,使用空行或缩进或括号,以便很容易区分注释和程序。,修改程序也应修改注释。,10,序言性注释举例,/*,Title,:,Function average,Purpose,:,To calculate the average value of an array,Sample Call:,aver=average(score,n),Inputs:,scorean array of float data,n the number of the float data,Return,:,the average value of score,Functions Referenced:,no,Author,:,M.WRIGHT 10/30/95,Auditor:,D.Carrie 11/2/95,*/,例如,对求一组实数的平均值的,C,函数的序言性注释的例子。,float average(score,n),int,n;,float score;,int,i;,float aver,sum=score0;,for(i=1;in;i+),sum=sum+scorei;,aver=sum/n;,return(aver);,11,3.数据说明,数据说明顺序应规范,使数据的属性更易于查找。,例如按常量说明、类型说明、全程量说明和局部量说明顺序。,一个语句说明多个变量时,各变量名按字典序排列。,对于复杂的数据结构,要加注释,说明在程序实现时的特点。,12,4.语句构造,简单直接,不能为了追求效率而使代码复杂化。,为了便于阅读和理解,不要一行多个语句。,不同层次的语句采用缩进形式,使程序的逻辑结构和功能特征更加清晰。,要避免复杂的判定条件,避免多重的循环嵌套。,表达式中使用括号以提高运算次序的清晰度。,尽量使用公共过程或子程序去代替重复的功能代码段。,避免使用临时变量而使可读性下降。,13,5.输入和输出,输入操作步骤和输入格式尽量简单。,应检查输入数据的合法性、有效性,报告必要的输入状态信息及错误信息。,输入一批数据时,使用数据或文件结束标志,而不要用计数来控制。,交互式输入时,提供可用的选择和边界值。,当程序设计语言有严格的格式要求时,应保持输入格式的一致性。,输出数据表格化、图形化。,14,四、软件效率,效率指处理机时间和存储空间的使用。,效率是一个性能要求,目标在需求分析给出。,提高程序效率的根本途径在于选择良好的设计方法、良好的数据结构与算法,而不是靠编程时对程序语句做调整。,(效率是设计出来的),但编码风格也能对软件效率产生影响。,追求效率建立在不损害程序可读性或可靠性基础之上,要先使程序正确,再提高程序效率;先使程序清晰,再提高程序效率。,15,(,1,)写程序前先简化算术和逻辑的表达式。,(,2,)仔细研究嵌套的循环,以确定是否有语句可以从内层往外移。,(,3,)尽量避免使用多维数组、指针和复杂的表。,(,4,)尽可能多地采用执行时间短的算术运算。,(,5,)尽量使同一表达式中的数据类型保持统一,尽量避免不同类型数据的比较运算,因为这样有可能导致程序运行出错。,(,6,)尽量使用有良好特性的编译程序,以自动生成高效目标代码。,(,7,)对所有输入,/,输出安排适当的缓冲区,以减少用于通信的额外开销。,(,8,)对变动频繁的数据最好采用动态存储。,(,9,)对二级存储器(如磁盘)应选用最简单的访问方法,并以信息组为单位进行访问。,(,10,)如果“超高效的”输入,/,输出很难被人理解,那么就不应采用这种方法。目的是提高人与计算机间通信的效率。,16,总之,要善于积累编程经验,培养和学习良好的编程风格,使编出的程序清晰易懂,易于测试和维护,从而提高软件的质量。,17,技巧的应用问题,DO 14 I=1,N,DO 14 J=1,N,14 V(I,J)=(I/J)*(J/I),由于,I,和,J,是整型变量,当,IJ,时,(,J/I)=0,,仅当,I=J,时,(,I/J)*(J/I)=1,,所以这个程序使矩阵,V,成为一个单位矩阵。但读者却花了一番论证才终于搞清楚这段程序是干什么用的。若改写成,DO 14 I=1,N,DO 12 J=1,N,12 V(I,J)=0,14 V(I,I)=1,则简单明了。所以程序应当简单、直接地反映意图,不必过于巧妙或深奥。,18,程序设计风格的应用,程序设计风格的细节通常因人而异;,学习良好的编程风格;,一个软件开发集体必须要有自己的编程规范,并要求每一个人严格按规范执行;,华为编程规范,19,
展开阅读全文