1.1 计算机程序设计语言
计算机程序是人们为解决某个实际问题而编写的需要计算机完成的一系列操作指令的有序集合。程序设计语言是人与计算机交流的工具,是计算机可以识别的语言,具有特定的词法与语法规则。计算机程序设计语言能够使程序员准确地定义计算机需要使用的数据,并精确定义在不同情况下应当采取的行动。计算机语言从其发展历程看,可以分成机器语言、汇编语言、高级语言3个阶段,其中高级语言又可分为面向过程与面向对象的程序设计语言等。
1.1.1 机器语言与汇编语言
机器语言是直接用二进制代码指令表达的计算机语言,指令是由0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的代码表示不同的含义。例如,某台计算机的字长为16位,即用16个二进制位表示一条指令或其他信息。16个0和1可组成各种排列组合,通过线路变成电信号,让计算机执行各种不同的操作。例如,将100与200相加的机器语言程序由下列两条指令实现。
1101 1000 0110 0100 0000 0000 0000 0101 1100 1000 0000 0000
虽然机器语言能被计算机直接识别和执行,但对于人类来说却十分晦涩难懂,更难以记忆与编写。在计算机发展的初期,程序员只能用机器语言编写程序,在这一阶段,计算机编程语言与人类的自然语言之间存在巨大的鸿沟,软件开发难度大、周期长,修改维护困难。
为了解决机器语言编程的困难,程序员使用类似英文缩写的助记符来表示指令,从而产生了程序设计的汇编语言(Assembly Language)。例如,使用ADD、SUB助记符分别表示加、减运算指令。将100与200相加的汇编语言实现如下。
MOV AX, 100 ADD AX, 200
使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中的语言处理系统软件,汇编程序将汇编语言翻译成机器语言的过程称为汇编。汇编语言实质上仍是机器语言,同样属于低级语言。
汇编语言是面向具体机型的,它离不开特定计算机的指令系统,因此,不同型号的计算机有不同结构的汇编语言,而且,对于同一问题编制的汇编语言程序在不同类型的计算机之间是互不相通的。
虽然汇编语言比机器语言提高了一步,使编程语言与人类自然语言之间的鸿沟略有缩小,但仍然与人类的自然表达方式相差甚远,而且由于汇编语言的抽象层次太低,一个简单的任务需要大量的语句实现,程序员还需考虑大量的机器细节,因此使用汇编语言编程的难度仍然很大。
1.1.2 高级语言
为了进一步方便编程,人们开发了更加接近人类自然语言习惯的高级语言,程序使用更有意义和容易理解的语句,使程序更容易描述具体的事物与过程,编程效率大大提高。例如,仍然是将100与200相加,其高级语言可描述如下。
100+200
高级语言与计算机的硬件结构及指令系统无关,有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好地描述各种算法,而且容易学习掌握。但用高级语言编译生成的程序代码一般比用汇编语言设计的程序代码要长,执行的速度也慢。
与汇编语言相比较,高级语言不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关,但与完成工作无关的细节,如使用堆栈、寄存器等,这大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要具备太多的专业知识。
使用高级语言编写的程序,需要相应的编译器翻译成机器语言程序才可执行。
1.1.3 面向过程与面向对象的程序设计语言
早期的计算机主要用于数值计算,其软件设计的主要工作是设计计算方法或解决问题的过程,因此早期的高级程序设计语言是一种面向过程的程序语言。随着计算机应用的日渐普及,人们需要利用计算机来解决更为复杂的问题,相应的程序软件也更加庞大,许多大型软件的开发遇到了严重的困难。20世纪60年代产生的结构化程序设计方法为上述困难提供了较好的解决手段。
结构化程序设计方法的基本思想是:对要解决的整个问题采用自顶向下、分而治之、逐步求精的方法分解模块化功能。其程序结构按功能划分为若干基本模块,各模块功能尽可能地简单并且相对独立。每一个模块内部均是由顺序、选择和循环3种基本结构组成。在结构化计算机程序中,各模块以子程序或函数的方式设计,各模块之间的联系通过子程序或函数间的相互调用实现。
结构化程序设计方法将复杂的系统分解成易于实现和控制的子任务,显著减少了软件开发的复杂性,提高了软件的可靠性、可测试性和可维护性。结构化程序设计方法的一系列优点使得高级程序设计语言获得了更为广泛的应用,先后出现了BASIC、ALGOL、COBOL、Pascal、Ada和C语言,其中应用最为广泛、影响最大的是C语言。
结构化程序设计方法是面向过程的,其程序特点是描述问题的数据与解决问题的过程(数据处理的方法)相互独立,当数据结构改变时,所有相关的处理过程都要进行相应的修改。同时,由于图形界面的应用,使得软件开发过程越来越复杂,从而催生了面向对象的程序设计方法(Object Oriented Program,OOP)。
面向对象程序设计方法的基本思想是:将描述问题的数据与解决问题的方法封装成一个不可分离的整体——对象。在面向对象的程序设计方法中,一个问题用一个对象来表示,对象内部包含了描述问题的数据以及对这些数据操作的方法。程序设计时,抽象出同类型对象的共性,形成类。类是抽象的“概念”,对象是类的实例。
正如结构化程序设计方法对计算机技术应用产生的巨大影响和促进那样,OOP方法更加强烈地影响、推动和促进计算机技术应用的更大发展。1986年在美国举行了首届“面向对象编程、系统、语言和应用(OOPSLA)”国际会议,使面向对象受到世人瞩目。现在,除了一些纯粹的面向对象的程序设计语言,如Smalltalk、Java等外,早期的一些高级程序语言也扩展了面向对象的功能。C++就是在C语言基础之上扩展出来的面向对象的程序设计语言。