1.1 计算机程序设计语言

人类使用自然语言,而计算机执行的是机器指令;程序设计语言是人与计算机之间进行交流的工具,它定义了一套代码规则,程序设计人员遵循这些规则所编写出来的程序可被翻译成计算机能够“理解”的形式。

程序设计语言可以分为低级语言和高级语言。低级语言包括机器语言和汇编语言,使用它们进行编程需要对机器结构有深入的了解,而且代码晦涩难懂、不利于人们的理解和交流。高级语言则更加接近自然语言,比较符合人们的思维方式,因此大大提高了程序设计的效率,并使得人们通过“阅读程序文本”来理解“计算过程”成为可能。高级语言程序在计算机上有两种处理方式:一是由专门的解释程序来直接解释执行高级语言代码,二是由专门的编译程序将其翻译为低级语言代码而后执行。目前在程序设计的各个主要领域,高级语言已基本上取代了低级语言。

Fortran语言是第一个被广泛使用的高级语言,其程序由一个主程序和若干个子程序组成,通过将不同的功能分配到独立的子程序中,能够有效地实现程序的模块化。20世纪七八十年代非常流行的Pascal语言提供了丰富的数据类型和强有力的控制结构,使用它能够方便地编写结构化的应用程序,其程序结构中的一个模块就是一个过程,因此也被称为面向过程的语言。当然,最为流行的结构化程序设计语言莫过于C语言,它兼顾了诸多高级语言的特点,同时还提供了指针和地址等低级操作的能力,因此既适合于开发应用程序,又适合于开发系统程序,此外它还有良好的可移植性,成为程序设计语言诞生以来最为成功的范例之一。

简而言之,结构化程序设计采用自顶向下、分而治之的方法,对目标系统进行功能抽象和逐步分解,直至每个功能模块都能以一个过程或函数来实现为止。这样就将复杂系统划分为一系列易于控制和处理的软件模块,其特点是结构良好,条理清晰,功能明确。对于需求稳定、算法密集型的领域(如科学计算领域),上述方法是有效并适用的。

随着信息技术的飞速发展,计算机软件从单纯的科学和工程计算渗透到社会生活的方方面面,软件的规模也越来越大,复杂性提高,此时结构化方法逐步暴露出诸多问题和缺陷,这主要体现在:

• 功能与数据相分离,使用的建模概念不能直接映射到问题领域中的对象,不符合人们对现实世界的认识和思维方式。

• 自顶向下的设计方法,限制了软件模块的可复用性,降低了开发效率。

• 当系统需求发生变化时,系统结构往往需要大幅调整,特别是对于较复杂的系统,维护和扩展都变得非常困难。

为了解决上述问题,一种全新的、强有力的软件开发方法——面向对象(Object Oriented, OO)的方法应运而生。它是在结构化等传统方法的基础上发展起来的,也使用抽象和模块化等概念;但和传统方法相比,其根本性的变化在于:不再将软件系统看成是工作在数据上的一系列过程或函数的集合,而是一系列相互协作而又彼此独立的对象的集合。这不仅更为符合人们的思维习惯,有助于保持问题空间和解空间在结构上的一致性,同时能够有效控制程序的复杂性,提高软件的生产效率。近二十年来,面向对象的方法学得到了迅速发展和广泛应用,Java、C++、C#等面向对象的程序设计语言也成为了当今世界上计算机软件的主流开发语言。