1、,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,单击此处编辑母版标题样式,1,做为软件工程过程的一个阶段,,程序编码是设计的继续,。,程序设计语言的特性和程序设计风格会深刻地影响软件的质量和可维护性。,为了保证程序编码的质量,程序员必须深刻理解、熟练掌握并正确地运用程序设计语言的特性。此外,还要求源程序具有良好的结构性和良好的程序设计风格。,2,6.1.1,程序设计语言的分类,大体上,程序设计语言分为以下几类:,(,1,)机器语言,(,2,)汇编语言,(,3,)高级语言,(,4,),4GL,由于高级语言种类繁多,我们可以从应用特点、语言内在特点和对客观系统的描述三个不同的角度来
2、对高级语言进行分类。,3,(,1,)基础语言(例:,FORTRAN,,,BASIC,,,COBOL,和,ALGOL,),(,2,)结构化语言(例:,ALGOL,,,PL/1,,,PASCAL,,,C,,,Ada,),(,3,)专用语言(例:,APL,,,LISP,,,PROLOG,,,BLISS,,,FORTH,),1,、从应用特点的角度来分,4,(,1,)系统实现语言(例:,C,语言),(,2,)静态高级语言(例:,FORTRAN,、,COBOL,),(,3,)块结构高级语言(例:,PASCAL,,,ALGOL,),(,4,)动态高级语言,2,、从语言内在特点的角度来分,5,(,2,)面向对
3、象语言,对象,+,消息,(,1,)面向过程语言,数据结构,+,算法,3,、从描述客观系统的角度来分,例:,Delphi,、,Visual Basic,、,JAVA,、,C+,。,6,6.1.2,程序设计语言的选择,为开发,一个特定项目,选择程序设计语言时,必须从技术特性、工程特性和心理特性几方面考虑。在选择语言时,从问题入手,确定它的要求是什么,以及这些要求的相对重要性。由于一种语言不可能同时满足它的各种需求,所以,要对各种要求进行权衡,,比较各种可用语言的适用程度,最后选择认为是最适用的语言。,7,1.,项目的应用领域,项目应用领域是选择语言的关键因素,有下列几种类型。,1),科学工程计算,
4、该计算需要大量的标准库函数,以便处理复杂的数值计算,可供选用的语言有:,8,(1)FORTRAN,语言:,是世界上第一个被正式推广应用的计算机语言,产生于,1954,年,经过,FORTRAN 0,到,FORTRAN,,又相继扩展为,FORTRAN 77,,,FORTRAN 90,,通过几个版本不断的更新,使它不仅面向科学计算,数据处理能力也极强。,(2)Pascal,语言:,产生于,60,年代末,具有很强的数据和过程结构化的能力,它是第一个体现结构化编程思想的语言,由于它语言简明、数据类型丰富、程序结构严谨,许多算法都用类,Pascal,来概括。用,Pascal,语言写程序,也有助于培养良好的
5、编程风格。,9,(3)C,语言:,产生于,70,年代初,最初用于描述,UNIX,操作系统及其上层软件,后来发展成具有很强功能的语言,支持复杂的数据结构,可大量运用指针,具有丰富灵活的操作运算符及数据处理操作符。此外还具有汇编语言的某些特性,使程序运行效率高。,(4)PL/1,语言:,是一个适用性非常广泛的语言,能够适用于多种不同的应用领域,但由于太庞大,难以推广使用,目前一些,PL/1,的子集被广泛使用。,10,2),数据处理与数据库应用,数据处理与数据库应用可供选用的语言如下:,(1)Cobol,语言:,产生于,50,年代末,是广泛用于商业数据处理的语言,它具有极强的数据定义能力,程序说明与
6、硬件环境说明分开,数据描述与算法描述分开,结构严谨层次分明,说明采用类英语的语法结构,可读性强。,11,(2)SQL,语言:,最初是为,IBM,公司开发的数据库查询语言,目前不同的软件开发公司有了不同的扩充版本,如,80,年代后期我国引入,Informix-SQL,Microsoft-SQL,可以方便地对数据库进行存取管理。,12,(3)4GL,语言:,称为第,4,代语言,随着信息系统的飞速发展,原来的第,2,代语言,(,如,FORTRAN,,,Cobol),第,3,代语言,(,如,Pascal,C,等,),受硬件和操作系统的局限,其开发工具不能满足新技术发展的需求,因此,在,70,年代末,提
7、出了第,4,代语言的概念,,4GL,的主要特征是:,13,友好的用户界面:,指操作简单,使非计算机专业人员也能方便地使用它。,兼有过程性和非过程性双重特性:,非过程性指语言的抽象层次又提高到一个新的高度,只需告诉计算机“做什么”,而不必描述“怎么做”,“怎么做”的工作由语言系统运用它的专门领域的知识来填充过程细节。,高效的程序代码:,指能缩短开发周期,并减少维护的代价。,完备的数据库:,指在,4GL,中实现数据库功能,不再把,DBMS(,数据库管理系统,),看成是语言以外的成分。,14,应用程序生成器:,能提供一些常用的程序来完成文件维护、屏幕管理、报表生成和查询等任务,从而有效提高软件生产率
8、。,目前流行的,Fox,公司的,FoxPro,Uniface,公司的,Uniface,Powersoft,公司的,Power Builder,Informix,公司的,Informix-4GL,以及各种扩充版本的,SQL,等都不同程度地具有上述特征。,15,3),实时处理,实时处理软件一般对性能的要求很高,可选用的语言有:,(1),汇编语言:,是面向机器的,它可以完成高级语言无法满足要求的特殊功能,如与外部设备之间的一些接口操作。,16,(2)Ada,语言:,是美国国防部出资开发的,主要用于适时、并发和嵌入系统的语言。,Ada,语言是在,Pascal,基础上开发出来的,但其功能更强、更复杂。它
9、提供了一组丰富的实时特性,包括多任务处理、中断处理、任务间同步与通信等,它还提供了许多程序包供程序员选择。通过修订,已成为安全、高效和灵活的面向对象的编程语言。,17,4),系统软件,如果编写操作系统、编译系统等系统软件时,可选用汇编语言、,C,语言、,Pascal,语言和,Ada,语言。,5),人工智能,如果要完成知识库系统、专家系统、决策支持系统、推理工程、语言识别、模式识别、机器人视角及自然语言处理等人工智能领域内的系统,应选择的语言如下:,18,(1)Lisp:,是一种函数型语言,产生于,60,年代初,它特别适用于组合问题中的符号运算和表处理,因此用于定理证明、树的搜索和其他问题的求解
10、。近年来,Lisp,广泛应用于专家系统的开发,对于定义知识库系统中的事实、规则和相应的推理相对要容易一些。,19,(2)Prolog:,是一种逻辑型语言,产生于,70,年代初,它提供了支持知识表示的特性,每一个程序由一组表示事实、规则和推理的子句组成,比较接近于自然语言,符合人的思维方式。,以上讨论的语言,一般适用于相应的应用领域,但要根据具体情况灵活掌握。有的语言功能强,适用的范围较广,但比较庞大。,20,2.,软件开发的方法,有时编程语言的选择依赖于开发的方法,,如果要用快速原型模型来开发,要求能快速实现原型,因此宜采用,4GL,。,如果是面向对象方法,宜采用面向对象的语言编程,。近年来,
11、推出了许多面向对象的语言,这里主要介绍以下几种:,21,(1)C+,:,是由美国,AT&T,公司的,Bell,实验室最先设计和实现的语言,它提供了面向对象类的定义、继承、封装和消息传递等概念实现的手段,又与,C,语言兼容,保留了,C,语言的许多特性,维护了大量已开发的,C,库、,C,工具以及,C,源程序的完整性,使编程人员不必放弃自己熟悉的,C,语言,只需补充学习,C+,提供的那些面向对象的概念,因而从,C,过渡到,C+,比较容易,加之它的运行性能较高,成为当今最受欢迎的对象语言之一,。,22,目前,除了常用的,AT&T C+,Turbo C+,Borland C+,及,Microsoft C
12、+,等版本外,又推出了,Microsoft Visual C+,充分发挥,Windows,和,Web,的功能。,23,(2)Java:,是由,Sun,公司开发的一种面向对象的、分布式的、安全的、高效的及易移植的语言,它的基本功能类似于,C+,,但做了重大修改,不再支持运算符重载、多继承及许多易于混淆和较少使用的特性,增加了内存空间自动垃圾收集的功能,使程序员不必考虑内存管理问题。,Java,应用程序可利用语言提供的例程库,能够自由地打开和访问网络上的对象。,24,3.,软件执行的环境,良好的编程环境不但有效提高软件生产率,同时能减少错误,有效提高软件质量。近几年推出了许多可视化的软件开发环境,
13、如,Visual BASIC,Visual C,Visual FoxPro,及,Delphi(,面向对象的,Pascal),等,都提供了强有力的调试工具,帮助你快速形成高质量的软件。,25,4.,算法和数据结构的复杂性,科学计算、实时处理和人工智能领域中的问题算法较复杂,而数据处理、数据库应用和系统软件领域内的问题,数据结构比较复杂,因此选择语言时可考虑是否有完成复杂算法的能力,或者有构造复杂数据结构的能力。,26,5.,软件开发人员的知识,有时编程语言的选择与软件开发人员的知识水平及心理因素有关,新的语言虽然有吸引力,但软件开发人员若熟悉某种语言,而且有类似项目的开发经验,往往愿选择原有的语
14、言。开发人员应仔细地分析软件项目的类型,敢于学习新知识,掌握新技术。,27,6.2,程序设计风格,随着计算机技术的发展,软件的规模增大了,软件的复杂性也增强了。为了保证软件的质量,要加强软件测试。为了延长软件的生存期,就要经常进行软件维护。不论测试与维护,都必须要阅读程序。因此,读程序是软件维护和开发过程中的一个重要组成部分。有时读程序的时间比写程序的时间还要多。,28,同样一个题目,为什么有人编的程序容易读懂,而有人编的程序不易读懂呢,?,这就存在一个程序设计的风格问题。程序设计风格指一个人编制程序时所表现出来的特点、习惯及逻辑思路等。良好的编程风格可以减少编码的错误,减少读程序的时间,从而
15、提高软件的开发效率。因此本节主要讨论与编程风格有关的因素。,29,1.,源程序文档化,编写源程序文档化的原则为:,(1),标识符应按意取名。,若是几个单词组成的标识符,每个单词第一个字母用大写,或者之间用下划线分开,这便于理解。如某个标识符取名为,rowofscreen,若写成,RowOfScreen,或,row-of-screen,就容易理解了。但名字也不是越长越好,太长了,书写与输入都易出错,必要时用缩写名字,但缩写规则要一致。,30,(2),程序应加注释。,注释是程序员与读者之间通信的重要工具,用自然语言或伪码描述。它说明了程序的功能,特别在维护阶段,对理解程序提供了明确指导。注释分序言
16、性注释和功能性注释。,31,序言性注释应置于每个模块起始部分,,主要内容有:,说明每个模块的用途、功能。,说明模块的接口即调用形式、参数描述及从属模块的清单。,数据描述:指重要数据的名称、用途、限制、约束及其他信息。,开发历史:指设计者、审阅者姓名及日期,修改说明及日期。,32,功能性注释嵌入在源程序内部,,说明程序段或语句的功能以及数据的状态。注意以下几点:,注释用来说明程序段,而不是每一行程序都要加注释。,使用空行或缩进或括号,以便很容易区分注释和程序。,修改程序也应修改注释。,33,2.,数据说明,为了使数据定义更易于理解维护,有以下指导原则:,(1),数据说明顺序应规范,,使数据的属性
17、更易于查找,从而有利于测试、纠错与维护。例如按常量说明、类型说明、全程量说明及局部量说明顺序。,(2),一个语句说明多个变量时,,各变量名按字典序排列。,(3),对于复杂的数据结构,,要加注释,说明在程序实现时的特点。,34,3.,语句构造,语句构造的原则为:简单直接,不能为了追求效率而使代码复杂化。为了便于阅读和理解,不要一行多个语句。不同层次的语句采用缩进形式,使程序的逻辑结构和功能特征更加清晰。要避免复杂的判定条件,避免多重的循环嵌套。表达式中使用括号以提高运算次序的清晰度等。,35,4.,输入和输出,在编写输入和输出程序时考虑以下原则:,(1),输入操作步骤和输入格式尽量简单。,(2)
18、,应检查输入数据的合法性、有效性,报告必要的输入状态信息及错误信息。,(3),输入一批数据时,使用数据或文件结束标志,而不要用计数来控制。,(4),交互式输入时,提供可用的选择和边界值。,36,(5),当程序设计语言有严格的格式要求时,应保持输入格式的一致性。,(6),输出数据表格化、图形化。,输入、输出风格还受其他因素的影响,如输入、输出设备,用户经验及通信环境等。,37,5.,效率,效率指处理机时间和存储空间的使用,对效率的追求明确以下几点:,(,1),效率是一个性能要求,目标在需求分析给出。,(2),追求效率建立在不损害程序可读性或可靠性基础之上,要先使程序正确,再提高程序效率;先使程序
19、清晰,再提高程序效率。,38,(3),提高程序效率的根本途径在于选择良好的设计方法、良好的数据结构与算法,而不是靠编程时对程序语句做调整。总之,在编码阶段,要善于积累编程经验,培养和学习良好的编程风格,使编出的程序清晰易懂,易于测试与维护,从而提高软件的质量。,39,程序实际上也是一种供人阅读的文章,有一个,文章的风格,问题。应该使程序具有良好的风格,详细说明以下内容:,1,源程序文档化,2,数据说明,3,语句结构,4,输入输出方法,40,1,源程序文档化,标识符的命名,安排注释,程序的视觉组织,41,符号名的命名,符号名即标识符,包括,模块名、变量名、常量名、标号名、子程序名、数据区名以及缓
20、冲区名,等。,这些名字应能反映它所代表的实际东西,,应有一定实际意义,。,例如,表示次数的量用,Times,,表示总量的用,Total,,表示平均值的用,Average,,表示和的量用,Sum,等。,42,名字不是越长越好,,应当选择精炼的意义明确的名字。,必要时可使用缩写名字,,但这时要注意缩写规则要一致,并且要,给每一个名字加注释,。同时,在一个程序中,一个变量只应用于一种用途。,NEW.BALANCE.ACCOUNTS.PAYABLE,NBALAP,N,43,程序的注释,夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。,注释决不是可有可无的。,一些正规的程序文本中,注释行的数
21、量占到整个源程序的,1,3,到,1,2,,甚至更多。,注释分为序言性注释和功能性注释。,44,序言性注释,通常置于每个程序模块的开头部分,,它应当给出程序的整体说明,,对于理解程序本身具有引导作用。有些软件开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出。,有关项目包括:,程序标题,;,45,有关本模块,功能和目的的说明,;,主要算法,;,接口说明,:包括调用形式,参数描述,子程序清单;,有关数据描述,:重要的变量及其用途,约束或限制条件,以及其它有关信息;,模块位置,:在哪一个源文件中,或隶属于哪一个软件包;,开发简历,:模块设计者,复审者,复审日期,修改日期及有关说明等。,
22、46,功能性注释,功能性注释嵌在源程序体中,用以描述其后的语句或程序段是在做什么工作,或是执行了下面的语句会怎么样。而不要解释下面怎么做。,例如,,/*ADD AMOUNT TO TOTAL*/TOTAL=AMOUNT,TOTAL,不好。,47,如果注明把月销售额计入年度总额,便使读者理解了下面语句的意图:,/*ADD MONTHLY-SALES TO ANNUAL-TOTAL*/TOTAL=AMOUNT,TOTAL,要点,描述一段程序,而不是每一个语句;,用缩进和空行,使程序与注释容易区别;,注释要正确。,48,视觉组织 空格、空行和移行,恰当地利用,空格,,可以,突出运算的优先性,,避免发
23、生运算的错误。,例如,将表达式,(,A,17),ANDNOT,(,B,49),ORC,写成,(,A,17),AND NOT,(,B,49),OR C,自然的程序段之间可用,空行,隔开;,49,移行,也叫做,向右缩格,。它是指程序中的各行不必都在左端对齐,都从第一格起排列。这样做使程序完全分不清层次关系。,对于,选择语句,和,循环语句,,把其中的程序段语句向右做,阶梯式移行,。使程序的逻辑结构更加清晰。,例如,两重选择结构嵌套,写成下面的移行形式,层次就清楚得多。,50,IF,(,),THEN IF,(,),THEN ELSE ENDIF ELSE ENDIF,51,数据说明,在设计阶段已经确定
24、了数据结构的组织及其复杂性。在编写程序时,则需要注意数据说明的风格。,为了使程序中数据说明更易于理解和维护,必须注意以下几点。,1.,数据说明的次序应当规范化,2.,说明语句中变量安排有序化,3.,使用注释说明复杂数据结构,52,数据说明的次序应当规范化,数据说明次序规范化,使数据属性容易查找,也有利于测试,排错和维护。,原则上,数据说明的次序与语法无关,其次序是任意的。但出于阅读、理解和维护的需要,最好使其规范化,使说明的先后次序固定。,53,例如,在,FORTRAN,程序中数据说明次序,常量说明,简单变量类型说明,数组说明,公用数据块说明,所有的文件说明,在类型说明中还可进一步要求。例如,
25、,可按如下顺序排列:,整型量说明,实型量说明,字符量说明,逻辑量说明,54,说明语句中变量安排有序化,当,多个变量名在一个说明语句中说明,时,应当对这些变量,按字母的顺序排列,。带标号的全程数据,(,如,FORTRAN,的公用块,),也应当按字母的顺序排列。,例如,把,integer,size,length,width,cost,price,写成,integer,cost,length,price,size,width,55,使用注释说明复杂数据结构,如果设计了一个复杂的数据结构,应当使用注释来说明在程序实现时这个数据结构的固有特点。,例如,对,PL,/1,的链表结构和,Pascal,中用户自
26、定义的数据类型,都应当在注释中做必要的补充说明。,56,语句结构,在设计阶段确定了软件的逻辑流结构,但构造单个语句则是编码阶段的任务。语句构造力求简单,直接,不能为了片面追求效率而使语句复杂化。,57,1.,在一行内只写一条语句,在一行内只写一条语句,并且采取适当的移行格式,使程序的逻辑和功能变得更加明确。,许多程序设计语言允许,在一行内写多个语句,。但这种方式,会使程序可读性变差,。因而不可取。,58,例如,有一段排序程序,FOR I:=1 TO N,1 DO BEGIN T:=I,;,FOR J:=I,1 TO N DO IF AJ,AT THEN T:=J,;,IF TI THEN BE
27、GIN WORK:=AT,;,AT:=AI,;,AI:=WORK,;,END END,;,由于一行中包括了多个语句,掩盖了程序的循环结构和条件结构,使其可读性变得很差。,59,FOR I:=1 TO N,-,1 DO /,改进布局,BEGIN T:=I;FOR J:=I1 TO N DO IF AJAT THEN T:=J;IF TI THEN BEGIN WORK:=AT;AT:=AI;AI:=WORK;END END;,60,2.,程序编写首先应当考虑清晰性,程序编写首先应当考虑清晰性,不要刻意追求技巧性,使程序编写得过于紧凑。,例如,有一个用,C,语句写出的程序段:,AI=AI,AT,;
28、,AT=AI,AT,;,AI=AI,AT,;,61,此段程序可能不易看懂,有时还需用实际数据试验一下。,实际上,这段程序的功能就是交换,AI,和,AT,中的内容。目的是为了节省一个工作单元。如果改一下:,WORK=AT,;,AT=AI,;,AI=WORK,;,就能让读者一目了然了。,62,3.,程序要能直截了当地说明程序员的用意。,程序编写得要简单,写清楚,直截了当地说明程序员的用意。例如,,for(,i,=1;,i,=,n,;,i,+)for(,j,=1;,j,=,n,;,j,+),V,i,j,(,i,j,)*(,j,i,),除法运算()在除数和被除数都是整型量时,其结果只取整数部分,而得到
29、整型量。,63,当,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,是一个单位矩阵。,64,写成以下的形式,就能让读者直接了解程序编写者的意图。,for(,i,1;,i,=,n,;,i,+)for(,j,1;,j,=,n,;,j,+)if(,i=j,),V,i,j,1.0;ELSE,V,i,j,0.0;,65,66,4.,除非对效率有特殊的要求,程序编写要做到清晰第一,效率第二。,不要为了追求效率而丧失了清晰性。事实
30、上,程序效率的提高主要应通过选择高效的算法来实现。,5.,首先要保证程序正确,然后才要求提高速度。,反过来说,在使程序高速运行时,首先要保证它是正确的,。,67,6.,避免使用临时变量而使可读性下降。,例如,有的程序员为了追求效率,往往喜欢把表达式,AI,1,AI;,写成,AI,AI;,X,AI,1,AI;,这样将一句分成两句写,会产生意想不到的问题。,68,7.,让编译程序做简单的优化。,8.,尽可能使用库函数,9.,避免不必要的转移。,同时如果能保持程序可读性,则不必用,GO TO,语句。,例如,有一个求三个数中最小值的程序:,69,IF(X,Y)GOTO 30 IF(Y,Z)GOTO 5
31、0 SMALL,Z,GOTO 70,30 IF(X,Z,),GOTO 60 SMALL,Z,GOTO 70,50 SMALL,Y,GOTO 70,60 SMALL,X,70 CONTINUE,70,程序只需编写成:,small,x,;if(,y,small,),small,y,;if(,z,=,a,)if(,char,=,z,)cout “This is a letter,。”,;else cout=0&char=9),不要让读者绕弯子想。,73,14.,尽可能用通俗易懂的伪码来描述程序的流程,然后再翻译成必须使用的语言。,15.,数据结构要有利于程序的简化。,16.,要模块化,使模块功能尽可
32、能单一化,模块间的耦合能够清晰可见。,17.,利用信息隐蔽,确保每一个模块的独立性。,74,18.,从数据出发去构造程序。,19.,不要修补不好的程序,要重新编写。也不要一味地追求代码的复用,要重新组织。,20.,对太大的程序,要分块编写、测试,然后再集成。,21.,对递归定义的数据结构尽量使用递归过程。,75,输入和输出,输入和输出信息是与用户的使用直接相关的。输入和输出的方式和格式应当尽可能方便用户的使用。一定要避免因设计不当给用户带来的麻烦。,因此,在软件需求分析阶段和设计阶段,就应基本确定输入和输出的风格。系统能否被用户接受,有时就取决于输入和输出的风格。,76,不论是,批处理的输入输
33、出方式,,还是,交互式的输入输出方式,,在设计和编码时都应考虑下列原则:,1.,对所有的输入数据都要进行检验,识别错误的输入,以保证每个数据的有效性;,2.,检查输入项的各种重要组合的合理性,必要时报告输入状态信息;,3.,使得输入的步骤和操作尽可能简单,并保持简单的输入格式;,77,4.,输入数据时,应允许使用自由格式输入;,5.,应允许缺省值;,6.,输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目;,7.,在交互式输入输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明可使用选择项的种类和取值范围。同时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息;,7
34、8,8.,当程序设计语言对输入输出格式有严格要求时,应保持输入格式与输入语句的要求的一致性;,9.,给所有的输出加注解,并设计输出报表格式。输入输出风格还受到许多其它因素的影响。如输入输出设备(例如终端的类型,图形设备,数字化转换设备等)、用户的熟练程度、以及通信环境等。,79,6.3,结构化程序设计,结构化程序设计主要包括两方面:,在编写程序时,强调,使用几种基本控制结构,,通过组合嵌套,形成程序的控制结构。尽可能避免使用,GOTO,语句。,在程序设计过程中,尽量采用自顶向下和逐步细化的原则,,由粗到细,一步步展开,。,80,结构化程序设计的主要原则,使用语言中的,顺序、选择、重复,等有限的
35、基本控制结构表示程序逻辑。,选用的控制结构只准许有,一个入口和一个出口,。,程序语句组成,容易识别的块,,每块只有,一个入口和一个出口,。,复杂结构应该用基本控制结构进行组合嵌套来实现。,81,语言中没有的控制结构,可用一段等价的程序段模拟,但要求该程序段在整个系统中应前后一致。,严格控制,GOTO,语句,,仅在下列情形才可使用:用一个非结构化的程序设计语言去实现一个结构化的构造。若不使用,GOTO,语句就会使程序功能模糊。在某种可以改善而不是损害程序可读性的情况下。,82,例,1,打印,A,B,C,三数中最小者程序,83,程序,1,if(,A,B,),goto 120,;,if(,B,C,)
36、goto 110,;,100 write(,C,),;,goto 140,;,110 write(,B,),;,goto 140,;,120 if(,A,C,)goto 130,;,goto 100,;,130 write(,A,),;,140 end,84,程序,2,if(,A,B,)and(,A C,)then,write(,A,)else,if(,A,B,)and(,B,C,)then write(,B,)else write(,C,),endif,endif,85,自顶向下,逐步求精,在详细设计和编码阶段,应当采取自顶向下,逐步求精的方法。,把一个模块的功能逐步分解,细化为一系列具体的
37、步骤,进而翻译成一系列用某种程序设计语言写成的程序。,86,自顶向下,逐步求精方法的优点,符合人们解决复杂问题的普遍规律。可提高软件开发的成功率和生产率,用先全局后局部,先整体后细节,先抽象后具体的逐步求精的过程开发出来的程序具有清晰的层次结构,程序容易阅读和理解,87,程序自顶向下,逐步细化,分解成一个树形结构。在同一层的节点上的细化工作相互独立。有利于编码、测试和集成,每一步工作仅在上层节点的基础上做不多的设计扩展,便于检查,有利于设计的分工和组织工作。,88,为了提高编码的,效率,,保证程序的,可靠性,,我们经常使用一些编码工具。,首先要用的当然是,编辑,工具了。选用合适的编辑工具可以大
38、大方便编程,提高效率。,编译,程序的好坏也会影响编码的效率。一方面,好的编译程序应该是程序员的好助手,能够帮助程序员及时准确地诊断出程序中的差错,减少程序开发的成本。另一方面,编译程序还应该能够生成高效率的机器代码,也就是代码,优化,。,6.4,编码工具,89,现在的软件系统往往是集体开发,一个大的软件系统往往包含许多,模块,,这些不同的模块可能分散在几个,不同的文件或库,里。为了得到最终的,可执行代码,,必须先将各个模块进行分别,编译,,然后再进行,连接,。,由于模块的数量很多,而且这些模块往往都是相互影响和制约的,如果某个模块的源代码改变了,那么受此模块影响的所有其它模块都必须进行再编译、再连接。我们可以借助一些工具来完成这项工作。如,UNIX,的,MAKE,工具。,90,利用,MAKE,程序能保持模块间的协调关系。程序员将程序不同模块之间的依赖关系以及更新模块时必须进行的操作告诉,MAKE,程序,这样,,MAKE,程序就能够自动检索出那些“过时”了的,需要进行再编译的模块,并对所发现的过时模块执行说明信息中规定的更新操作,从而使目标文件永远保持最新的版本。,