您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 第七课程序编码(实现阶段)
目的:把详细设计转换成计算机语言实现的程序代码。内容:1.程序设计语言的选择。2.程序设计风格及语言,编码风格对软件质量的影响。1.程序设计语言的选择2.程序设计风格3.程序效率4.程序复杂性定性度量做为软件工程过程的一个阶段,程序编码是设计的继续。程序设计语言的特性和程序设计风格会深刻地影响软件的质量和可维护性。为了保证程序编码的质量,程序员必须深刻理解、熟练掌握并正确地运用程序设计语言的特性。此外,还要求源程序具有良好的结构性和良好的程序设计风格。1.程序设计语言的选择1〉分类(1)机器语言(2)汇编语言(3)高级语言(4)第四代语言4GL高级语言:I.经典的高级语言II.通用结构化的程序设计语言(PL/1,PASCAL,C,Ada,etc)II.通用结构化的程序设计语言A)PL/1(ProgramLanguageOne)(Fortran+Cobol)由IBM公司及SHARE,60年代中后期,(PL/S—系统设计,PL/M—微机处理系统,PL/C—程序设计教学)PL/1的子集。B)PASCAL,Wirth,1970推出。C)C语言,Bell实验室开发(为了写Unix)灵活,支持复杂的数据结构,大量应用指针,丰富的运算符和操作符,类似汇编,C—〉TurboC—〉C++—〉VC++D)ADA,DOD,1974开发,为嵌入式实时系统开发。III.专用语言(APL,FORTH,LISP,PROLOG,JAVAetc)APL:数组和向量运算,几乎没有结构化控制结构和数据。FORTH:为开发PC机系统软件设计的语言,特点:堆栈方式编辑。LISP:人工智能。PROLOG:专家系统。JAVA,1991,SUN公司,JamesGosling,面向对象的,类C++的,提供基于TCP/IP协议的网络环境下交互式和实时程序。JAVA推动了Internet上基于Web服务的应用发展。第四代语言4GL=FourthGenerationLanguage超高级语言Natural,Focus,Nomadetc一条语句=30-50条机器代码指令缺点:编译器过大,速度慢,解释器过大。优点:“非过程”的语言foreverySTUDENTifSCOREisEXCELLENTdoPROMOTION2选择:(1)用户要求(2)运行环境(3)工程规模(4)应用范围(5)程序员经验知识(6)可移植性好(7)软件辅助工具(8)费用2.程序设计风格=良好的编程习惯程序实际上也是一种供人阅读的文章,有一个文章的风格问题。应该使程序具有良好的风格。源程序文档化数据说明语句结构输入/输出(I/O)方法源程序文档化一.标识符的命名二.安排注释三.程序的视觉组织一.符号名的命名符号名即标识符,包括模块名、变量名、常量名、标号名、子程序名、、数据区名以及缓冲区名等。这些名字应能反映它所代表的实际东西,应有一定实际意义。例如,表示次数的量用Times,表示总量的用Total,表示平均值的用Average,表示和的量用Sum等。名字不是越长越好,应当选择精炼的意义明确的名字。必要时可使用缩写名字,但这时要注意缩写规则要一致,并且要给每一个名字加注释。同时,在一个程序中,一个变量只应用于一种用途。NEW.BALANCE.ACCOUNTS.PAYABLENBALAPN总之:标识符命名应意义明确,清晰,可理解性高,一致性的命名例:D=S*T=Velocity*TimeDistance=Speed*Time匈牙利命名规则:CharlesSimonyi,1972提出,MicrosoftWindows开发中引入,Apple,3COM等公司均采用。1.变量名构成ArnoldSchwarzenegger变量名=〈类型(type)〉〈限定词(Qualifier3)〉类型—为每一个变量确定类型,一般用“小写字母”。限定词—“第一个字母大写”,若还有其他类型,则该类型第一个字母大写。类型与限定词之间没有分隔符。例:handleWindows,handle—类型,Windows限定词2.类型基类型(Class)类型构成的类型加前缀构成的类型加后缀构成—子类型类型:由在数据上执行的操作决定,如文件窗口内部注释,程序的视觉组织。(1)基类型:2-3字符长,有约定记号。例:f—标志(flag),取值fTrue和fFalseCh—单个字符,SZ—以零结束的字符(2)前缀p—指针,pch—指向字符的指针类型i—数组索引,如iabc—元素类型为abc的数组的索引c—计数,cch—字符计数类型d—偏移,dx,若x是坐标类型,则dx表示距离(3)后缀—子类型:基类型后加一个或两个小写英文字母,Xi(inch),Xp(pixel)限定词中有其它类型,应将“其他类型”第一个字母大写。如:1.chPtrTmp(chPTRTMP)ch—字符,Ptr—指针,Tmp临时变量2.对于布尔变量,限定词应描述为真,如f—布尔变量fOpen/fOPEN二.程序的注释夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。注释决不是可有可无的。一些正规的程序文本中,注释行的数量占到整个源程序的1/3到1/2,甚至更多。注释分为序言性注释和功能性注释。序言性注释通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序本身具有引导作用。有些软件开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出。有关项目包括:程序标题;有关本模块功能和目的的说明;主要算法;接口说明:包括调用形式,参数描述,子程序清单;有关数据描述:重要的变量及其用途,约束或限制条件,以及其它有关信息;模块位置:在哪一个源文件中,或隶属于哪一个软件包;开发简历:模块设计者,复审者,复审日期,修改日期及有关说明等。功能性注释功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样。而不要解释下面怎么做。例如,/*ADDAMOUNTTOTOTAL*/TOTAL=AMOUNT+TOTAL不好。如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图:/*ADDMONTHLY-SALESTOANNUAL-TOTAL*/TOTAL=AMOUNT+TOTAL要点描述一段程序,而不是每一个语句;用缩进和空行,使程序与注释容易区别;注释要正确。视觉组织空格、空行和移行恰当地利用空格,可以突出运算的优先性,避免发生运算的错误。例如,将表达式(A<-17)ANDNOT(B<=49)ORC写成(A<-17)ANDNOT(B<=49)ORC自然的程序段之间可用空行隔开;移行也叫做向右缩格。它是指程序中的各行不必都在左端对齐,都从第一格起排列。这样做使程序完全分不清层次关系。对于选择语句和循环语句,把其中的程序段语句向右做阶梯式移行。使程序的逻辑结构更加清晰。例如,两重选择结构嵌套,写成下面的移行形式,层次就清楚得多。IF(…)THENIF(…)THEN……ELSE……ENDIF……ELSE……ENDIF数据说明在设计阶段已经确定了数据结构的组织及其复杂性。在编写程序时,则需要注意数据说明的风格。为了使程序中数据说明更易于理解和维护,必须注意以下几点。1.数据说明的次序应当规范化2.说明语句中变量安排有序化3.使用注释说明复杂数据结构数据说明的次序应当规范化数据说明次序规范化,使数据属性容易查找,也有利于测试,排错和维护。原则上,数据说明的次序与语法无关,其次序是任意的。但出于阅读、理解和维护的需要,最好使其规范化,使说明的先后次序固定。例如,在FORTRAN程序中数据说明次序①常量说明②简单变量类型说明③数组说明④公用数据块说明⑤所有的文件说明在类型说明中还可进一步要求。例如,可按如下顺序排列:①整型量说明②实型量说明③字符量说明④逻辑量说明说明语句中变量安排有序化当多个变量名在一个说明语句中说明时,应当对这些变量按字母的顺序排列。带标号的全程数据(如FORTRAN的公用块)也应当按字母的顺序排列。例如,把integersize,length,width,cost,price写成integercost,length,price,size,width使用注释说明复杂数据结构如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时这个数据结构的固有特点。例如,对PL/1的链表结构和Pascal中用户自定义的数据类型,都应当在注释中做必要的补充说明。语句结构在设计阶段确定了软件的逻辑流结构,但构造单个语句则是编码阶段的任务。语句构造力求简单,直接,不能为了片面追求效率而使语句复杂化。1.在一行内只写一条语句在一行内只写一条语句,并且采取适当的移行格式,使程序的逻辑和功能变得更加明确。许多程序设计语言允许在一行内写多个语句。但这种方式会使程序可读性变差。因而不可取。例如,有一段排序程序FORI:=1TON-1DOBEGINT:=I;FORJ:=I+1TONDOIFA[J]<A[T]THENT:=J;IFT≠ITHENBEGINWORK:=A[T];A[T]:=A[I];A[I]:=WORK;ENDEND;由于一行中包括了多个语句,掩盖了程序的循环结构和条件结构,使其可读性变得很差。FORI:=1TON-1DO//改进布局BEGINT:=I;FORJ:=I+1TONDOIFA[J]<A[T]THENT:=J;IFT≠ITHENBEGINWORK:=A[T];A[T]:=A[I];A[I]:=WORK;ENDEND;2.程序编写首先应当考虑清晰性程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写得过于紧凑。例如,有一个用C语句写出的程序段:A[I]=A[I]+A[T];A[T]=A[I]-A[T];A[I]=A[I]-A[T];此段程序可能不易看懂,有时还需用实际数据试验一下。实际上,这段程序的功能就是交换A[I]和A[T]中的内容。目的是为了节省一个工作单元。如果改一下:WORK=A[T];A[T]=A[I];A[I]=WORK;就能让读者一目了然了。3.程序要能直截了当地说明程序员的用意。程序编写得要简单,写清楚,直截了当地说明程序员的用意。例如,for(i=1;i=n;i++)for(j=1;j=n;j++)V[i][j]=(i/j)*(j/i)除法运算(/)在除数和被除数都是整型量时,其结果只取整数部分,而得到整型量。当i<j时,i/j=0当j<i时,j/i=0得到的数组当i≠j时V[i][j]=(i/j)*(j/i)=0当i=j时V[i][j]=(i/j)*(j/i)=1这样得到的结果V是一个单位矩阵。写成以下的形式,就能让读者直接了解程序编写者的意图。for(i=1;i=n;i++)for(j=1;j=n;j++)if(i==j)V[i][j]=1.0;ELSEV[i][j]=0.0;4.除非对效率有特殊的要求,程序编写要做到清晰第一,效率第二。不要为了追求效率而丧失了清晰性。事实上,程序效率的提高主要应通过选择高效的算法来实现。5.首先要保证程序正确,然后才要求提高速度。反过来说,在使程序高速运行时,首先要保证它是正确的。6.避免使用临时变量而使可读性下降。例如,有的程序员为了追求效率,往往喜欢把表达式A[I]+1/A[I];写成AI=A[I];X=AI+1/AI;这样将一句分成两句写,会产生意想不到的问题。7.让编译程序做简单的优化。8.尽可能使用库函数9.避免不必要的转移。同时如果能保持程序可读性,则不必用GOTO语句。例如,有一个求三个数中最小值的程序:IF(X<Y)GOTO30IF(Y<Z)GOTO50SMALL=ZGOTO7030IF(X<Z)GOTO60SMALL=ZGOTO7050SMALL=YGOTO7060SMALL=X70CONTINUE程序只需编写成:small=x;if(ysmall)small=y;if(zsmall)small=z;所以程序应当简单,不必过于深奥,避免使用GOTO语句绕来绕去。10.尽量只采用三种基本的控制结构来编写程
本文标题:第七课程序编码(实现阶段)
链接地址:https://www.777doc.com/doc-2119325 .html