




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、授课教师:授课教师: 蓝蓝 天天联系电话:联系电话: 1348892972313488929723电子邮箱:电子邮箱:程序设计语言的特点程序设计语言的特点1程序的效率程序的效率 3良好的编程习惯良好的编程习惯2小结小结4培养良好的培养良好的编程习惯编程习惯理解编程规理解编程规范范了解选择程了解选择程序设计语言序设计语言的一般原则的一般原则 程序编码就好比建筑程序编码就好比建筑工程中最基础的砌砖工程中最基础的砌砖和泥工作一样是工程和泥工作一样是工程的基础的基础, ,是设计的具体是设计的具体实施。实施。引言引言不同不同 瓷砖特点瓷砖特点,砌砖风格砌砖风格,砌墙的手艺砌墙的手艺,砌墙的规范砌墙的规范
2、 程序语言特点程序语言特点,编程风格编程风格,编程基本功编程基本功,编程规范编程规范手艺太差了手艺太差了,还不规范还不规范手艺不错,规范手艺不错,规范屋里的墙屋里的墙砖的应用不合适砖的应用不合适 程序设计语言是:人与计算机通信的最基本工具程序设计语言是:人与计算机通信的最基本工具。 程序设计语言的特性不可避免地会影响开发人员程序设计语言的特性不可避免地会影响开发人员的思路和解决问题的方式,会影响代码的可理解的思路和解决问题的方式,会影响代码的可理解性和可维护性。性和可维护性。 编码之前的一项重要工作就是选择一种适当的编编码之前的一项重要工作就是选择一种适当的编程语言。程语言。 COBOLCOB
3、OL语言:数据处理程序语言:数据处理程序 PHPPHP语言:专门用来编写网页处理程序语言:专门用来编写网页处理程序 PerlPerl语言:更适合文本处理语言:更适合文本处理 C C语言:被广泛用于系统软件开发语言:被广泛用于系统软件开发 JAVAJAVA语言:用于跨平台的应用软件开发等等。语言:用于跨平台的应用软件开发等等。 一旦确定了软件需求之后,待选用的一旦确定了软件需求之后,待选用的程序设计语言的技术特性就显得非常程序设计语言的技术特性就显得非常重要了。重要了。o 如果需要复杂的数据结构,就要仔细衡量有哪些语言如果需要复杂的数据结构,就要仔细衡量有哪些语言能提供这些复杂的数据结构描述。能
4、提供这些复杂的数据结构描述。o 如果软件要求高性能及实时处理能力,就该选用适合如果软件要求高性能及实时处理能力,就该选用适合于实时处理的语言,如于实时处理的语言,如C C或汇编语言。或汇编语言。o 如果应用有许多输出报告或繁杂的文件处理,则选用如果应用有许多输出报告或繁杂的文件处理,则选用PowerBuilderPowerBuilder、DelphiDelphi或或SQLSQL比较合适。比较合适。 所有程序语言的基本成分都可归纳为所有程序语言的基本成分都可归纳为4 4种:种:o 数据成分:指明该语言能接受的数据,如各种类型的变量、数组数据成分:指明该语言能接受的数据,如各种类型的变量、数组、指
5、针、记录等。作为程序操作的对象,具有名称、类型和作用、指针、记录等。作为程序操作的对象,具有名称、类型和作用域等特征。使用前要对这些特征加以说明,数据名称由用户通过域等特征。使用前要对这些特征加以说明,数据名称由用户通过标识符命名,类型是说明数据需占用多少存储单元和存放形式,标识符命名,类型是说明数据需占用多少存储单元和存放形式,作用域说明数据可被使用的范围。作用域说明数据可被使用的范围。o 运算成分:指明该语言可执行的运算,如运算成分:指明该语言可执行的运算,如+ +,- -,* *、/ /o 控制成分:顺序结构、条件选择结构和循环结构控制成分:顺序结构、条件选择结构和循环结构 o 传输成分
6、:数据的传输方法,例如输入、输出函数传输成分:数据的传输方法,例如输入、输出函数1.1. 名字声明名字声明2.2. 类型声明类型声明3.3. 初始化初始化4.4. 程序变量的局部性程序变量的局部性5.5. 程序模块的独立性程序模块的独立性6.6. 循环结构循环结构7.7. 分支结构分支结构8.8. 异常处理异常处理9.9. 独立编译独立编译10.10. 预先说明程序中所使用的变量名字预先说明程序中所使用的变量名字,编译程序能,编译程序能够检查程序中出现的名字的合法性,从而帮助程够检查程序中出现的名字的合法性,从而帮助程序员发现和改正程序中的错误。序员发现和改正程序中的错误。 但是,有些语言不要
7、求显式地声明程序中所使用但是,有些语言不要求显式地声明程序中所使用的变量名称,它把变量第一次出现时使用的名字的变量名称,它把变量第一次出现时使用的名字看做对这个变量的声明。这样做可能会引入一些看做对这个变量的声明。这样做可能会引入一些很难发现的错误,并且可能会产生严重后果。很难发现的错误,并且可能会产生严重后果。 变量的类型声明变量的类型声明确定一个变量的使用方式,有了类型声明确定一个变量的使用方式,有了类型声明,编译程序就能够很容易地发现程序中某个特定类型的变,编译程序就能够很容易地发现程序中某个特定类型的变量使用不当的错误。有些语言不要求显式的类型声明,例量使用不当的错误。有些语言不要求显
8、式的类型声明,例如如FORTRANFORTRAN语言规定,名字的第一个字母决定它的类型,语言规定,名字的第一个字母决定它的类型,但是一旦显式地声明了一个变量的类型,则以显式声明为但是一旦显式地声明了一个变量的类型,则以显式声明为该变量的类型。这很容易造成阅读时的混淆。该变量的类型。这很容易造成阅读时的混淆。 现代的大多数高级语言都有现代的大多数高级语言都有自定义类型自定义类型,即允许开发人员,即允许开发人员定义与特定应用相关的类型,并且可以用自定义类型嵌套定义与特定应用相关的类型,并且可以用自定义类型嵌套定义新的类型。例如,可以定义记录、链表、二叉树等复定义新的类型。例如,可以定义记录、链表、
9、二叉树等复杂的结构类型。杂的结构类型。 程序设计语言中的类型说明不仅仅是一种安全措施,还是程序设计语言中的类型说明不仅仅是一种安全措施,还是一种重要的一种重要的抽象机制抽象机制。 程序设计中最常见的错误之一就是在使用变量之程序设计中最常见的错误之一就是在使用变量之前没有对变量进行初始化。为了减少发生错误的前没有对变量进行初始化。为了减少发生错误的可能性,应该强迫程序员可能性,应该强迫程序员对程序中所使用的变量对程序中所使用的变量进行初始化进行初始化。 另一个办法是在说明变量时由系统给变量赋予一另一个办法是在说明变量时由系统给变量赋予一个特殊的标识,表明它尚未初始化,以后如果没个特殊的标识,表明
10、它尚未初始化,以后如果没给这个变量赋值就企图使用它,系统会发出报警给这个变量赋值就企图使用它,系统会发出报警信号。信号。 程序设计的一般原则是变量的名字应程序设计的一般原则是变量的名字应该该在靠近使用它的地方引入在靠近使用它的地方引入,并且应,并且应该只有程序中真正需要它的那些部分该只有程序中真正需要它的那些部分才能够访问它。才能够访问它。o 通常有两种提供局部变量的途径:单层局部性和多层通常有两种提供局部变量的途径:单层局部性和多层局部性局部性 。PROGRAM TESTPROGRAM TESTPROCEDURE APROCEDURE A()()VAR VAR ARRAY A20ARRAY
11、A20,B20B20:INTEGERINTEGER;WORKWORK,I I,J J:INTEGERINTEGER;BEGINBEGINENDEND;PROCEDURE BPROCEDURE B()()VAR VAR ARRAY A20ARRAY A20,B20B20:INTEGERINTEGER;WORKWORK,I I,J J:INTEGERINTEGER;BEGINBEGINENDEND;END.END.程序中过程程序中过程A和和B内的变量内的变量是单层局部性的,两个过是单层局部性的,两个过程中声明的变量的作用范程中声明的变量的作用范围局限于所在的过程。围局限于所在的过程。 PROGRA
12、M TESTPROGRAM TESTPROCEDURE APROCEDURE A()()VAR VAR ARRAY A20ARRAY A20,B20B20:INTEGERINTEGER;WORKWORK,I I,J J,K K:INTEGERINTEGER;PROCEDURE BPROCEDURE B()() VAR VAR ARRAY A20ARRAY A20,B20B20:INTEGERINTEGER;WORKWORK,I I,J J:INTEGERINTEGER;BEGINBEGINENDEND;BEGINBEGIN ENDEND; 程序的结构是多层的,模块程序的结构是多层的,模块A中声
13、明的变中声明的变量与模块量与模块B中声明的变量除了变量中声明的变量除了变量K之外全之外全部相同。内层模块部相同。内层模块B中有意义的变量是属于中有意义的变量是属于该模块的该模块的A,B,WORK,I,J和属于外和属于外层模块的变量层模块的变量K。 要尽量避免内层模块与外层模块定义相同要尽量避免内层模块与外层模块定义相同的变量名,容易引起差错,给维护人员理解的变量名,容易引起差错,给维护人员理解代码带来很多困难代码带来很多困难 结构化语言提供了控制局部变量可见性的某些手段,主要结构化语言提供了控制局部变量可见性的某些手段,主要是在是在较内层程序模块中定义的变量不能被较外层的程序块较内层程序模块中
14、定义的变量不能被较外层的程序块访问访问。 由于动态存储分配的缘故,在两次调用一个程序块的间隔由于动态存储分配的缘故,在两次调用一个程序块的间隔中不能够保存局部变量的值。因此,即使只有一两个子程中不能够保存局部变量的值。因此,即使只有一两个子程序使用的变量,如果需要在两次调用这些子程序的过程中序使用的变量,如果需要在两次调用这些子程序的过程中保存这个变量的值,也必须把这个变量说明成全局的,这保存这个变量的值,也必须把这个变量说明成全局的,这将增加维护时发生差错的可能性。因此现在大多数语言提将增加维护时发生差错的可能性。因此现在大多数语言提供了供了静态变量静态变量,这种变量可以保存前次调用时的数据
15、,解,这种变量可以保存前次调用时的数据,解决了多次调用一个模块时局部变量不能保存的问题。决了多次调用一个模块时局部变量不能保存的问题。 最常见的循环结构有最常见的循环结构有forfor语句、语句、while-dowhile-do语句和语句和repeat-untilrepeat-until语句,这些语言都是在循环体外判断循环条件。语句,这些语言都是在循环体外判断循环条件。 有许多场合需要在循环体内的任意一点测试循环结束条件有许多场合需要在循环体内的任意一点测试循环结束条件,如果使用,如果使用if-then-elseif-then-else语句和附加的布尔变量实现这个要语句和附加的布尔变量实现这个
16、要求,则将增加程序长度并且降低程序的可读性。求,则将增加程序长度并且降低程序的可读性。 某些程序设计语言考虑到上述要求,适当地解决了这个问某些程序设计语言考虑到上述要求,适当地解决了这个问题。题。 exitexit(标识符)(标识符)whenwhen(条件)(条件) 这个语句把控制转移到这个语句把控制转移到循环语句后面的一条语句或转移到由标识符指定的语句上循环语句后面的一条语句或转移到由标识符指定的语句上 。 简单的分支语句一般不会出现问题,简单的分支语句一般不会出现问题,但是多分支的但是多分支的casecase型语句注意以下型语句注意以下2 2个个问题:问题:o 如果如果casecase表达
17、式取的值不在预先指定的范围内,需要表达式取的值不在预先指定的范围内,需要用用缺省方式缺省方式处理。处理。o 在某些程序设计语言中,由在某些程序设计语言中,由casecase表达式选定的执行语表达式选定的执行语句取决于所有可能执行的句取决于所有可能执行的语句排列顺序语句排列顺序,如果语句顺,如果语句顺序排列错了,编译和运行时系统是不会发现这类错误序排列错了,编译和运行时系统是不会发现这类错误的。的。 程序运行过程中发生的错误或意外事件称为异常程序运行过程中发生的错误或意外事件称为异常。 以前大多数程序设计语言在检测和处理异常方面以前大多数程序设计语言在检测和处理异常方面几乎没有给程序员提供任何帮
18、助,程序员只能使几乎没有给程序员提供任何帮助,程序员只能使用条件控制检测异常,在发生异常时把控制转移用条件控制检测异常,在发生异常时把控制转移到处理异常的程序段。但是,到处理异常的程序段。但是,JAVAJAVA等一些语言提等一些语言提供了供了异常处理机制异常处理机制,程序员可以很容易地利用语,程序员可以很容易地利用语言提供的异常处理机制实现错误和异常的处理操言提供的异常处理机制实现错误和异常的处理操作。作。 独立编译意味着能够独立编译意味着能够分别编译各个程序单元分别编译各个程序单元,然,然后再把它们集成为一个完整的程序。后再把它们集成为一个完整的程序。 一个大程序通常由许多程序单元组成,如果
19、修改一个大程序通常由许多程序单元组成,如果修改了其中任何一个程序单元都需要重新编译整个程了其中任何一个程序单元都需要重新编译整个程序,将大大增加程序开发、调试和维护的成本;序,将大大增加程序开发、调试和维护的成本; 反之,如果可以独立编译,则只需要重新编译修反之,如果可以独立编译,则只需要重新编译修改了的程序单元,然后重新连接整个程序即可。改了的程序单元,然后重新连接整个程序即可。独立编译的机制对于开发大型系统极其重要独立编译的机制对于开发大型系统极其重要。 某些语言带有一些特别的功能,这些功能可实现某些语言带有一些特别的功能,这些功能可实现一些特殊的设计。如一些特殊的设计。如MODULAMO
20、DULA语言和并发语言和并发PASCALPASCAL语言支持并发处理、以及必须彼此通信和协调的语言支持并发处理、以及必须彼此通信和协调的分布式进程。因此适应并发的和分布式处理的要分布式进程。因此适应并发的和分布式处理的要求。求。详细设计能够直接地翻译成程序代码。详细设计能够直接地翻译成程序代码。源程序的可移植性。改善软件可移植性的主要途径是使语言标准化。源程序的可移植性。改善软件可移植性的主要途径是使语言标准化。对于可移植性要求的软件,应该严格遵守相应的标准编写程序代码,对于可移植性要求的软件,应该严格遵守相应的标准编写程序代码,不要图一时的省事去使用语言的非标准特性。不要图一时的省事去使用语
21、言的非标准特性。编译程序效率较高。编译程序首先应该支持独立编译,并且能够发现编译程序效率较高。编译程序首先应该支持独立编译,并且能够发现尽可能多的程序代码错误,辅助程序员提高程序调试效率。尽可能多的程序代码错误,辅助程序员提高程序调试效率。尽可能应用代码生成工具。许多语言都有与它相应的编译程序、连接尽可能应用代码生成工具。许多语言都有与它相应的编译程序、连接程序、调试程序、代码格式化程序、交叉编译程序、宏处理程序和标程序、调试程序、代码格式化程序、交叉编译程序、宏处理程序和标准子程序库等。对于提高效率是明智的选择。准子程序库等。对于提高效率是明智的选择。可维护性。可维护性的前提是代码的可理解性
22、,源程序的可读性、语可维护性。可维护性的前提是代码的可理解性,源程序的可读性、语言的文档化特性是影响可维护性的重要因素。言的文档化特性是影响可维护性的重要因素。 按语言级别分类,有低级语言和高级语言之分按语言级别分类,有低级语言和高级语言之分 按照用户要求,有过程式语言和非过程式语言之分按照用户要求,有过程式语言和非过程式语言之分 按照应用范围,有通用语言和专用语言之分按照应用范围,有通用语言和专用语言之分 按照使用方式,有交互式语言和非交互式语言之分按照使用方式,有交互式语言和非交互式语言之分 按照成分性质,有顺序语言、并发语言和分布式语言之分按照成分性质,有顺序语言、并发语言和分布式语言之
23、分 第四代语言,有数据库查询语言第四代语言,有数据库查询语言DEV2000DEV2000、程序代码生成、程序代码生成器以及其他一些原型语言、形式化规格说明语言等等。器以及其他一些原型语言、形式化规格说明语言等等。 在选择与评价语言时,首先要从应用要求入手,在选择与评价语言时,首先要从应用要求入手,对比各项要求的相对重要性,然后再根据这些要对比各项要求的相对重要性,然后再根据这些要求和相对重要性来选择合适的编程语言。求和相对重要性来选择合适的编程语言。 具体选择的考虑:具体选择的考虑:o 编程人员的水平和编程经历编程人员的水平和编程经历o 待开发软件的类型待开发软件的类型o 算法和计算复杂性算法
24、和计算复杂性o 数据结构的复杂性数据结构的复杂性o 软件的开发成本和时间要求软件的开发成本和时间要求o 软件的可移植性要求软件的可移植性要求o 可用的软件工具可用的软件工具 编程人员的水平和编程经历。虽然程序员编程人员的水平和编程经历。虽然程序员学习一门新的语言并不困难,但是要学习一门新的语言并不困难,但是要熟练熟练地掌握和精通一门语言是需要长期的实践地掌握和精通一门语言是需要长期的实践开发积累的开发积累的。因此,在选择语言时一定要。因此,在选择语言时一定要考虑到时间限制和程序员掌握语言的程度考虑到时间限制和程序员掌握语言的程度,尽可能选择一种程序员熟悉的语言。,尽可能选择一种程序员熟悉的语言
25、。 待开发软件的类型可能不同,一般分为数据库应待开发软件的类型可能不同,一般分为数据库应用软件、实时控制软件、系统级软件、人工智能用软件、实时控制软件、系统级软件、人工智能类软件、军用软件等等。根据软件的类型选择合类软件、军用软件等等。根据软件的类型选择合适的开发语言,例如,适的开发语言,例如,FORTRANFORTRAN语言适合科学计语言适合科学计算,算,PowerBuilderPowerBuilder、DelphiDelphi、C#C#等语言适合于信等语言适合于信息系统的开发,息系统的开发,LISPLISP、PROLOGPROLOG语言适合于人工语言适合于人工智能领域。智能领域。 算法和计
26、算复杂性。待开发软件算法的复杂性不算法和计算复杂性。待开发软件算法的复杂性不同,应该选择合适的语言,例如,科学计算领域同,应该选择合适的语言,例如,科学计算领域大都选择大都选择FORTRANFORTRAN,因为它的运行性能比较好,因为它的运行性能比较好,但是当今计算机硬件的发展使得运算速度已不再但是当今计算机硬件的发展使得运算速度已不再成为瓶颈,因此许多计算型软件普遍采用成为瓶颈,因此许多计算型软件普遍采用C/CC/C语言。然而计算复杂度很高的软件采用汇编语语言。然而计算复杂度很高的软件采用汇编语言、人工智能类的语言肯定是不合适的,前者编言、人工智能类的语言肯定是不合适的,前者编写代码的工作复
27、杂度太高,后者的运行效率太低写代码的工作复杂度太高,后者的运行效率太低,并且这两类语言的科学计算库都很少,可复用,并且这两类语言的科学计算库都很少,可复用的软件元素较少。的软件元素较少。 数据结构的复杂性。有些语言,例如数据结构的复杂性。有些语言,例如FORTRANFORTRAN、BASICBASIC语言,定义数据类型的能力非常差,一旦语言,定义数据类型的能力非常差,一旦设计中有比较复杂的数据结构,程序员实现时会设计中有比较复杂的数据结构,程序员实现时会感到很棘手。而感到很棘手。而PASCALPASCAL、JAVAJAVA之类的语言其数据之类的语言其数据结构描述能力非常强大,为程序员创造了一个
28、很结构描述能力非常强大,为程序员创造了一个很广阔的编程空间。广阔的编程空间。 考虑软件的开发成本和时间要求。不仅要考虑当考虑软件的开发成本和时间要求。不仅要考虑当前的开发成本,还要考虑今后的维护成本,如果前的开发成本,还要考虑今后的维护成本,如果选择的语言很生僻,即使现在以很快的速度开发选择的语言很生僻,即使现在以很快的速度开发出来,将来的维护工作量不得不考虑。出来,将来的维护工作量不得不考虑。 软件的可移植性要求。如果目标系统的运行环境软件的可移植性要求。如果目标系统的运行环境不能确定,例如,可能运行在小型机的不能确定,例如,可能运行在小型机的UNIXUNIX操作操作系统上,也可能运行在大型
29、机的系统上,也可能运行在大型机的OS/400OS/400操作系统操作系统上,甚至还要运行在上,甚至还要运行在PCPC机的机的WindowsWindows操作系统环操作系统环境中,这时选择的开发语言最好是境中,这时选择的开发语言最好是JAVAJAVA。这样可。这样可以保证软件的跨平台运行。以保证软件的跨平台运行。 选择语言时,特别是为大型软件选择语言时,一选择语言时,特别是为大型软件选择语言时,一定要考虑可用的软件工具。如果某种语言有支持定要考虑可用的软件工具。如果某种语言有支持开发的工具,则开发和调试都会容易。开发的工具,则开发和调试都会容易。 程序员编写的代码除了交给计算机运行外,还必程序员
30、编写的代码除了交给计算机运行外,还必须让其他程序员或设计人员能够看懂。如果程序须让其他程序员或设计人员能够看懂。如果程序代码的可读性好,则调试和维护的成本就可以大代码的可读性好,则调试和维护的成本就可以大幅度降低,同时可以减小程序运行期间软件失效幅度降低,同时可以减小程序运行期间软件失效的可能性,提高程序的可靠性。的可能性,提高程序的可靠性。 对于代码编写而言,要求程序具有良好的结构和对于代码编写而言,要求程序具有良好的结构和风格。风格。 尽量使用语言提供的基本控制结构,即顺序结构尽量使用语言提供的基本控制结构,即顺序结构、选择结构和重复结构。、选择结构和重复结构。 利用块机制将程序组织成容易
31、识别的块,每块只利用块机制将程序组织成容易识别的块,每块只有一个入口和一个出口。有一个入口和一个出口。 复杂结构应该用基本控制结构组合或嵌套实现。复杂结构应该用基本控制结构组合或嵌套实现。 对于语言中没有的控制结构,可用一段等价的程对于语言中没有的控制结构,可用一段等价的程序段模拟,但要求该程序段在整个系统中应前后序段模拟,但要求该程序段在整个系统中应前后一致一致 严格控制严格控制GOTOGOTO语句。语句。在详细设计和编码阶段,还应当采取自顶向下、逐步求精的方法,把在详细设计和编码阶段,还应当采取自顶向下、逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,进而翻译成一一个模块
32、的功能逐步分解,细化为一系列具体的步骤,进而翻译成一系列用某种程序设计语言写成的程序。系列用某种程序设计语言写成的程序。 例例 用筛选法求用筛选法求100100以内的素数。具体做法就是从以内的素数。具体做法就是从2 2到到100100中去掉中去掉2 2,3 3, ,9 9,1010的倍数,剩下的就是的倍数,剩下的就是100100以内的素数。以内的素数。为了解决这个问题,可先按程序功能写出一个框架。为了解决这个问题,可先按程序功能写出一个框架。main( )main( ) 建立建立2 2到到100100的数组的数组A A ,其中,其中AAi i= = i i; -1-1 建立建立2 2到到101
33、0的素数表的素数表B B ,存放,存放2 2到到1010以内素数;以内素数; -2-2 若若AAi i = = i i是是B B 中任意一个数的倍数,则剔除中任意一个数的倍数,则剔除AAi i ; -3-3 输出输出A A 中所有没有被剔除的数;中所有没有被剔除的数; -4-4 1 1)基本要求)基本要求2 2)可读性要求)可读性要求3 3)正确性与容错性要求)正确性与容错性要求4 4)可移植性要求)可移植性要求5 5)输入和输出要求)输入和输出要求6 6)重用性要求)重用性要求7 7)面向对象的程序设计风格)面向对象的程序设计风格 程序结构清晰且简单易懂,单个函数的行数一般程序结构清晰且简单
34、易懂,单个函数的行数一般不要超过不要超过 100100行。行。 算法设计应该简单,代码要精简,避免出现垃圾算法设计应该简单,代码要精简,避免出现垃圾程序。程序。 尽量使用标准库函数(类方法)和公共函数(类尽量使用标准库函数(类方法)和公共函数(类方法)。方法)。 最好使用括号以避免二义性。最好使用括号以避免二义性。 程序头程序头, ,函数头说明函数头说明: :程序标题程序标题, ,该模块功能说明该模块功能说明, ,主主要算法说明;接口说明要算法说明;接口说明: :调用形式调用形式, ,参数描述;子程参数描述;子程序清单序清单, ,有关数据的说明;模块位置有关数据的说明;模块位置: :在哪个源文
35、件在哪个源文件中中, ,隶属于哪一个软件包;开发历史隶属于哪一个软件包;开发历史: :包括模块设计包括模块设计者者, ,复审者复审者, ,复审日期复审日期, ,修改日期及有关说明等修改日期及有关说明等 主要变量主要变量( (结构、联合、类或对象结构、联合、类或对象): ):含义的注释。含义的注释。 处理过程的每个阶段和典型算法前都有相关注释处理过程的每个阶段和典型算法前都有相关注释说明,但是不要对每条语句注释。说明,但是不要对每条语句注释。 应保持注释与代码完全一致。应保持注释与代码完全一致。 程序格式清晰:一行只写一条语句,一个程序如程序格式清晰:一行只写一条语句,一个程序如果写得密密麻麻、
36、分不出层次,是很难看懂的。果写得密密麻麻、分不出层次,是很难看懂的。利用空格、空行和缩进显示程序的逻辑结构,缩利用空格、空行和缩进显示程序的逻辑结构,缩进量统一为进量统一为4 4个字节。个字节。 (A-17)AND NOT(B=49)OR C写成写成 (A -17) AND NOT (B = 49) OR C 对于嵌套的循环和分支程序,层次不要超过五层对于嵌套的循环和分支程序,层次不要超过五层。语句力求简单、清晰,不要片面追求效率语句力求简单、清晰,不要片面追求效率, ,程序编写得过于紧凑程序编写得过于紧凑, ,使语使语句复杂化。如:句复杂化。如:for (i=1; i=n; i+) for
37、(j=1; j=n; j+) Vij = (i/j) * (j/i)V V是一个是一个N NN N单位矩阵单位矩阵, ,当当IJIJ时时,V(I,J)=0;,V(I,J)=0;当当I=JI=J时时,V(I,J)=1,V(I,J)=1。这个程序构。这个程序构思巧妙,但不易理解。如果改成下面的形式,更容易了解程序的意图思巧妙,但不易理解。如果改成下面的形式,更容易了解程序的意图 for (i=1; i=n; i+) for (j=1; j=n; j+) if (i=j) Vij = 1; else Vij = 0; 简单变量的运算速度比下标(数组)变量的运算要快简单变量的运算速度比下标(数组)变量
38、的运算要快, ,程程序员可能把语句:序员可能把语句:X=AI+1/AI X=AI+1/AI 写成写成AI= AI; X=AI+1/AIAI= AI; X=AI+1/AI 因为不必访问数组的下标变量因为不必访问数组的下标变量, ,程序运行效率高程序运行效率高, ,但把一个但把一个计算表达式拆成了多个计算表达式拆成了多个, ,增加了理解的难度。一旦将来修增加了理解的难度。一旦将来修改可能会改变这几行代码的顺序或在其间插入其它语句改可能会改变这几行代码的顺序或在其间插入其它语句, ,容易引入新的错误。容易引入新的错误。 编程时尽可能使用已有的库函数。编程时尽可能使用已有的库函数。 尽量用公共过程或子
39、程序代替具有独立功能的重尽量用公共过程或子程序代替具有独立功能的重复代码段复代码段, ,但是如果不具有独立功能的代码不要这但是如果不具有独立功能的代码不要这样做。样做。 使用括号清晰地表达算术表达式和逻辑表达式的使用括号清晰地表达算术表达式和逻辑表达式的运算顺序。运算顺序。 尽量使用三种基本控制结构编写程序尽量使用三种基本控制结构编写程序, ,使用使用IF IF THEN ELSETHEN ELSE结构实现分支结构实现分支; ;使用使用DO UNTILDO UNTIL或或DO DO WHILEWHILE来实现循环。来实现循环。 避免采用过于复杂的条件测试,少用含有避免采用过于复杂的条件测试,少
40、用含有“否定否定”运算符的条件语句,例如在程序运算符的条件语句,例如在程序中把中把: :IF NOT (CHARIF NOT (CHAR0) OR (CHAR9) THEN 9) THEN 改成改成IF (CHAR0) AND (CHAR0) AND (CHAR=A) THENIF(CHAR=A) THEN IF(CHAR=Z) THEN IF(CHAR=Z) THEN PRINT “This is a letter PRINT “This is a letter。” ELSE/ELSE/这个语句的配套这个语句的配套IF IF逻辑上不明确逻辑上不明确 PRINT This is not a l
41、etterPRINT This is not a letter。” 避免使用避免使用ELSE GOTOELSE GOTO和和ELSE RETURNELSE RETURN结构。结构。 避免过多的循环嵌套和条件嵌套。避免过多的循环嵌套和条件嵌套。 数据结构要有利于程序的简化。数据结构要有利于程序的简化。 模块功能尽可能单一化,模块间的耦合能够清晰模块功能尽可能单一化,模块间的耦合能够清晰可见。利用信息隐蔽确保每一个模块的独立性。可见。利用信息隐蔽确保每一个模块的独立性。 对递归定义的数据结构尽量使用递归过程。对递归定义的数据结构尽量使用递归过程。 尽量不要修补结构差的程序尽量不要修补结构差的程序,
42、 ,而应重新设计和编码而应重新设计和编码。 对太大的程序,要分块编写、测试,然后再集成对太大的程序,要分块编写、测试,然后再集成 。 数据说明的先后次序规范化数据说明的先后次序规范化o 简单变量类型说明、数组说明、公用数据块说明、文简单变量类型说明、数组说明、公用数据块说明、文件说明件说明 每个类型说明中可按如下顺序排列每个类型说明中可按如下顺序排列o 整型量说明、实型量说明、字符量说明、逻辑量说明整型量说明、实型量说明、字符量说明、逻辑量说明 同一条说明语句中可按字母顺序排列同一条说明语句中可按字母顺序排列,例如,例如o INTEGER cost, length, price, widthI
43、NTEGER cost, length, price, width 程序首先是正确,其次是考虑优美和效率。程序首先是正确,其次是考虑优美和效率。 对所有的用户输入,必须进行合法性和有效性检对所有的用户输入,必须进行合法性和有效性检查。查。 不要单独进行浮点数的比较。在计算机中用二进不要单独进行浮点数的比较。在计算机中用二进制表示十进制数时,有时二进制数不能准确地表制表示十进制数时,有时二进制数不能准确地表达十进制数,这时浮点数的表示具有不准确性。达十进制数,这时浮点数的表示具有不准确性。用它们做比较,其结果常常发生异常情况。解决用它们做比较,其结果常常发生异常情况。解决办法是在严格的容差级范围
44、内检验两个值的差异办法是在严格的容差级范围内检验两个值的差异,其形式为:,其形式为:|x0|x0 x1| x1| 其中其中 是容差级,其大是容差级,其大小取决于具体应用中的总体精度要求及所用数值小取决于具体应用中的总体精度要求及所用数值的精度。的精度。 所有变量在调用前必须被初始化。所有变量在调用前必须被初始化。 改一个错误时可能产生新的错误,因此在修改前改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。首先考虑对其它程序的影响。 单元测试也是编程的一部分,提交联调测试的程单元测试也是编程的一部分,提交联调测试的程序必须通过单元测试。序必须通过单元测试。 单元测试时,必须针对
45、类里的每一个单元测试时,必须针对类里的每一个publicpublic方法方法进行测试,测试其正确的输入,是否得到正确的进行测试,测试其正确的输入,是否得到正确的输出;错误的输入是否得到相应的容错处理(如输出;错误的输入是否得到相应的容错处理(如异常捕捉处理,返回错误提示等)。异常捕捉处理,返回错误提示等)。 应当尽量使用语言的标准部分,避免使用第三方应当尽量使用语言的标准部分,避免使用第三方提供的接口,以确保程序不受具体的运行环境影提供的接口,以确保程序不受具体的运行环境影响,和平台无关。响,和平台无关。 对数据库的操作,使用符合语言规范的标准接口对数据库的操作,使用符合语言规范的标准接口类例
46、如类例如JDBCJDBC,除非程序是运行于特定的环境下,除非程序是运行于特定的环境下,并且有很高的性能优化方面的要求。并且有很高的性能优化方面的要求。 程序中涉及到的数据库定义和操纵语句,尽量使程序中涉及到的数据库定义和操纵语句,尽量使用标准用标准 SQL SQL 数据类型和数据类型和 SQL SQL 语句语句 任何程序都会有输入输出,输入输出的方任何程序都会有输入输出,输入输出的方式应当尽量方便用户的使用。系统能否为式应当尽量方便用户的使用。系统能否为用户接受,很大程度上取决于输入输出的用户接受,很大程度上取决于输入输出的风格。在需求分析和设计阶段就应确定基风格。在需求分析和设计阶段就应确定
47、基本的输入输出风格,要避免因设计不当带本的输入输出风格,要避免因设计不当带来操作和理解的麻烦。来操作和理解的麻烦。 对所有的输入数据进行检验,从而识别错误的输对所有的输入数据进行检验,从而识别错误的输入,以保证每个数据的有效性。入,以保证每个数据的有效性。 检查输入项各种重要组合的合理性,必要时报告检查输入项各种重要组合的合理性,必要时报告输入状态信息。输入状态信息。 输入的步骤和操作尽可能简单,并且要保持简单输入的步骤和操作尽可能简单,并且要保持简单的输入格式。的输入格式。 有些输入信息应提供缺省值。有些输入信息应提供缺省值。 输入一批数据时,最好使用输入结束标志,而不输入一批数据时,最好使
48、用输入结束标志,而不要由用户指定输入数据数目。要由用户指定输入数据数目。 在以交互式方式进行输入时,要在屏幕上显示提在以交互式方式进行输入时,要在屏幕上显示提示信息,说明输入的选择项和取值范围,便于操示信息,说明输入的选择项和取值范围,便于操作者输入。同时,在输入数据的过程和输入数据作者输入。同时,在输入数据的过程和输入数据结束时,也要在屏幕上给出状态信息。结束时,也要在屏幕上给出状态信息。 当程序设计语言对输入格式有严格要求时,应保当程序设计语言对输入格式有严格要求时,应保持输入格式与输入语句的要求一致。持输入格式与输入语句的要求一致。 给所有的输出加上注解信息。给所有的输出加上注解信息。
49、按照用户的要求设计输出报表格式。按照用户的要求设计输出报表格式。 可重复使用的、功能相对独立的算法或接可重复使用的、功能相对独立的算法或接口。应该考虑封装成公共的控件或类,如口。应该考虑封装成公共的控件或类,如时间、日期处理,字符串格式处理,数据时间、日期处理,字符串格式处理,数据库连接,文件读写等,以提高系统中程序库连接,文件读写等,以提高系统中程序的可复用性。的可复用性。 相对固定和独立的程序实现方式和过程,相对固定和独立的程序实现方式和过程,应考虑做成程序模板,增强对程序实现方应考虑做成程序模板,增强对程序实现方式的复用,如对符合一定规范的式的复用,如对符合一定规范的 XMLXML数据数
50、据的解析等过程。的解析等过程。 程序的效率是指程序的执行速度及程序所需占用程序的效率是指程序的执行速度及程序所需占用的内存的存储空间。程序编码是最后提高运行速的内存的存储空间。程序编码是最后提高运行速度和节省存储的机会,因此在此阶段不能不考虑度和节省存储的机会,因此在此阶段不能不考虑程序的效率。讨论程序效率的几条准则:程序的效率。讨论程序效率的几条准则:o 效率是一个性能要求,应当在需求分析阶段给出。软效率是一个性能要求,应当在需求分析阶段给出。软件效率以需求为准,不应以人力所及为准。件效率以需求为准,不应以人力所及为准。o 好的设计可以提高效率。好的设计可以提高效率。o 程序的效率与程序的简
51、单性相关。程序的效率与程序的简单性相关。o 一般说来,任何对效率无重要改善,且对程序的简单一般说来,任何对效率无重要改善,且对程序的简单性、可读性和正确性不利的程序设计方法都是不可取性、可读性和正确性不利的程序设计方法都是不可取的。的。 源程序的效率与详细设计阶段确定的算法源程序的效率与详细设计阶段确定的算法的效率直接有关。在详细设计翻译转换成的效率直接有关。在详细设计翻译转换成源程序代码后,算法效率反映为程序的执源程序代码后,算法效率反映为程序的执行速度和存储容量的要求。行速度和存储容量的要求。 在编程序前,尽可能化简有关的算术表达式和逻辑表达在编程序前,尽可能化简有关的算术表达式和逻辑表达式;式; 仔细检查算法中的嵌套的循环,尽可能将某些语句或表仔细检查算法中的嵌套的循环,尽可能将某些语句或表 达式移到循环外面;达式移到循环外面;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025货车驾驶员劳动合同范本
- 《下消化道出血培训》课件
- (12)-专题06 感悟作文(练习)
- 《新冠病毒防护指南》课件
- 九年级拓展活动式主题班会别让指尖划破我们的梦想 教学设计及反思
- 西安交通工程学院《自动控制原理》2023-2024学年第二学期期末试卷
- 信阳涉外职业技术学院《物理化学实验1》2023-2024学年第二学期期末试卷
- 山东文化产业职业学院《中国哲学概论》2023-2024学年第一学期期末试卷
- 南京师范大学中北学院《社会体育指导员一级》2023-2024学年第二学期期末试卷
- 皖北卫生职业学院《地理信息系统导论实验》2023-2024学年第二学期期末试卷
- 全国青年教师观摩大赛数学赛课一等奖作品教学设计模板(三)
- 蒙特利尔认知评估量表北京版
- 幼儿一日活动安排(大、中、小)
- TSXDZ 052-2020 煤矿矿图管理办法
- YY/T 1778.1-2021医疗应用中呼吸气体通路生物相容性评价第1部分:风险管理过程中的评价与试验
- GB/T 28734-2012固体生物质燃料中碳氢测定方法
- GB/T 19363.2-2006翻译服务规范第2部分:口译
- GB/T 11865-2008船用离心通风机
- GA/T 652-2006公安交通管理外场设备基础施工通用要求
- 高考语文一轮复习:作文素材《长津湖》 课件(53张PPT)
- 《课程与教学论》形考二答案
评论
0/150
提交评论