新版第4章计算机程序设计与语言_第1页
新版第4章计算机程序设计与语言_第2页
新版第4章计算机程序设计与语言_第3页
新版第4章计算机程序设计与语言_第4页
新版第4章计算机程序设计与语言_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章计算机程序设计与语言程序设计的基本概念模型的建立、算法的设计和表达程序的编写、测试和维护程序文档的建立程序设计语言的应用4.1概述4.1.1计算机程序4.1.2程序设计语言4.1.3程序设计步骤4.1.1计算机程序程序是计算机执行任何操作的驱动力,是计算机为完成某一任务所必须执行的一系列指令。没有程序,计算机就像原地待命的士兵,什么也不会做。从存储的角度来看,程序就是保存在磁盘上的指令序列。除了少量特殊程序外,程序在没有启动时大多以文件的形式存储在磁盘等外存储器上。4.1.2程序设计语言计算机语言是人与计算机之间传递信息的媒介。为了使计算机进行各种工作,必须将人们的意图用计算机语言告诉计算机。电脑做的每个动作、执行的每个步骤,都是按照用计算机语言编好的程序来执行的,所以,要控制计算机就必须通过计算机语言向计算机发出命令。自从有了计算机,计算机程序设计语言就出现了,人们针对不同的应用领域开发出了上千种编程语言。4.1.2程序设计语言计算机语言的发展经历了机器语言、汇编语言和高级语言三个阶段。机器语言是计算机能直接执行的二进制形式的语言。汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。高级语言更接近自然语言和数学语言,和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,如使用堆栈、寄存器等,这样就大大简化了程序中的指令,使程序员可以离开机器层次,在更抽象的层次上表达意图,以接近问题本质的方式去思考和描述问题。4.1.2程序设计语言高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行。高级语言并不是特指某种具体的语言,而是包括了很多种编程语言,如目前流行的VB、C++、Java、Perl等,这些语言的语法、命令格式都各不相同。高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到面向对象程序设计语言的过程。相应地,软件的开发也由最初的个体手工作坊式的生产,发展为产业化、流水线式的工业化生产。高级语言的下一个发展目标是面向应用,只需要告诉程序你要干什么,程序就能自动生成算法,自动进行处理,也就是智能化的程序设计语言。4.1.3程序设计步骤(1)建立模型:从实际问题抽象出数学模型,即由物理模型到抽象模型,用形式化方法描述现实世界。(2)算法设计:给出解决问题的方法和步骤,即算法。同一个问题可以有不同的解决办法,从中选取一种最合适的。(3)算法表达:选择一种或几种表达算法的工具,对算法进行清晰的表达。(4)编写程序:选择程序设计语言,把算法程序化。(5)程序测试和调试:对编写好的程序进行测试,修改程序中的错误。(6)程序文档编写与程序维护:整理和编写程序文档,以便更好地维护程序。鸡兔同笼问题鸡兔同笼,看头36个,看脚96只,问笼中有鸡和兔各几只?4.2模型与算法4.2.1建立模型4.2.2算法设计4.2.3算法表达4.2.1建立模型模型是对现实系统的一种描述,是对现实系统的抽象和简化。模型由现实系统的有关元素组成,能够反映这些元素之间的关系,从而反映现实系统的本质。模型分为物理模型和数学模型两大类。物理模型由物理元素构成,又称为形象模型。数学模型由关系、函数等数学对象符号组成,又称为逻辑模型或抽象模型。4.2.1建立模型物理模型的建立:对客观存在的事物进行形象的描述,列出已知的所有物理元素及其关系,明确需要解决的问题。物理模型中应该忽略对解决问题没有意义的客观事实,如鸡、兔的大小,笼子的大小等。数学模型的建立:在物理模型的基础上,忽略不重要的细节(如在一个笼子里这个事实与要解决的问题无关),抓住本质性的元素,对其符号化后,再用数学的方法描述出来。4.2.1建立模型模型是对现实系统的一种描述,是对现实系统的抽象和简化。模型由现实系统的有关元素组成,能够反映这些元素之间的关系,从而反映现实系统的本质。模型分为物理模型和数学模型两大类。物理模型由物理元素构成,又称为形象模型。数学模型由关系、函数等数学对象符号组成,又称为逻辑模型或抽象模型。鸡兔同笼问题的物理模型鸡、兔放在同一笼子里,头有36个,脚有96只,要计算出有鸡和兔子各多少只。当然,要解决这个问题还要用到大家已熟知的事实:每只鸡是1个头2只脚,每只兔子是1个头4只脚。鸡兔同笼问题的数学模型对以上例子,设鸡为x只,兔子为y只,则有:4.2.2算法设计算法是解决问题的方法和步骤。若待解决的问题比较复杂,可能需要将问题进行分解,即将复杂问题分解为简单问题的集合。简单问题对应的算法较简单,设计起来也就比较容易。这里讲的算法设计,涉及程序功能的设计和数据结构的设计等。鸡兔同笼问题的算法设计鸡兔同笼问题实际上是求二元一次方程组的解的问题,可以用加减消元法解决。考虑到算法的通用性,我们可以对一般二元一次方程组求解。鸡兔同笼问题的算法设计若a1b2-a2b1≠0,方程组有唯一解。用加减消元法求得鸡兔同笼问题的算法设计(1)输入系数a1,b1,c1,a2,b2,c2;(2)计算d=a1b2-a2b1;(3)如果d=0,打印“方程组无解或有无穷组解”,转(7);(4)计算x=(c1b2-c2b1)/d;(5)计算y=(a1c2-a2c1)/d;(6)输出x,y;(7)输入是否继续解其他方程组的标记s(s=“Y”或s=“N”);(8)如果s=“Y”,转(1);(9)结束。算法的评价对于同一个问题,可能有若干种不同的算法来解决。对于算法评价的基本的标准有两个:时间标准(时间复杂度),简单说来,即执行这个算法需要多少时间,基本的原则是时间越短越好。对于同样的问题,如果用算法A和B分别进行处理,结果算法A所用的时间更短,那么就认为算法A更好一些。空间标准(空间复杂度),即执行这个算法需要占用多少资源(可以理解为占用了多少计算机存储单元),基本的原则是占用的资源越少越好。对于同样的问题,如果用算法A和B分别进行处理,结果算法A占用的资源更少,那么就认为算法A更好一些。算法的评价随着计算机技术的发展,硬件性能不断提高,程序的规模越来越庞大,算法的清晰程度变成了一个非常重要的问题。对于一个比较复杂的问题来说,如果所给出的算法让人无法读懂,那么它也不能算是一个好的算法,因为按照这样的算法所编制出来的程序非常难以维护。因此,算法的易懂性也是衡量算法好坏的一个重要指标。算法的评价设计算法时,还要注意以下几点:通用性。一个算法总是针对某类问题设计的,所以对于求解某类问题中的任何一个问题应该是有效的。例如,上面给出的解二元一次方程组的算法就有一定的通用性。确定性。算法中的每个步骤都是确定的,在什么情况下做什么也非常明确,没有含糊不清的地方。有限性。一个算法在执行时,必须经过有限步后停下来,结束算法执行,给出结果,而不能无限地执行下去。尽管这里所说的有限步可能是几十步或者几百步,也可能是几万步或者几亿步,但它仍然是有限步(严格说来,这里所说的“有限”只是说明了它和“无限”的区别。在实际工作中还有一个更严格的限制,即实际工作所要求的时间的限制。算法和根据算法所编制的程序,必须在实际工作所规定的时间内给出相应的运算结果)。4.2.3算法表达为了提高算法表达的清晰程度,需要选择一种合适的描述算法的工具。常用的描述工具有流程图、N-S图、PAD图和伪码等。这些工具不是程序设计语言,不能直接被计算机执行,使用它们的目的就是把算法表述出来。流程图流程图(也称为程序流程图)是最常用的一种算法表示方法,它是描述计算机按一定步骤完成任务的图表,能直观地描述程序执行的控制流程。流程图中方框表示“处理”,所有处理步骤都可以用这个符号表示;菱形框表示“判断”,需要对逻辑条件进行判断并选择下一步执行的路线时用这个符号表示;圆角矩形框表示“开始”和“结束”;平行四边形框表示“输入”和“输出”;有向线段表示“控制流”。鸡兔同笼问题的流程图伪码伪码表示法相当于算法的注释系统,由编程语言和自然语言混合而成。伪码的语法通常沿用某种高级编程语言的语法规则,如关键字、控制结构等。另外,在描述程序的处理功能时使用自然语言的语句。所以伪码表示法是一种类高级编程语言,但它含有大量的自然语言的语句,计算机并不能执行。用自然语言描述处理功能,易读易写,不必考虑语法规定,有利于设计人员把精力放在描述算法的逻辑上。鸡兔同笼问题的伪码表示PROCEDURE求解二元一次方程组

