《编码电子教案》PPT课件.ppt
1,第6章 编码和编程语言,学习目标了解编码的目的 掌握编码的风格 了解编码语言的发展 掌握编码语言的选择,2,第6章 编码和编程语言,教学内容 6.1 编码的目的 6.2 编码的风格 6.3 编码语言 本章小结,3,6.1 编码的目的,编码的目的,是使用选定的程序设计语言,把模块的过程性描述翻译为用该语言书写的源程序。编码模块的过程性描述源程序(不可执行的)(可执行的)编码产生的源程序,应该正确可靠,简明清晰,而且具有较高的效率。但是,清晰和效率却常有矛盾。对于大多数模块来讲,应该把简明清晰放在第一位,如果个别模块要求特别高的效率,就应把具体要求告诉程序员,以便作特殊的处理。,4,6.1 编码的目的,设计是编码的前导。实践表明,编码中出现的问题主要是由设计中存在的问题引起的。但这并不是说,编码阶段无足轻重。恰恰相反,程序员应该向优秀的译员一样,在编码“翻译”时简明清晰、高质量地将系统设计付诸实施。顺便指出,除了在编码阶段要产生源程序外,在测试阶段也需要编写一些测试程序,用于对软件的测试。但这部分代码用过就可以废弃,不需要在程序质量上多费功夫。在演化模型软件开发中产生的原型代码,也有一部分或全部都是用过就废弃的代码。,返回目录,5,6.2 编码的风格,主要教学内容:6.2.1 结构化程序设计 6.2.2 编码风格,返回目录,6,6.2 编码的风格,6.2.1 结构化程序设计 程序编码是把软件的详细设计变换成用某一种程序设计语言编写的可实现的源程序,结构化程序设计是在编写程序时首先必须考虑的问题。结构化程序设计技术主要包括两个方面:在编写程序时,强调使用几种基本控制结构。尽可能避免使用会使程序质量受到影响的GOTO语句。在程序设计过程中,尽量采用自顶向下和逐步细化的原则,由粗到细,一步步展开。,7,6.2 编码的风格,1 结构化程序设计的原则使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑。选用的控制结构只准许有一个入口和一个出口。程序语句组成容易识别的块(block),每块只有一个入口和一个出口。复杂结构应该用基本控制结构进行组合嵌套来实现。语言中没有的控制结构,可用一段等价的程序段模拟,但要求该程序段在整个系统中应前后一致。严格控制GOTO语句。,8,6.2 编码的风格,例6.1 图6.1是使用FORTRAN IV语言编写的一个打印A,B,C三数中最小者的程序的流程图。其中出现了6个GOTO语句,程序可读性很差。,图6.1 打印A,B,C三数中最小者,if(A.LT.B)goto 120if(B.LT.C)goto 110 100 write(6,*)C goto 140 110 write(6,*)B goto 140 120 if(A.LT.C)goto 130 goto 100 130 write(6,*)A 140 continue,9,6.2 编码的风格,如果使用在FORTRAN IV中没有,而FORTRAN 77中才提供的if-then-else结构化构造,则上述程序段可改写成如下形式,这种程序结构清晰,可读性好。if(A.LT.B.AND.A.LT.C)then write(6,*)Aelse if(A.GE.B.AND.B.LT.C)then write(6,*)B else write(6,*)C endif endif,10,6.2 编码的风格,例6.2 用GOTO语句实现提前退出循环的情况下面一段程序是用Pascal书写的一个多出口循环程序()。其正常循环结束条件是C1=false。但一旦在执行中C2或C3有一个条件得到满足,就会提前退出循环。while c1 do begin if c2 then goto 20;if c3 then goto 30;end;20:code for c2 exit goto 40;30:code for c3 exit40:,11,6.2 编码的风格,这一程序段有3个出口,明显违反了单出口的要求。可通过增加布尔变量将其修改为单出口结构。每次循环将这些标志检查一遍,以便决定要不要退出循环。修改后的程序段如下。exit1:=false;exit2:=false;while(C1)and(not exit1)and(not exit2)dobegin if c2 then exit1:=true;if c3 then exit2:=true;end;if(exit1)then goto 20;if(exit2)then goto 30;20:code for c2 exit goto 40;30:code for c3 exit40:,返回目录,12,6.2 编码的风格,2程序设计自顶向下,逐步求精 对于一个复杂的问题,不要急于马上用计算机指令、数字和逻辑符号来表示它,而应当先用较自然的抽象的语句来表示,从而得到抽象的程序。抽象程序对抽象的数据类型进行某些特定的运算,并用一些合适的记号(可以是自然语言)来表示。下一步对抽象程序再做分解,进入下一个抽象的层次。这样的细化过程一直进行下去,直到程序能被计算机接受为止。此时的程序已经是用某种高级语言或机器指令书写的了。,13,6.2 编码的风格,自顶向下,逐步求精方法的优点:自顶向下,逐步求精方法符合人们解决复杂问题的普遍规律。可提高软件开发的成功率和生产率;用先全局后局部,先整体后细节,先抽象后具体的逐步求精的过程开发出来的程序具有清晰的层次结构,因此程序容易阅读和理解;程序自顶向下,逐步细化,分解成一个树形结构(如图6.2所示)。在同一层的结点上做的细化工作相互独立。在任何一步发生错误,一般只影响它下层的结点,同一层其它结点不受影响。在以后的测试中,也,返回目录,14,6.2 编码的风格,可以先独立地一个结点一个结点地做,最后再集成。程序清晰和模块化,使得在修改和重新设计一个软件时,可复用的代码量最大;每一步工作仅在上层结点的基础上做不多的设计扩展,便于检查;有利于设计的分工和组织工作。,图6.2 程序的树形结构,返回目录,15,6.2 编码的风格,6.2.2 编码风格 编码风格又称程序设计风格。在编程时,着重从以下4个方面入手:源程序文档化,数据说明,语句结构和输入输出方法,力图提高程序的可读性,改善程序质量。1源程序文档化 编码产生源程序。源代码要文档。源程序文档化主要包括:选择好标识符(变量和标号)、安排好适当的注释以及程序的视觉组织等3方面。,返回目录,16,6.2 编码的风格,(1)标识符的命名 标识符包括模块名、变量名、常量名、标号名、子程序名以及数据区名、缓冲区名等。(2)程序的注释 程序的注释分为两种:序言性注释和功能性注释。(3)视觉组织空格、空行和缩进 一个优秀的程序员在利用空格、空行和缩进的技巧上显示了他们的经验。,17,6.2 编码的风格,2数据说明 在编写程序时,则需要注意数据说明的风格。程序中数据说明要易于理解和维护,必须注意几点。(1)数据说明的次序应当规范化,使数据属性容易查找,也有利于测试、排错和维护。(2)当多个变量名用一个语句说明时,应当对这些变量按字母的顺序排列。(3)如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时这个数据结构的固有特点。,18,6.2 编码的风格,3语句结构 每个语句都应该力求简单而直接,不能过分复杂化。下述规则有助于使语句简单明了。(1)不要为了节省空间而把多个语句写在同一行。(2)程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写得过于紧凑。(3)程序编写要简单、清楚,直截了当地说明用意。(4)除非对效率有特殊的要求,程序编写要做到清晰第一,效率第二。不要为了追求效率而丧失了清晰性。,19,6.2 编码的风格,(5)首先要保证程序正确,然后才要求提高速度。(6)尽可能使用库函数。(7)避免使用临时变量而使可读性下降。(8)尽量用公共过程或子程序去代替重复的功能代码段。(9)避免不必要的转移。同时如果能保持程序的可读性,则不必用GOTO语句。(10)尽量只采用三种基本的控制结构来编写程序。,20,6.2 编码的风格,4输入和输出(I/O)输入和输出的方式和格式应当尽可能方便用户的使用。在设计和程序编码时都应考虑下列原则:(1)输入方面 对所有的输入数据都进行检验,从而识别错误的输入,以保证每个数据的有效性;检查输入项的各种重要组合的合理性,必要时报告输入状态信息;输入步骤和操作尽可能简单,并保持简单的输入格式;,21,6.2 编码的风格,应允许缺省值;输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目;在以交互式输入输出方式进行输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明可使用选择项的种类和取值范围;当程序设计语言对输入输出格式有严格要求时,应保持输入格式与输入语句的要求的一致性;,22,6.2 编码的风格,(2)输出方面 给所有的输出数据加标志;设计良好的输出报表、报告格式;输出信息中不要有文字错误,保证输出结果的正确性。输入输出风格还受到许多其它因素的影响。如输入输出设备(例如终端的类型,图形设备,数字化转换设备等)、用户的熟练程度、以及通信环境等。,23,6.2 编码的风格,Wasserman为“用户软件工程及交互系统的设计”提供了一组指导性原则,可供软件设计和编程参考:当用户使用程序时,能对用户做到“在线帮助”;对可能产生重大后果的请求,给出醒目的提示,待用户再次确认后才执行(如格式化操作等);区别对待不同的用户,使程序的输入要求和输出格式适应用户的习惯和水平;发生错误时能迅速恢复正常;有完备的输入出错检查和出错恢复措施,在程序执行过程中尽量排除由于用户的原因而造成程序出错的可能性;,24,6.2 编码的风格,总之,要从程序编码的实践中,积累编制程序的经验,培养和学习良好的程序设计风格,使编写出来的程序清晰易懂,易于测试和维护。在程序编码阶段改善和提高软件的质量。,返回目录,25,6.3 编码语言,主要教学内容:6.3.1 编码语言的发展 6.3.2 常用的编码语言 6.3.3 编码语言的选择,返回目录,26,6.3 编码语言,编码语言的发展 按照软件工程的观点,语言的发展至今已经历了4代。1第一代语言机器语言 机器语言又叫低级语言。是由机器指令代码组成的语言。用这种语言编写的程序,都是二进制代码的形式,不需要翻译,直接被计算机识别和执行,因而程序占用内存少,执行效率高。但是由于程序都是二进制的形式,给编写和阅读带来很大的不便,不利于维护。另外,由于不同的机器有相应的一套机器语言,所以程序的可移植性很差。,27,6.3 编码语言,2第二代语言汇编语言 汇编语言又称符号语言。它把计算机所能识别的机器指令用符号表示出来,从而比用二进制表示的机器语言更直观,更方便阅读和排错。不同指令集的处理器系统就有自己相应的汇编语言。从软件工程的角度来看,汇编语言只是在高级语言无法满足设计要求时,或者不具备支持某种特定功能(例如特殊的输入输出)的技术性能时,才被使用。,28,6.3 编码语言,3第三代语言高级程序设计语言 高级程序设计语言从语句结构看,它比较接近于人类自然语言,程序中所用的运算符和运算表达式也与数学中的形式差不多,因此,高级语言也称算法语言。和早期的语言和汇编语言相比,高级语言比较容易掌握和理解,并且通用性强,可以在不同的机器上运行,便于维护,极大地提高了程序设计的效率和可靠性。(1)传统的高级程序设计语言(2)通用的结构化程序设计语言(3)专用语言,29,6.3 编码语言,4第四代语言(4GL)上述的通用语言仍都是“过程化语言”。编码的时候,要详细描述问题求解的过程,告诉计算机每一步应该“怎么做”。为了把程序员从繁重的编码中解放出来,还需寻求进一步提高编码效率的新语言,这就是第四代语言(4GL)产生的背景。4GL用不同的文法表示程序结构和数据结构,但是它是在更高一级抽象的层次上表示这些结构,它不需规定太多的算法性细节。它是面向应用的,只需说明“做什么”。,返回目录,30,6.3 编码语言,第四代语言分为以下几种类型:(1)查询语言(2)程序生成器(3)其它4GL,31,6.3 编码语言,6.3.2 常用的编码语言 高级语言种类繁多,总数已不下千种。从软件工程的角度,可以把高级语言分为基础语言、结构化语言和面向对象语言3大类。1基础语言 基础语言的特点是历史悠久、应用广泛,有大量的软件库,今天仍拥有广大用户。又称通用语言。最有代表性的有:FORTRAN,COBOL,BASIC,ALGOL等。,32,6.3 编码语言,2结构化语言 20世纪70年代以来,随着结构化程序设计思想的深入人心,出现了一批结构化语言。PASCAL,C,Ada等语言就是其中著名的代表。3面向对象语言 目前比较流行的面向对象的语言有:Delphi,Visual Basic,Java,C+,PowerBuilder等。,返回目录,33,6.3 编码语言,6.3.3 编码语言的选择 选择何种编码语言是开发软件系统时必须做出的一个重要选择。一方面,我们希望根据设计去完成编码时到的困难少,编码阶段时间短,编出的代码执行效率高;另一方面,我们希望编出的代码容易阅读,方便测试和维护。所以容易测试和容易维护是非常重要的。目前应用较多的程序设计语言主要分为两大类:汇编语言和高级程序设计语言。总的来说,高级语言明显优于汇编语言,但这并不是说,汇编语言就没有市场了。,34,6.3 编码语言,由于汇编语言面向机器,执行速度快,占用空间少,在一些特殊的环境下,必须采用汇编语言。软件系统对程序执行时间和使用空间都有严格限制;系统硬件是特殊的微处理机,不能使用高级程序设计语言;大型系统中某一部分的执行时间非常关键,或直接依赖于硬件,这部分用汇编语言编写。,35,6.3 编码语言,一般情况下,我们采用高级语言来编程,选用何种高级语言通常考虑的因素有:系统的应用领域系统用户的要求软件的执行环境目标系统的性能要求程序员的知识水平软件的可移植性要求算法和数据结构的复杂性,返回目录,36,本 章 小 结,编码的目的是把详细设计的结果翻译成用选定的语言书写的源程序。程序的质量主要是由设计的质量决定的。但是,编码的风格和使用的语言,对编码质量也有重要影响。本章主要介绍了与编码有关的几个问题。良好的编码风格非常重要:良好的程序内部文档,有规律的数据说明格式,简单清晰的语句构造和输入/输出格式等,都对提高程序的可读性可可维护性有很大的影响。,37,本 章 小 结,语言的演变,经历了机器语言、汇编语言、高级语言和4GL语言四代。高级语言的巨大进展,使汇编语言的应用领域日益缩小。现阶段的程序设计,主要是高级语言程序设计。不同语言具有不同特点,在选择编程语言时,程序员不仅要考虑到程序设计语言的特点,同时,还应考虑到系统的应用领域,用户的要求等一系列实际因素。,返回目录,