版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
工程授课教师:蓝天:电子邮箱:lantian
课程群号:302950664第五章程序实现程序设计语言的特点1程序的效率3良好的编程2小结4本章学习目标1了解选择程序设计语言的一般原则2理解编程规范3培养良好的编程程序设计语言程序设计语言是:人与计算机通信的最基本工具。程序设计语言的特性不可避免地会影响开发的思路和解决问题的方式,会影响代码的可理解性和可
性。编码之前的一项重要工作就是选择一种适当的编程语言。不同的语言适用于不同的应用COBOL语言:数据处理程序PHP语言:专门用来编写网页处理程序Perl语言:更适合文本处理C语言:被广泛用于系统
开发JAVA语言:用于跨平台的应用
开发程序设计语言的特点-技术方面一旦确定了需求之后,待选用的程序设计语言的技术特性就显得非常重要了。如果需要复杂的数据结构,就要仔细衡量有哪些语言能提供这些复杂的数据结构描述。如果
要求高性能及实时处理能力,就该选用适合于实时处理的语言,如C或汇编语言。如果应用有许多输出报告或繁
件处理,则选用PowerBuilder、Delphi或SQL比较合适。所有程序语言的基本成分都可归纳为4种:数据成分:指明该语言能接受的数据,如各种类型的变量、数组、指针、记录等。作为程序操作的对象,具有名称、类型和作用域等特征。使用前要对这些特征加以说明,数据名称由用户通过标识符命名,类型是说明数据需占用多少单元和存放形式,作用域说明数据可被使用的范围。运算成分:指明该语言可执行的运算,如+,-,*、/控制成分:顺序结构、条件选择结构和循环结构传输成分:数据的传输方法,例如输入、输出函数程序设计语言的特点-语言本身名字类型初始化程序变量的局部性程序模块的独立性循环结构分支结构异常处理独立编译……1、名字预先说明程序中所使用的变量名字,编译程序能,从而帮助程够检查程序中出现的名字的序员发现和改正程序中的错误。但是,有些语言不要求显式地程序中所使用的变量名称,它把变量第一次出现时使用的名字看做对这个变量的。这样做可能会引入一些很难发现的错误,并且可能会产生严重。2、类型变量的类型确定一个变量的使用方式,有了类型,编译程序就能够很容易地发现程序中某个特定类型的变量使用不当的错误。有些语言不要求显式的类型,例如FORTRAN语言规定,名字的第一个字母决定它的类型,但是一旦显式地了一个变量的类型,则以显式为该变量的类型。这很容易造成阅读时的。现代的大多数高级语言都有自定义类型,即允许开发定义与特定应用相关的类型,并且可以用自定义类型嵌套定义新的类型。例如,可以定义记录、链表、二叉树等复杂的结构类型。程序设计语言中的类型说明不仅仅是一种安全措施,还是一种重要的抽象机制。3、初始化程序设计中最常见的错误之一就是在使用变量之前没有对变量进行初始化。为了减少发生错误的可能性,应该强迫程序员对程序中所使用的变量进行初始化。另一个办法是在说明变量时由系统给变量赋予一个特殊的标识,表明它尚未初始化,以后如果没给这个变量赋值就企图使用它,系统会发出信号。4、程序变量的局部性程序设计的一般原则是变量的名字应该在靠近使用它的地方引入,并且应该只有程序中真正需要它的那些部分才能够它。通常有两种提供局部变量的途径:单层局部性和多层局部性。PROGRAM
TEST……PROCEDURE
A()VARARRAY
A[20],B[20]:INTEGER;WORK,I,J:INTEGER;BEGIN……………………END;PROCEDUREB()VARARRAY
A[20],B[20]:INTEGER;WORK,I,J:INTEGER;BEGIN……………………END;END.程序中过程A和B内的变量是单层局部性的,两个过程中
的变量的作用范围局限于所在的过程。PROGRAM
TEST……PROCEDURE
A()VARARRAY
A[20],B[20]:INTEGER;WORK,I,J,K:INTEGER;PROCEDURE
B()VARARRAY
A[20],B[20]:INTEGER;WORK,I,J:INTEGER;BEGIN……………………END;BEGIN……………………END;…………程序的结构是多层的,模块A中的变量与模块B中的变量除了变量K之外全部相同。内层模块B中有意义的变量是属于该模块的A[],B[],WORK,I,J和属于外层模块的变量K。要尽量避免内层模块与外层模块定义相同的变量名,容易引起差错,给
理解代码带来很多5、程序模块独立性结构化语言提供了控制局部变量可见性的某些
,主要是在较内层程序模块中定义的变量不能被较外层的程序块。由于动态分配的缘故,在两次调用一个程序块的间隔中不能够保存局部变量的值。因此,即使只有一两个子程序使用的变量,如果需要在两次调用这些子程序的过程中保存这个变量的值,也必须把这个变量说明成全局的,这将增加时发生差错的可能性。因此现在大多数语言提供了静态变量,这种变量可以保存前次调用时的数据,解决了多次调用一个模块时局部变量不能保存的问题。6、循环结构最常见的循环结构有for语句、while-do语句和repeat-until语句,这些语言都是在循环体外判断循环条件。有许多场合需要在循环体内的任意一点测试循环结束条件,如果使用if-then-else语句和附加的布尔变量实现这个要求,则将增加程序长度并且降低程序的可读性。某些程序设计语言考虑到上述要求,适当地解决了这个问题。
exit{(标识符)}{when(条件)}这个语句把控制转移到循环语句后面的一条语句或转移到由标识符指定的语句上。7、分支结构简单的分支语句一般不会出现问题,但是多分支的case型语句注意以下2个问题:如果case表达式取的值不在预先指定的范围内,需要用缺省方式处理。在某些程序设计语言中,由case表达式选定的执行语句取决于所有可能执行的语句排列顺序,如果语句顺序排列错了,编译和运行时系统是不会发现这类错误的。8、异常处理程序运行过程中发生的错误或意外事件称为异常。以前大多数程序设计语言在检测和处理异常方面几乎没有给程序员提供任何帮助,程序员只能使用条件控制检测异常,在发生异常时把控制转移到处理异常的程序段。但是,JAVA等一些语言提供了异常处理机制,程序员可以很容易地利用语言提供的异常处理机制实现错误和异常的处理操作。9、独立编译独立编译意味着能够分别编译各个程序单元,然后再把它们集成为一个完整的程序。一个大程序通常由许多程序单元组成,如果修改了其中任何一个程序单元都需要重新编译整个程序,将大大增加程序开发、调试和的成本;反之,如果可以独立编译,则只需要重新编译修改了的程序单元,然后重新连接整个程序即可。独立编译的机制对于开发大型系统极其重要。10、其它特性某些语言带有一些特别的功能,这些功能可实现一些特殊的设计。如MODULA语言和并发PASCAL语言支持并发处理、以及必须彼此通信和协调的分布式进程。因此适应并发的和分布式处理的要求。程序设计语言的特点-工程方面详细设计能够直接地翻译成程序代码。源程序的可移植性。改善
可移植性的主要途径是使语言标准化。对于可移植性要求的,应该严格遵守相应的标准编写程序代码,不要图一时的省事去使用语言的非标准特性。编译程序效率较高。编译程序首先应该支持独立编译,并且能够发现尽可能多的程序代码错误,辅助程序员提高程序调试效率。尽可能应用代码生成工具。许多语言都有与它相应的编译程序、连接程序、调试程序、代码格式化程序、交叉编译程序、宏处理程序和标准子程序库等。对于提高效率是明智的选择。可
性。可性的前提是代码的可理解性,源程序的可读性、语言的文档化特性是影响可
性的重要因素。程序设计语言的分类按语言级别分类,有低级语言和高级语言之分按照用户要求,有过程式语言和非过程式语言之分按照应用范围,有通用语言和
语言之分按照使用方式,有交互式语言和非交互式语言之分按照成分性质,有顺序语言、并发语言和分布式语言之分第四代语言,有数据库查询语言DEV2000、程序代码生成器以及其他一些原型语言、形式化规格说明语言等等。选择一种语言要考虑的因素在选择与评价语言时,首先要从应用要求入手,对比各项要求的相对重要性,然后再根据这些要求和相对重要性来选择合适的编程语言。具体选择的考虑:编程待开发的水平和编程经历的类型算法和计算复杂性数据结构的复杂性的开发成本和时间要求的可移植性要求可用的 工具的水平和编程经历。虽然程序员编程学
门新的语言并不,但是要熟练地掌握和精通一门语言是需要长期的实践开发积累的。因此,在选择语言时一定要考虑到时间限制和程序员掌握语言的程度,尽可能选择一种程序员熟悉的语言。待开发的类型可能不同,一般分为数据库应用类、实时控制
、系统级、
等等。根据、人工智能的类型选择合适的开发语言,例如,FORTRAN语言适合科学计算,PowerBuilder、Delphi、C#等语言适合于信息系统的开发,LISP、PROLOG语言适合于人工智能领域。算法和计算复杂性。待开发算法的复杂性不同,应该选择合适的语言,例如,科学计算领域大都选择FORTRAN,因为它的运行性能比较好,但是计算机硬件的发展使得运算速度已不再成为瓶颈,因此许多计算型+语言。然而计算复杂度很高的普遍采用C/C+采用汇编语言、人工智能类的语言肯定是不合适的,前者编写代码的工作复杂度太高,后者的运行效率太低,并且这两类语言的科学计算库都很少,可复用的
元素较少。数据结构的复杂性。有些语言,例如FORTRAN、
BASIC语言,定义数据类型的能力非常差,一旦设计中有比较复杂的数据结构,程序员实现时会感到很棘手。而PASCAL、JAVA之类的语言其数据结构描述能力非常强大,为程序员创造了一个很广阔的编程空间。考虑的开发成本和时间要求。不仅要考虑当前的开发成本,还要考虑今后的成本,如果选择的语言很生僻,即使现在以很快的速度开发出来,将来的
工作量不得不考虑。
的可移植性要求。如果目标系统的运行环境不能确定,例如,可能运行在小型机的UNIX操作系统上,也可能运行在大型机的OS/400操作系统上,甚至还要运行在PC机的Windows操作系统环境中,这时选择的开发语言最好是JAVA。这样可以保证
的跨平台运行。选择语言时,特别是为大型选择语言时,一定要考虑可用的工具。如果某种语言有支持开发的工具,则开发和调试都会容易。良好的编程良好的编程程序员编写的代码除了交给计算机运行外,还必须让其他程序员或设计
能够看懂。如果程序代码的可读性好,则调试和的成本就可以大幅度降低,同时可以减小程序运行期间
失效的可能性,提高程序的可靠性。对于代码编写而言,要求程序具有良好的结构和风格。结构化程序设计原则尽量使用语言提供的基本控制结构,即顺序结构、选择结构和重复结构。利用块机制将程序组织成容易识别的块,每块只有一个
和一个出口。复杂结构应该用基本控制结构组合或嵌套实现。对于语言中没有的控制结构,可用一段等价的程序段模拟,但要求该程序段在整个系统中应前后一致严格控制GOTO语句。自顶向下、逐步细化在详细设计和编码阶段,还应当采取自顶向下、逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,进而翻译成一系列用某种程序设计语言写成的程序。[例]用筛选法求100以内的素数。具体做法就是从2到100中去掉2,3,…,9,10的倍数,剩下的就是100以内的素数。为了解决这个问题,可先按程序功能写出一个框架。main(
){建立2到100的数组A[],其中A[i]=i;建立2到10的素数表B[],存放2到10以内素数;------1------2若A[i]=i是B[]中任意一个数的倍数,则剔除A[i];------3输出A[
]中所有没有被剔除的数;
------4}程序设计风格基本要求可读性要求正确性与容错性要求可移植性要求输入和输出要求重用性要求面
象的程序设计风格1)基本要求程序结构清晰且简单易懂,单个函数的行数一般不要超过100行。算法设计应该简单,代码要精简,避免出现程序。尽量使用标准库函数(类方法)和公共函数(类方法)。最好使用括号以避免二义性。2)可读性要求→注释程序头,函数头说明:程序标题,该模块功能说明,主要算法说明;接口说明:调用形式,参数描述;子程序
,有关数据的说明;模块位置:在哪个源文件中,隶属于哪一个
包;开发历史:包括模块设计者,复审者,复审日期,修改日期及有关说明等主要变量(结构、联合、类或对象):含义的注释。处理过程的每个阶段和典型算法前都有相关注释说明,但是不要对每条语句注释。应保持注释与代码完全一致。2)可读性要求→格式程序格式清晰:一行只写一条语句,一个程序如果写得密密麻麻、分不出层次,是很难看懂的。利用空格、空行和缩进显示程序的逻辑结构,缩进量为4个字节。(A<-17)AND
NOT(B<=49)OR
C写成(A
<
-17)
AND NOT
(B
<=
49)OR
C对于嵌套的循环和分支程序,层次不要超过五层。2)可读性要求→程序本身语句力求简单、清晰,不要片面追求效率,程序编写得过于紧凑,使语句复杂化。如:for
(i=1;
i<=n;
i++)for
(j=1;
j<=n;
j++)V[i][j]
=
(i/j)
*
(j/i)V是一个N×N单位矩阵,当I≠J时,V(I,J)=0;当I=J时,V(I,J)=1。这个程序构思巧妙,但不易理解。如果改成下面的形式,更容易了解程序的意图for
(i=1;
i<=n;
i++)for
(j=1;
j<=n;
j++)if
(i==j)V[i][j]
=
1;elseV[i][j]
=
0;2)可读性要求→程序本身(续)简单变量的运算速度比下标(数组)变量的运算要快,程序员可能把语句:X=A[I]+1/A[I]写成AI=
A[I];
X=AI+1/AI因为不必数组的下标变量,程序运行效率高,但把一个计算表达式拆成了多个,增加了理解的难度。一旦将来修改可能会改变这几行代码的顺序或在其间其它语句,容易引入新的错误。2)可读性要求→程序本身(续)编程时尽可能使用已有的库函数。尽量用公共过程或子程序代替具有独立功能的重复代码段,但是如果不具有独立功能的代码不要这样做。使用括号清晰地表达算术表达式和逻辑表达式的运算顺序。尽量使用三种基本控制结构编写程序,使用IFTHEN
ELSE结构实现分支;使用DO
UNTIL或DOWHILE来实现循环。2)可读性要求→程序本身(续)避免采用过于复杂的条件测试,少用含有
“否定”运算符的条件语句,例如在程序中把:IF
NOT
((CHAR<=’0’)
OR
(CHAR>=’9’))
THEN
……改成IF(CHAR>’0’)
AND
(CHAR<’9’)
THEN
……2)可读性要求→程序本身(续)避免使用空的ELSE语句和IF
THEN
IF语句IF(CHAR>=’A’)
THENIF(CHAR<=’Z’)
THENPRINT“This
is
a
letter。”ELSE//这个语句的配套IF逻辑上不明确PRINT
"This
is
not
a
letter。”2)可读性要求→程序本身(续)避免使用ELSE
GOTO和ELSE
RETURN结构。避免过多的循环嵌套和条件嵌套。数据结构要有利于程序的简化。模块功能尽可能单一化,模块间的耦合能够清晰可见。利用信息隐蔽确保每一个模块的独立性。对递归定义的数据结构尽量使用递归过程。尽量不要修补结构差的程序,而应重新设计和编码。对太大的程序,要分块编写、测试,然后再集成。2)可读性要求→数据说明数据说明的先后次序规范化简单变量类型说明、数组说明、公用数据块说明、文件说明每个类型说明中可按如下顺序排列整型量说明、实型量说明、字符量说明、逻辑量说明同一条说明语句中可按字母顺序排列,例如INTEGER
cost,
length,
price,
width3)正确性与容错性要求程序首先是正确,其次是考虑优美和效率。对所有的用户输入,必须进行和有效性检查。不要单独进行浮点数的比较。在计算机中用二进制表示十进制数时,有时二进制数不能准确地表达十进制数,这时浮点数的表示具有确性。用它们做比较,其结果常常发生异常情况。解决办法是在严格的容差级范围内检验两个值的差异,其形式为:|x0﹣x1|<ε
其中ε是容差级,其大小取决于具体应用中的总体精度要求及所用数值的精度。3)正确性与容错性要求(续)所有变量在调用前必须被初始化。改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。单元测试也是编程的一部分,提交联调测试的程序必须通过单元测试。单元测试时,必须针对类里的每一个public方法进试,测试其正确的输入,是否得到正确的输出;错误的输入是否得到相应的容错处理(如异常捕捉处理,返回错误提示等)。4)可移植性要求应当尽量使用语言的标准部分,避免使用第提供的接口,以确保程序不受具体的运行环境影响,和平台无关。对数据库的操作,使用符合语言规范的标准接口类例如JDBC,除非程序是运行于特定的环境下,并且有很高的性能优化方面的要求。程序中涉及到的数据库定义和
语句,尽量使用标准SQL
数据类型和SQL
语句5)输入和输出要求任何程序都会有输入输出,输入输出的方式应当尽量方便用户的使用。系统能否为用户接受,很大程度上取决于输入输出的风格。在需求分析和设计阶段就应确定基本的输入输出风格,要避免因设计不当带来操作和理解的麻烦。5)输入和输出要求(续)对所有的输入数据进行检验,从而识别错误的输入,以保证每个数据的有效性。检查输入项各种重要组合的合理性,必要
告输入状态信息。输入的步骤和操作尽可能简单,并且要保持简单的输入格式。有些输入信息应提供缺省值。输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目。5)输入和输出要求(续)在以交互式方式进行输入时,要在屏幕上显示提示信息,说明输入的选择项和取值范围,便于操作者输入。同时,在输入数据的过程和输入数据结束时,也要在屏幕上给出状态信息。当程序设计语言对输入格式有严格要求时,应保持输入格式与输入语句的要求一致。给所有的输出加上注解信息。按照用户的要求设计输出报表格式。6)重用性要求可重复使用的、功能相对独立的算法或接口。应该考虑封装成公共的控件或类,如时间、日期处理,字符串格式处理,数据库连接,文件读写等,以提高系统中程序的可复用性。相对固定和独立的程序实现方式和过程,应考虑做成程序模板,增强对程序实现方式的复用,如对符合一定规范的XML数据的解析等过程。程序的效率程序效率程序的效率是指程序的执行速度及程序所需占用的内存的度和节省空间。程序编码是最后提高运行速的机会,因此在此阶段不能不考虑程序的效率。
程序效率的几条准则:效率是一个性能要求,应当在需求分析阶段给出。软件效率以需求为准,不应以人力所及为准。好的设计可以提高效率。程序的效率与程序的简单性相关。
一般说来,任何对效率无重要改善,且对程序的简单性、可读性和正确性不利的程序设计方法都是不可取的。算法对效率的影响源程序的效率与详细设计阶段确定的算法的效率直接有关。在详细设计翻译转换成源程序代码后,算法效率反映为程序的执行速度和容量的要求。设计向程序转换过程中的指导原则①在编程序前,尽可能化简有关的算术表达式和逻辑表达式;②仔细检查算法中的嵌套的循环,尽
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年室内装修介绍协议版A版
- 202425吨吊车租赁合同
- 2024年夫妻双方共同抚养子女离婚合同版
- 2024年企业借款及质押担保协议样式版B版
- 2024年全球货物交易协议模板版B版
- 2024年度化工产品采购与供应合同
- 2024年全新家庭护理服务协议模板版B版
- 2024年个人隐私与商业秘密保护合同模板一
- 2024年专业大客车租赁服务协议版B版
- 2024年度农产品生鲜采购业务协议版
- 基于高考评价体系的化学学科素养的试题研究
- 铁路线路工更换尖轨作业指导书
- H3CCAS云计算管理系统平台配置指导书V0
- 纺织行业安全风险辨识建议清单(仅供参考)
- SPC与常规控制图
- 课程论文可参考格式浙江大学本科毕业论文格式范文
- 国家开放大学《液压与气压传动》章节测试题参考答案
- 邮政储蓄银行专业知识真题
- 自动扶梯大修施工方案
- GB1184-1996-T形状和位置公差未注公差值
- 施工平面布置图
评论
0/150
提交评论