3.5.1 程序设计语言
1)计算机程序设计语言的发展
20世纪40年代末,人们发明了第一台计算机,真正的程序设计可以说是与这台机器同时问世的。从数据是可供给的意义上说,早期的机器是可编程的,即数据以卡片或纸带的形式影响机器的运行结果。
完全用于计算的计算机是1830年至1840年由巴贝奇(Babbage)发明的。虽然该机器没有完全建成,但他却能执行由诗人拜伦的女儿Ada设计的数个计算实例。正因为如此,Ada被公认为是第一个程序员,而后来人们用她的名字命名了Ada语言。
随着具有存储程序的通用电子数字计算机的问世,程序设计成了一大难题。早期的程序是直接用机器代码和二进制代码编写的,但很快就出现了能用符号和助记符表达其代码的汇编语言。
1954年至1957年由John backus领导下的IBM的一个开发小组研制出了世界第一个高级程序设计语言FORTRAN。
60年代中后期,由于软件开发缺乏科学规范的系统规划与测试及评估标准,结果导致大批耗费巨资建立起来的软件系统由于含有错误而无法使用,即软件危机。软件危机导致了软件工程的产生。
1969年,出现了结构化程序设计方法。
1970年,第一个结构化程序设计语言———Pascal语言出现,标志着结构化程序设计时期的开始。
从80年代初开始,软件设计思想又产生了一次革命,其成果就是面向对象的程序设计。由于人们对数据处理的过程是面向具体的应用功能,其方法就是软件的集成化,即产生一些通用的、封装紧密的功能模块,它们应该能相互组合又能重复使用。对使用者来说,只需关心它的接口(输入量、输出量)及能实现的功能,完全不用关心它们是如何实现的,C++、VB、Delphi就是这样的语言。
直到现在,共有几百种高级语言出现,其中影响较大、使用较普遍的有FORTRAN、ALGOL、COBOL(通用商业语言)、BASIC、LISP、SNOBOL、PL/1、Pascal、C、PROLOG、Ada、C++、VC、VB、Delphi、JAVA等。高级语言的发展也经历了从早期的语言到结构化程序设计语言,从面向过程到非过程化程序语言的过程。
高级语言的下一个发展目标是非过程化的程序语言。也就是用户只需要告诉程序你要干什么,程序就能自动生成算法,自动进行处理。
在未来计算机语言的发展过程中,面向对象程序设计以及数据抽象将占有很重要的地位,未来语言的发展将不再是一种单纯的语言标准,其使用者将不再只是专业的编程人员,人们完全可以用订制工作流程的简单方式来完成编程。
2)程序设计语言的分类
程序设计语言也称为编程语言,即编写程序时所采用的用来描述算法过程的某种符号系统。程序设计语言按照语言级别可以分为低级语言和高级语言。
低级语言有机器语言和汇编语言两种。低级语言与特定的机器有关,功效高,但使用复杂、繁琐、费时、易出差错。
机器语言是表示成数码形式的机器基本指令集,或者是操作码经过符号化后的基本指令集,是由若干个0和1按照一定的规则组成的代码串。通常我们也称机器语言为计算机指令系统,它是一种面向机器的编程语言。用机器语言编写的程序叫做“目标程序”。计算机可直接识别目标程序,由于机器语言与硬件的关系十分密切,不同类型的计算机的指令系统不同,因此不同类型计算机的机器语言编写的程序并不通用。而且机器语言程序是用二进制(八进制、十六进制)代码编写,人们难以记忆和理解,后期修改和维护也很困难,所以现在已不用机器语言编制程序了。
汇编语言是机器语言中地址部分符号化的结果,也称为符号化指令的集合。它用容易理解和记忆的助记符来代替机器指令的操作码和操作数,这样就可以使机器指令用符号表示而不再用二进制表示,这种符号化指令通常称为“汇编指令”,其与机器指令一一对应。
汇编语言编写的程序比机器语言编写的更直观,也更容易理解记忆。但汇编语言与计算机硬件关系紧密,所以对于程序设计人员来说,硬件知识掌握程度要求相对比较高,仍旧不容易被大多数非专业人士所理解掌握。
高级语言的表示方法要比低级语言更接近于待解问题的表示方法,可以看作是符号化语句的集合,其特点是在一定程度上与具体机器无关,易学、易用、易维护,克服了汇编语言的欠缺,提高了编写、维护程序的效率,接近人类自然语言(主要是英语)。
高级语言虽然接近自然语言,但与自然语言仍有很大差距。高级语言的语法规则极其严格,主要表现在它对于语法中的符号、格式等都有专门的规定。主要原因是高级语言的处理系统是计算机,计算机没有人类的智能,计算机所具有的能力是人预先赋予的,本身不能自动适应变化不定的情况。
程序设计语言按照用户的要求有过程式语言和非过程式语言之分。过程式语言的主要特征是:用户可以指明一系列可顺序执行的运算,以表示相应的计算过程,如FORTRAN、COBOL、Pascal等。非过程式语言的含义是相对的,凡是用户无法指明表示计算过程的一系列可顺序执行的运算的语言,都是非过程式语言。
按照应用范围,有通用语言与专用语言之分。如FORTRAN、COLBAL、Pascal、C等都是通用语言。目标单一的语言称为专用语言,如APT等。
按照使用方式,有交互式语言和非交互式语言之分。具有反映人机交互作用的语言成分的语言成为交互式语言,如BASIC等。不反映人机交互作用的语言称为非交互式语言,如FORTRAN、COBOL、ALGOL69、Pascal、C等都是非交互式语言。
3)程序与程序设计语言
软件和程序本质上是相同的。在不会发生混淆的场合下,“软件”和“程序”两个名称经常可以互换使用,并不严格加以区分。
程序是由某种程序设计语言编写的能够完成一定功能的代码。程序以文件的形式存储在计算机中,在启动运行后完成某一确定信息的处理任务。静态上表现为保存在存储器中的文档,动态上表现为可以被调到内存由CPU执行的一连串指令。
计算机可以通过执行不同程序来完成不同任务,即使执行同一个程序,当输入数据不同时,输出的结果也有可能不同。因此,程序通常不是专门为解决某一个特定问题而设计的,大多数是为了解决某一类问题而设计开发的。
一个程序应包括对数据的描述和对操作的描述。对数据的描述是指在程序中要指定数据的类型和数据的组织形式,即数据结构。对操作的描述是操作步骤,即算法。著名的计算机科学家沃斯提出一个公式为“程序=数据结构+算法”,实际上,一个程序除了数据结构和算法以外,还应包括程序设计的方法和某一种程序设计语言。
程序设计语言是一套表达计算过程的符号系统,其表达形式能够同时被计算机和人所理解。其中,“计算”定义为计算机能够完成的任何操作。这种操作不仅仅局限于算术运算,而是包括数据运算、文本处理、信息存储等计算机能做的工作。这种语言能够同时被计算机所理解,它的语法结构足够简单,以便于能够翻译成机器语言。如果想让人们能够理解,一般的要求是,语言能够对计算的各种操作进行高度抽象,使得一个对底层硬件一无所知的人也能编写他的程序。
程序设计语言是表达计算的工具,从不同的角度考虑计算会产生不同的程序设计语言,但是可读性(无论对人还是对机器而言)是对它们共同的要求。
语言的定义大致可以分成两个部分:语法和语义。
语法:决定了语言要素如何组合在一起构成其他的语言要素。程序设计语言的语法和我们所使用的自然语言的语法很相似。几乎所有的语言都使用上下文无关文法进行语法定义。
语义:我们可以把语义理解为对于程序中的某个结构的含义的理解,那么这个理解就与上下文环境有关。
由汇编语言或高级程序设计语言编写的程序称为“源程序”,不能被CPU直接运行。存储源程序的文件称为“源文件”。
源程序经过相应的编译程序或解释程序翻译转换为功能等价的目标程序,相应的文件称为“目标文件”。高级语言的翻译有编译和解释两种方式,分别由编译程序和解释程序完成。编译程序对源程序进行扫描处理,根据已知的规则,判断源程序是否存在语法等错误,最终将其转换成为目标程序。此方式可以在程序编辑完成后通过编译找出其中的问题,即先翻译后执行,编译后先自动生成目标程序,再由链接程序将若干个目标程序块及库文件链接成为可执行文件,这种方式提高了程序的开发效率。解释程序则按照程序中语句的顺序逐条翻译并执行语句,即每翻译一条,就执行一条与语句相关的操作,并根据操作的结果决定下一条解释执行的语句或操作。解释方式只处理源程序,并不生成目标程序,比起编译方式,此方式运行效率低。
由机器指令构成的完整的、可直接运行的程序称为“可执行程序”,相应的文件称为“可执行文件”。可执行程序通常由链接程序将目标程序和相应的库函数链接后自动生成。我们也可以直接用机器语言编写可执行程序。
4)常用的程序设计语言介绍
(1)FORTRAN语言
FORTRAN(FORmula TRANslation)———公式翻译程序设计语言,产生于1956年,是第一个广泛使用的高级语言,为广大科学和工程技术人员使用计算机创造了条件。特点是接近数学公式,简单易用,允许复数与双精度实数运算。
FORTRAN语言由于其悠久的历史,在我国已得到大范围的推广普及,几乎每一位工程技术人员都学习并使用过FORTRAN语言。伴随着计算机技术的飞速发展,FORTRAN语言也处于不断演变的过程之中。对于广大计算机工作者,特别是与科学计算领域密切相关的技术人员而言,了解FORTRAN语言的发展状况,对充分利用现有计算机资源、有效求解各自领域的计算问题,无疑是大有裨益的。
(2)Pascal语言
在高级语言发展过程中,Pascal是一个重要的里程碑。Pascal语言是第一个系统地体现了E.W.Dijkstra和C.A.R.Hoare定义的结构化程序设计概念的语言。
1971年,瑞士联邦技术学院尼克劳斯·沃尔斯(Niklaus Wirth)教授设计并创立以计算机先驱帕斯卡的名字命名的Pascal语言。Pascal的取名原本就是为了纪念17世纪法国著名哲学家和数学家Blaise Pascal。
Pascal是最早出现的结构化编程语言,具有丰富的数据类型和简洁灵活的操作语句,其语法严谨,层次分明,运行效率高,查错能力强,适于描述数值和非数值问题。
Pascal有5个主要的版本,分别是Unextended Pascal、Extended Pascal、Object-Oriented Extensions to Pascal、Borland Pascal和Delphi Object Pascal。其中,Borland Pascal 和Delphi Object Pascal不是正式的Pascal标准,具有专利性。但由于Turbo Pascal系列和Delphi功能强大并且广为流行,Borland Pascal和Delphi Object Pascal已自为一种标准,为大家所熟悉。
(3)C与C++语言
C语言是在20世纪70年代初问世的。1978年美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和D.M.Ritchit合著了著名的《THE C PROGRAMMING LANGUAGE》一书,通常简称为“《K&R》”,也有人称之为“《K&R》标准”。但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准学会在此基础上制定了一个C语言标准,于1983年发表,通常称之为“ANSI C”。
C语言是一种结构化程序设计语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构,它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,兼顾了高级语言和汇编语言的特点,因此C语言既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高、可移植性强等特点,因此广泛地移植到了各种类型计算机上,从而形成了多种版本的C语言。
目前最流行的C语言有以下几种:Microsoft C(或称MS C)、Borland Turbo C(或称Turbo C)、AT&T C。这些C语言版本不仅实现了ANSI C标准,而且在此基础上各自做了一些扩充,使之更加方便、完美。
在C语言的基础上,1983年贝尔实验室的Bjarne Strou-strup又推出了C++。C++进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。C++目前流行的最新版本是Borland C++4.5、Symantec C++6.1和Microsoft Visual C++2.0。C++提出了一些更为深入的概念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一种与传统结构程序设计不同的思维方式和编程方法。因而也增加了整个语言的复杂性,掌握起来有一定难度。
(4)BASIC和VB语言
BASIC的全称是“Beginner’s all Purpose Symbolic Instruction Code”,意为“初学者通用符号指令代码”。BASIC语言的第一个版本是在1964年由美国达尔摩斯学院的基米尼和科茨完成设计并提出的,经过不断丰富和发展,现已成为一个功能全面的中小型计算机语言。BASIC易学、易懂、易记、易用,是初学者的入门语言,也可以作为学习其他高语级言的基础。
(5)COBOL语言
COBOL的全称是“Common Business Oriented Language”,意为“通用商业语言”。
在企业管理中,数值计算并不复杂,但数据处理信息量却很大。为专门解决经企管理问题,1959年,由美国的一些计算机用户组织设计了专用于商务处理的计算机语言COBOL,并于1961年由美国数据系统语言协会公布,经不断修改、丰富、完善和标准化后已发展为多种版本。
COBOL语言使用了300多个英语保留字,大量采用普通英语词汇和句型。COBOL程序通俗易懂,素有“英语语言”之称。
目前,COBOL语言主要应用于情报检索、商业数据处理等管理领域。