TYPEa1,b1,c1,a2,b2,c2,x,yISREALTYPEsISCHARDOWHILETRUE/*输入方程组系数

READa1,b1,c1,a2,b2,c2d=a1*b2-a2*b1IFd=0THENWRITE'方程组无解或有无穷组解'ELSE/*求方程组的唯一解并输出

BEGINx= (c1*b2-c2*b1) /dy= (a1*c2-a2*c1) /dWRITEx,yENDENDIF/*控制循环是否结束

INPUT'若继续循环输入Y,否则输入N'TOsREADSIFs≠'Y'THENEXITENDIFENDDOEND4.3程序设计实现4.3.1程序举例4.3.2编写程序4.3.1程序举例鸡兔同笼问题的VFP程序实现DOWHILE.T.CLEAR&&清屏

?'输入方程组的系数'INPUT'a1='TOa1INPUT'b1='TOb1INPUT'c1='TOc1INPUT'a2='TOa2INPUT'b2='TOb2INPUT'c2='TOc2d=a1*b2-a2*b1IFd=0?'方程组无解或有无穷组解'ELSE*求方程组的唯一解并输出

x= (c1*b2-c2*b1) /dy= (a1*c2-a2*c1) /d

?' 鸡为 ',x,' 只 ',' 兔为 ',y,' 只 'ENDIF*控制循环是否结束

INPUT'若继续循环输入Y,否则输入N'TOsIFupper (s) ≠'Y'EXITENDIFENDDORETURN4.3.2编写程序程序的编写就是用程序设计语言实现算法的过程。程序编写人员应该根据算法的要求,选择一种程序设计语言对算法进行编码。对程序设计语言,必须要深刻地理解,熟练地掌握,正确地运用,这样才能编出高质量的程序代码。4.3.2编写程序编写程序的基本要求:首先是保证语法的正确性。只有语法正确的程序才能通过编译系统的语法检查。其次是保证语义的正确性,也就是通过运行程序,得到需要的正确结果。但这一点对一个复杂的程序来说并不容易,通常需要经过程序测试和修改才能达到。4.3.2编写程序只做到以上两点还称不上高质量的程序代码,高质量的程序还应体现在以下四个方面:可靠性高、运行速度快、占用存储空间小和易懂性。通常这四个方面不能同时满足,要根据具体情况权衡利弊。4.3.2编写程序在计算机速度越来越快,内存越来越大的今天,程序的易懂性显得更为重要。这是因为一个程序除了能在计算机上运行外,还要求人能够看懂。只有看懂程序,才能对程序中出现的问题进行修改,才能根据需要扩充其功能和改善其性能。4.3.2编写程序编写容易读懂的程序代码,要求程序有良好的结构性和程序设计风格。所谓程序有良好的结构性是指程序仅由三种基本的控制结构构造出来。顺序控制结构选择控制结构重复控制结构所谓良好的程序设计风格,是要求编写的程序清晰明了,容易被人理解。顺序控制结构顺序控制结构含有多个连续的步骤,如右图所示。在此控制结构中的A和B是顺序执行的。顺序控制结构是最简单的一种基本结构。选择控制结构选择控制结构也称为分支结构,计算机根据所列条件选择执行路径,如右图所示。在此控制结构中有一个判断框,它只能有两个分支,根据条件P是否满足而分别执行A或B。重复控制结构重复控制结构又称循环结构,可以重复执行一条或多条指令,直到满足退出条件。重复控制结构主要有以下两种:当型(WHILEDO型)循环结构 直到型(UNTIL型)循环结构当型(WHILEDO型)循环结构当条件P满足时,反复执行A。一旦条件P不满足就不再执行A,而执行它下面的操作。如果在开始时条件P就不满足,则A一次也不执行。直到型(UNTIL型)循环结构先执行A,然后判断条件P是否满足,如条件P不满足,则反复执行A,直到某一时刻,条件P满足则停止循环,执行下面的操作。可以看到,不论条件P是否满足,至少执行一次A。这三种基本控制结构的共同特点(1)只有一个入口,如图4-2至图4-5中的a点。(2)只有一个出口,如图4-2至图4-5中的b点。(3)结构内的每一部分都有机会被执行到。(4)结构内没有死循环(无终止的循环)。尽管在表达形式上不完全一样,但各种编程语言都提供了对三种基本控制结构的支持。不满足基本要求的两种情况B永远执行不到死循环良好的程序设计风格1)文档化(documentation)要有效、适当地使用注释。注释语句是每种程序设计语言都要提供的语句。注释语句对程序的执行结果没有影响,是用来帮助读程序的人理解程序的。一些规范的程序中,注释行的数量占到整个源程序的1/3到1/2,甚至更多。在程序的开头可以添加对程序整体进行说明的注释;在程序模块(如子程序、函数、过程等)前添加解释该模块作用的注释;在较难理解的语句前添加解释该语句的注释。要使用含义明确的符号名。符号名包括子程序名、函数名、变量名、常量名等。这些名字应能反映它所代表的实际东西,有实际意义,使其能见名知意。例如,表示总量用Total,表示平均值用Average,表示和用Sum,等等。良好的程序设计风格2)格式化(layout)尽量使程序布局合理、清晰、明了。一个程序如果写得太密,没有留出空白,往往是很难读懂的。恰当地利用空格、空行和缩进可使程序清晰明了。自然程序段之间用空行分开。缩进也称为向右缩格或移行。程序中的各行不必左对齐,因为这样做的话程序的层次关系就分不清了。对于选择语句和循环语句,应该把其中的程序段语句向右做阶梯式移行。格式化可使程序的逻辑结构更加清晰,层次更加分明。良好的程序设计风格3)模块化(modularization)把复杂的程序分解为功能独立的程序模块,每一个程序模块只完成一个独立的功能,尽量减少模块之间的联系。这样,当我们读一个复杂的程序时,只要分别去读懂各个简单的功能模块即可。4.4程序的测试、调试与维护4.4.1程序测试4.4.2程序调试4.4.3程序维护4.4.1程序测试程序测试是为了发现程序错误而执行程序的过程。测试时需要选择测试数据作为输入,运行程序后看是否会输出预期的结果。如果没有产生正确的结果,则程序员必须查找并修改程序中的错误,然后再测试修改后的程序,可能要经过多次反复,才能得出正确的结果。4.4.1程序测试对于一组测试数据,即使程序产生了正确的结果,也还不能立即断定程序是正确的,因为还不能保证输入其他的数据时,程序会产生正确结果。但是这个“所有可能的数据”集合一般是非常大的,可能是几十亿个数据甚至更多,都测试一遍是不现实的,所以要求我们根据某些原则选择有代表性的测试数据进行测试,以相对较少的测试次数发现程序中的错误黑盒测试法把程序看成一个“黑盒子”,测试人员完全不考虑程序的内部结构和处理过程,只考虑程序的功能,通过选择一些测试数据,看程序的功能是否都已实现。黑盒测试的测试数据选择(鸡兔同笼问题)把输入的二元一次方程组的系数分为以下四类,每一类设计一个测试用例。合理的系数:(1)方程组有唯一解:a1=1,b1=1,c1=1,a2=0,b2=1,c2=2(2)方程组无解:a1=1,b1=1,c1=1,a2=1,b2=1,c2=2(3)方程组有无穷组解:a1=1,b1=1,c1=1,a2=2,b2=2,c2=2不合理的系数:(4)输入的不全是数值:a1="a",b1=5,c1=0,a2=6,b2=8,c2=7选择合理的输入数据验证程序的功能、性能是否符合设计的要求。选择不合理的输入数据对程序进行测试也非常重要,这是对程序可靠性的考验。白测试的测试数据选择(鸡兔同笼问题)

为了让程序中的每条语句至少执行一次,使每个判断条件取一次“真”或取一次“假”,选择如下测试用例:(1)d=0,s=“Y”:a1=1,b1=1,c1=1,a2=2,b2=2,c2=2,s=“Y”(2)d≠0,s=“N”:a1=1,b1=0,c1=1,a2=0,b2=1,c2=2,s=“N”这两个例子测试后,使得程序中的每条语句至少执行了一次,每个判断条件分别取了一次“真”和一次“假”。测试的步骤一个复杂的程序往往由若干个子程序模块组成,要保证程序整体的正确性,不仅需要各个模块是正确的,还要求各模块之间的接口是正确的。测试工作要制定出测试规划,包括测试的步骤、范围、进度和所用的资源(硬件、软件)等。测试工作先对每个模块进行测试,一般采用白盒测试法保证每个程序模块内部的正确性,然后再把测试后的模块组装在一起进行整体测试,主要测试各模块是否能正常配合工作,方法多采用黑盒测试法。对模块的接口进行测试,适当辅以白盒测试法,以便对主要执行路径进行测试。

4.4.2程序调试调试的任务是进一步诊断和改正程序中的错误(一般是测试时发现的错误),它是在完成了测试之后进行的。调试活动首先确定程序中可疑错误的确切性质和位置,然后对程序(设计、编码)进行修改,排除错误。调试工作是一个具有很强技巧性的工作。软件运行失效或出现问题,往往只是潜在错误的外部表现,而外部表现与内在原因之间常常没有明显的联系,要找出真正的原因,排除潜在的错误,不是一件易事。可以说,调试是通过现象找出原因的分析过程。

调试步骤(1)对测试发现的错误现象进行分析,确定程序中的出错位置;(2)研究有关部分的程序,找出错误的内在原因(有的错误不一定是编码错误,可能是设计错误);(3)修改设计或代码,以排除这个错误;(4)重复进行暴露了这个错误的原始测试和其他有关测试。

调试步骤当在程序中发现一个错误时,它可能是语法错误,也可能是语义错误。语法错误是由于指令没有按照程序设计语言的语法规则编写所致。例如,要打印一个消息时,需要使用PRINT命令字。命令IFAGE=16THEN"Youcandrive."将产生语法错误,因为少了命令字PRINT。正确的写法是IFAGE=16THENPRINT"Youcandrive."。在编译执行的系统中,编译时就能检查出语法错误。在解释执行的系统中,执行到语法错误的语句时输出错误信息。语法错误是比较容易发现和纠正的。语义错误是编写的程序虽然能运行,但不能输出正确的结果。出错的原因可能是多方面的,模型的建立、算法的设计和表达、编码各个过程都可能出错,语义错误比语法错误更难检查、修改。例如,把IFA>=100THENPRINTA中的“>”写成了“<”,就属于语义方面的错误。

4.4.3程序维护通常把程序的修改称为程序维护。程序维护一般有三种类型改正性维护在程序测试时,有的错误没被发现,交付使用后,程序中某些错误暴露出来,此时就要对程序进行改正性维护。适应性维护假如程序运行的外在环境(硬件配置和软件配置等)发生了变化,为了使程序适应这种环境变化而修改程序的过程叫适应性维护。完善性维护在程序使用的过程中,用户往往会对程序提出增加新功能或改善性能的要求,这就需要修改程序,使程序更加完善,这个过程称为完善性维护。

4.4.3程序维护程序维护在软件生命周期中占相当重要的地位,大约75%的费用都产生在程序维护阶段。不管对程序进行哪种维护,都需要维护人员熟悉程序的工作过程和使用方法,读懂原有的程序。修改程序的人员往往不是编写程序的人员,有时候时间久了就是编写程序的本人也记不清当时是怎样编写程序的。因此,为了能顺利地进行维护,必须建立详尽的程序文档。程序文档解释了程序的工作过程及使用方法。创建的文档为修改程序或使用程序提供帮助。

程序文档程序文档有两种形式:插入到程序代码中的注释和专门制作的文档。注释是插入到计算机程序代码行中的解释性注解,它能为改写程序的人阅读程序、理解程序提供帮助。专门制作的文档不属于程序,它包含的是一些对程序员和用户都有用的关于程序的信息。对程序员有用的文档为程序手册,对用户有用的文档为用户参考手册。程序手册中包含问题描述、数学模型、算法及算法表达、程序代码、测试程序的过程和记录等,它是程序开发和维护的重要资料。用户参考手册中包含对程序的功能说明,操作程序的方法、步骤、故障分析与排除等,它是帮助用户学会使用软件的重要资料。用户参考手册还有电子版和在线帮助等形式。4.5程序设计语言应用4.5.1程序设计语言的分类与选择4.5.2软件开发工具4.5.3VB程序设计语言4.5.1程序设计语言的分类与选择通常根据程序设计语言发展的历程将其划分为四代。1)机器语言—第一代语言2)汇编语言—第二代语言3)高级程序设计语言—第三代语言4)智能语言—第四代语言4.5.1程序设计语言的分类与选择1)机器语言—第一代语言机器语言是计算机能直接执行的二进制形式的低级语言。它是由机器指令组成的语言,不同的机器有不同的机器语言。机器语言对人来说既难理解又难掌握,编出的程序不易查错纠错。计算机刚出现时用的就是机器语言。4.5.1程序设计语言的分类与选择2)汇编语言—第二代语言汇编语言比机器语言直观,它的每一条符号指令与相应的机器指令有对应关系,同时又增加了一些宏、符号地址等功能。存储空间的安排可由机器解决,减少了程序员的工作量,也降低了出错率。由于用汇编语言可以直接操纵处理器、寄存器和内存地址等硬件资源,这对于编写设备驱动程序、编译程序和操作系统等系统软件非常有用。不同指令集的处理器系统有自己相应的汇编语言。如微机上常用的Microsoft的汇编语言MASM。汇编语言相对来讲还是比较晦涩,所以也被列为低级语言。4.5.1程序设计语言的分类与选择

3)高级程序设计语言—第三代语言高级程序设计语言从20世纪50年代就开始出现,它提供给程序员的指令更像人类语言,为计算机应用的普及起到了重要作用。人们用高级程序设计语言编程直观、方便,但计算机最终执行的还是二进制表示的机器指令,这中间需要编译程序或解释程序来做翻译工作。高级程序设计语言不再与具体的计算机硬件相对应,同一高级程序设计语言,只要给出不同的编译程序或解释程序,就可以应用于不同类型的计算机上。这就是高级程序设计语言的通用性。4.5.1程序设计语言的分类与选择

3)高级程序设计语言—第三代语言高级程序设计语言种类很多,可以把它们分为过程性语言、面向对象的语言、专用语言和脚本语言。这里仅就最典型的、用途最广的几种语言进行介绍。(1)过程性语言:(2)面向对象的语言:(3)专用语言:(4)脚本语言:4.5.1程序设计语言的分类与选择

3)高级程序设计语言—第三代语言(1)过程性语言:过程性编程语言适合于顺序执行的算法。用过程性语言编写的程序有一个起点和一个终点,程序的执行是流水线式的,在一个模块被执行完成前,不能处理其他任务,也无法动态地改变程序的执行过程。BASIC,简单易学,包括GW-BASIC、QBASIC和TurboBASIC等。COBOL,适合于大型计算机系统上的事务处理。FORTRAN,广泛应用于科学和工程计算领域。PASCAL,主要用于结构化程序设计的教学。C语言,功能强大且十分灵活,以其高效、简洁、可移植性强。4.5.1程序设计语言的分类与选择

3)高级程序设计语言—第三代语言(2)面向对象的语言:面向对象的程序设计语言是建立在面向对象编程方法的基础上的。面向对象的程序被看成是可以进行相互通信的若干对象的集合。设计面向对象程序就是定义对象,建立对象间的通信关系。程序中的输入即是对象间发消息(通信),而输出则是程序中的对象向显示器(或打印机)发消息(通信)的结果,程序运行的结果就是将对象集的初始状态变成终结状态(目标状态)。对象是程序中使用的实体。例如,在Windows环境下,我们习惯于用鼠标点击按钮,这里的按钮就是一个对象。程序员可以使用面向对象的语言来定义按钮对象,在程序运行时把它表示出来。4.5.1程序设计语言的分类与选择

3)高级程序设计语言—第三代语言(2)面向对象的语言:20世纪70年代以来,尽管出现了多种面向对象的程序设计语言VB,综合性的且功能强大的编程语言。C++,既融合了面向对象的能力,又与C语言兼容。Java,非常适用于网络应用,是一种独立于平台的语言。4.5.1程序设计语言的分类与选择

3)高级程序设计语言—第三代语言(3)专用语言:专用语言是为特殊应用而设计的编程语言,它通常有特殊的语法形式,面向特定的问题,输入结构及词汇表都与该问题密切相关。LISP、Prolog,适用于人工智能领域,特别是关于知识表示和专家系统构造

APL,为数组和向量运算设计的简洁而强有力的语言Forth,为开发微处理机软件设计的语言,支持用户自定义函数并以面向堆栈方式执行,以提高速度和节省内存专用语言针对特殊用途设计,一般应用面窄,翻译过程简便、高效,但与通用语言相比,可移植性和可维护性较差。4.5.1程序设计语言的分类与选择

3)高级程序设计语言—第三代语言(4)脚本语言:脚本语言是为了缩短传统的编写—编译—链接—运行过程而创建的计算机编程语言。早期的脚本语言经常被称为批处理语言或工作控制语言。一个脚本通常是解释运行而非编译运行。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序设计师快速完成程序的编写工作。虽然许多脚本语言都超越了计算机简单任务自动化的领域,可以用来编写更加复杂的程序,但仍然被称为脚本语言。在计算机的很多领域中都有脚本语言的存在,包括操作系统、计算机游戏、网络应用程序、字处理软件等。在许多方面,高级编程语言和脚本语言互相交叉,二者之间并没有明确的界限。4.5.1程序设计语言的分类与选择

3)高级程序设计语言—第三代语言(4)脚本语言:许多脚本语言用来执行一次性任务,尤其是系统管理方面。它可以把服务组件粘合起来,因此被广泛用于图形用户界面(GUI)创建或者命令行。操作系统通常提供一些默认的脚本语言,如所谓的Shell脚本语言。有些脚本是为了特定领域设计的,但有些脚本也可以用来编写通用的程序。在大型项目中,经常把脚本和其他低级编程语言一起使用,发挥各自优势解决特定问题。脚本经常用于设计互动通信,它有许多可以单独执行的命令,可以做高级操作。这些命令可以简化代码编写过程。4.5.1程序设计语言的分类与选择

3)高级程序设计语言—第三代语言(4)脚本语言:脚本通常以文本形式(如ASCII)保存,只在被调用时进行解释或编译。脚本编程速度快,且脚本文件体积通常小于同类程序文件。这种灵活性是以执行效率为代价的,脚本通常是解释执行的,速度可能很慢,且运行时更耗内存。然而,脚本和传统编程语言之间的界限越来越模糊。有经验的程序员可以对一些脚本语言进行大量优化工作。在大多现代系统中通常有多种脚本语言可以选择,所以推荐使用多种语言(包括C或汇编语言)编写脚本。4.5.1程序设计语言的分类与选择

3)高级程序设计语言—第三代语言(4)脚本语言:大多数脚本语言的共性是:良好的快速开发,高效率的执行,解释而非编译执行,和其他语言编写的程序组件之间通信功能很强大。常见的脚本语言有CShell、JavaScript、Perl、VBScript等。4.5.1程序设计语言的分类与选择

4)智能语言—第四代语言从上面三代语言的发展来看,人们不断寻求越来越抽象的形式表示程序,希望可以把程序员从繁杂的过程性细节中解放出来,第四代语言(4GL)上升到更高的一个抽象层次,尽管还在用不同的语法表示程序结构和数据结构,但它已不再涉及太多的算法性细节。一般认为4GL具有简单易学,用户界面良好,非过程化程度高,面向问题,只需告知计算机“做什么”,而不必告知计算机“怎么做”,用4GL编程使用的代码量较少,并可成数量级地提高软件生产率等特点。4.5.1程序设计语言的分类与选择

4)智能语言—第四代语言目前,4GL主流产品基本上与人工智能技术无关,但随着4GL非过程化程度和语言抽象级的不断提高,必然要求人工智能技术的支持。迄今,使用广泛的第四代语言是数据库查询语言,它支持用户以复杂的方式操作数据库。流行的SQL(StructuredQueryLanguage,结构化查询语言)支持数据库的定义和操作,功能强大,简单易学。程序生成器(ProgramGenerators)代表更为复杂的一类4GL,它不必依赖预先定义的数据库,只需要很少的语句就可生成完整的语言程序。此外,一些决策支持语言(DecisionSupportLanguage)、原型语言(PrototypingLanguage)、形式化规格说明语言(FormalSpecificationLanguage)也被认为属于4GL的范畴。4.5.1程序设计语言的分类与选择通常情况下,一项任务可以用多种编程语言来实现。当为一项工程选择程序设计语言时,应主要考虑以下几个因素:(1)应用领域;(2)算法和计算复杂性;(3)数据结构复杂性;(4)软件运行环境;(5)性能方面的需要与实现的条件;(6)软件开发组成员是否都精通这门语言。4.5.2软件开发工具----分类

软件开发工具根据其在软件开发生命周期中不同的阶段所起的作用可以分为以下几种:(1)软件建模工具。用于描述系统的需求。(2)软件实施工具。用于程序设计、编码和编译,包括程序语言开发环境和集成开发环境。前者主要提供程序语言的预编译、编译、链接的工具,后者包括编辑器、代码生成器、运行环境和调试器。(3)模拟运行平台。用于模拟系统的实际运行环境。(4)软件测试工具。用于对系统、子系统、模块或单元进行测试。(5)软件开发支撑工具。主要是软件配置管理工具。包括进度管理、资源管理、费用管理和版本管理、文档的编制或生成等。4.5.2软件开发工具----性能软件开发工具的性能由以下几个方面决定:(1)表达能力或描述能力。表达能力或描述能力决定了软件开发工具对软件项目中各种不同情况的适应程度。(2)保持信息一致性的能力。对某些大规模软件系统,保持信息一致性(包括各部分之间的一致性、代码与文档的一致性、功能与结构的一致性)要求工具提供有效的支持。(3)使用的方便程度。人机界面良好、通俗易懂是衡量软件开发工具性能的另一指标。(4)工具的可靠性。包括对重要信息的保护和抗干扰能力。(5)对硬件和软件环境的要求。这对开发工具的适用范围具有深远影响。4.5.2软件开发工具----集成开发环境软件开发环境的主要组成部分是软件开发工具。软件开发环境中各种开发工具并不是各自封闭和分离的,而是以综合、一致和整体连贯的形态来支持软件的开发的,所以一般将软件开发环境称为集成开发环境(IDE,IntegratedDevelopmentEnvironment),它是一种辅助程序开发人员开发软件的应用软件。IDE通常包括编程语言编辑器、编译器/解释器、自动建立工具,通常还包括调试器。有时还会包含版本控制系统和一些可以设计图形用户界面的工具。4.5.2软件开发工具----集成开发环境虽然目前有一些IDE支持多种编程语言(如Eclipse、NetBeans、XCode、MicrosoftVisualStudio),但是一般而言,IDE主要还是针对某种编程语言(如VisualBasic)。IDE程序提供许多功能,如制作、修改、编译、发布、调试。IDE可以把各种开发工具结合起来,提供一个抽象化的工具,可以减少学习编程语言的时间,增加开发人员的生产力,同时也可以将各种开发工作做更密切的整合,提高生产力。例如,在写程序的时候就可以做编译,一发现有语法上的错误就立即回应。4.5.2软件开发工具----集成开发环境集成开发环境有很多,这里仅就影响较大、流行较广的微软公司推出的Windows平台应用程序开发环境VisualStudio进行简单介绍,以便大家具体了解软件开发工具的功能和作用。VisualStudio97是最早的VisualStudio版本。包含面向Windows开发使用的VisualBasic5.0、VisualC++5.0,面向Java开发的VisualJ++和面向数据库开发的VisualFoxPro,还包含面向网站开发的VisualInterDev。其中,VisualBasic和VisualFoxPro使用单独的开发环境,其他的开发语言使用统一的开发环境。4.5.2软件开发工具----集成开发环境1998年,微软公司发布了VisualStudio6.0。所有开发语言的开发环境版本均升至6.0。这也是VisualBasic最后一次发布,从下一个版本(7.0)开始,MicrosoftVisualBasic进化成了一种新的面向对象的语言—MicrosoftVisualBasic.NET。自微软发布VisualStudio6.0以来,VisualStudio的IDE已经成为软件开发工具的标杆,很多其他的开发工具,甚至是其他用途的应用程序,都在模仿VisualStudio的IDE。VisualStudio现在已经逐渐将软件开发环境扩展到软件设计和协作、生命周期,以及更改管理系统等方面,VisualStudio2012版本提供了更为简便优化界面,实现轻松导航项目应用程序;加入了针对Windows8项目的可视化的工具集,对于Web开发,增加了最新的模板、工具以及对HTML5和CSS3等新标准的全面支持等。4.5.3VB程序设计语言----简介VisualBasic提供了从设计新型的用户界面到利用其他应用程序的对象,从处理文字、图像到使用数据库,开

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论