1.2 高级程序设计语言
40多年以来,计算机高级程序设计语言与计算机硬件、计算机应用、计算机网络相依存,一同得到了空前的发展。历史上、甚至当今仍然比较流行的高级语言有以下数种。
1. FORTRAN语言
FORTRAN语言是世界上最早出现的高级高级语言,它所支持的数据类型比较丰富,特别适合于科学和工程中的数值计算。
一个FORTRAN程序由一个主程序与若干个子程序组成。主程序与每一个子程序都是一个独立的程序单位,称为一个程序模块。在FORTRAN语言中,子程序是实现模块化的有效途径。
2. ALGOL语言
ALGOL语言是另一个早期研制出来的高级语言。它有严格的文法规则。ALGOL是一个分程序结构的语言。分程序的结构可以是嵌套的,也就是说,分程序内可以含有别的分程序。过程也可以看成是一个分程序,这个分程序可以在别的分程序中被调用。
3. COBOL语言
COBOL语言是专门为处理商业事务而设计的一种通用语言,使用于商业和管理领域。特点是针对商务和管理过程中要处理大量记录形式的数据的特殊需要,侧重于数据项的输入、输出记录的处理。
COBOL语言把数据描述引入语言,数据描述与具体计算机无关,这一点后来又对数据库管理系统的发展产生重大影响。至今仍在商务处理领域得到一定的应用。
4.Pascal语言
Pascal语言是最早出现的结构化程序设计语言,在Pascal语言中分程序和过程这两个概念合二为一,统一为过程,Pascal过程可以嵌套和递归。用它编写出来的程序结构性好,程序易读。这种语言广泛用于一些计算机课程的教学,也用于科学计算。
5.C语言
C语言是20世纪70年代发展起来的一种通用的结构化程序设计语言,特别是在系统软件开发上应用很广,它具有高级语言的诸多特点,也具有汇编语言控制硬件的能力,还可以比较方便地定义其他语言编写的程序。
字符、整数和浮点数是C语言的基本数据对象,用户可以构造指针、数组、和联合等复杂的数据类型。C语言是一种较低级的语言,它提供了指针和地址操作的能力。C语言提供书写结构良好的程序所需的控制结构。C语言与UNIX操作系统紧密相关,UNIX操作系统及其上的许多软件都是用C语言编写程序的。
上述语言主要擅长描述计算机问题的解决过程,所以叫它们是面向过程的语言,也称为第3代语言(3GL)。
6.面向对象程序语言C++
C++语言是在C语言的基础上发展起来的,与C语言兼容,但大大扩充改善了C语言的性能。在C++语言中,最主要的是增加了类功能,使它成为面向对象的程序设计语言。一般认为,面向对象程序语言至少包含下面一些概念:
(1)对象 对象是世界上客观存在的事物,它具有特征和方法两方面属性。对象是相互关联的,通过这种关联来相互影响(改变对象的属性)。面向对象语言把对象属性和方法封装在一起,对象内部才能对对象的“私有数据”进行操作,对象外部只能按提供的公开的方法,才能查询和修改对象的属性。这样,对象属性的具体表示和方法的具体实现都是隐蔽的。
(2)类 类是对象共同特征和行为的描述。对象是类的实例。
(3)继承 对象有自己的属性,但是对象更有共性,共性存在于特性之中。继承反映了上述对象共性与自己的属性的关系。子类继承父类的意思是子类具有父类的属性和行为。子类又可以对父类的特征和行为重定义或部分修改达到代码重用的目的。
(4)消息 一个对象利用自己或其他对象的方法改变自己或其他对象的属性,这些方法的引用叫对象间消息的交互。
7.纯面向对象的程序设计语言Java
Java是一种跨平台的、适合于分布式计算机环境的面向对象的编程语言。它具有可移植、稳定、简单、高性能、动态执行等特性。
(1)Java语言完全面向对象 C++等面向对象的程序设计语言是由原来面向过程的语言改造而来。
(2)移植性 程序的可移植性指的是程序不经修改而在不同硬件或软件平台上运行的特性。而Java是纯面向对象的程序设计语言。
(3)稳定性 Java不支持指针数据类型,它提供了字节码的检查机制,Java还提供了自动的“内存垃圾”收集功能,这些机制大大提高了Java的稳定性和安全性。
(4)简单性 Java的避免了使用C++等语言的操作符重载、多继承和数据类型自动转换等,这些都有利于语言简单化。
(5)高性能 Java通过支持多线程、高效的字节码来提高语言性能。
(6)动态特性 Java的动态特性是其面向对象设计的延伸。这种特性使得Java程序能够适应不断变化的执行环境。Java通过“滞后联编”,支持类库升级之后,相应的应用程序不必重新编译,也一样可以利用升级后类库的新增功能。Java的动态特性还体现在其对动态数据类型和动态协议的支持上。利用一种特殊的Applet,编程人员可很方便地支持新的数据类型。Java的动态性的价值是使程序员真正拥有“即插即用”(Plug-and-Play)的软件模块功能。
(7)分布式 Java支持数据分布和操作分布。
8.函数式语言
函数式程序是由一些原始函数、定义函数和函数型组成的函数表达式。传统程序设计语言中的赋值等概念,在函数式程序设计语言中消失。函数式程序的一个最本质的特性,就是函数值唯一地由其参数值所确定。只要使用相同的参数值,对此程序的不同的调用总是得到相同的结果。这种性质称为引用透明性,有助于程序的模块化。
一般认为表处理语言(LISP)是最早的函数式程序设计语言。但是,LISP的重点是将函数应用于对象,以产生新的对象,必要时再上升为函数。巴克斯所提出的函数式程序设计,则是引用函数型产生新函数,程序设计时从一般的对象空间上升到函数空间,因而具有优越的数学性质,有助于程序的理解、推理和验证。
由于函数式程序设计语言的简明性和独特的表达能力,可用它来研究传统程序设计语言的语义。一种方法是用于确定一个解释程序的定义,作为被研究的语言的语义;另一种方法是将被研究的语言写成的程序转换成与之等价的函数式程序。在人工智能领域中,需要用复杂的算法去处理一些复杂的(通常是符号的)数据结构。LISP语言成功地应用于这一领域,说明了函数式程序设计的独特优越性。巴克斯分析了传统程序设计语言的缺陷,认为这些缺陷主要是由于诺伊曼式系统结构所造成的。他所提出的函数式程序设计(简称FP),摆脱了传统的诺伊曼计算机结构,需要一种新的非诺伊曼式的系统结构为后援。一些具有新概念的计算机,如归约机、数据流机,以及专为某种函数式语言(如FP)设计的计算机正在研究和发展中。现代既需要研究在诺伊曼式计算机上如何更有效地实现函数式程序设计语言的问题,也需要研究适应这种语言的新型计算机结构。
函数式程序设计受到重视的原因是:首先由于产生了“软件危机”,人们企图探讨一种摆脱这种困境的新型程序设计方式,而函数式程序设计具有不少独特之处。其次,超大规模集成电路技术的发展,为发挥函数式程序设计语言的潜在并行性提供了物质基础。可以预期,一些具有诸如高度并行性等特点的非诺伊曼式计算机将会出现。随着硬件技术的发展、软件方法的研究,以及应用范围的不断扩大,函数式程序设计将得到发展,并在新一代计算机系统中起重要作用。
9.脚本语言
脚本语言是Web的普及与发展的产品。脚本语言一般指HTML语言、VBScript、JavaScript、Java Applet等,XML是定义HTML的元语言,它也可属于脚本语言范围。脚本语言程序由客户代理(浏览器)解释、运行。脚本语言的标准化主要为了网页独立于网页浏览器,使客户与浏览器更友好地交互,动态控制网页元素。
10.描述性语言
软件人员都希望有朝一日,只要描述系统的需求、设计、使用平台,就可以生成系统代码,不要编程。许多研究机构、大的公司在这方面研究已迈开了非常重要的一步。模型驱动的结构MDA的工作是这一领域的研究成果的体现。MDA以模型的观念研究软件系统,其中UML(通用建模语言)已成为人们描述软件系统开发不同阶段使用的语言。
传统的程序设计过程是抽象思维过程,只有程序设计完成后,通过上机调试,方知程序的正确与错误。可视化程序开发环境,使程序一边开发,一边看到程序运行的结果,大大提高了软件的开发效率。可视化程序开发是以面向对象程序设计为基础的。可视化面向对象的程序设计方法得到普遍的认可。许多传统的非面向对象语言都经过扩充、改造成为支持可视化的面向对象的程序设计语言。PASCAL演化为Delphi ,BASIC演化为VB,C语言演化为VC++、C++Builder等。这些可视化集成开发环境成为当前软件开发环境的主流。