程序分析⽅法》——1.1程序设计语⾔发展的四个阶段
1.1 程序设计语⾔发展的四个阶段
  到⽬前为⽌,程序设计语⾔的发展经过了机器语⾔、汇编语⾔、⾼级语⾔、第四代语⾔四个阶段,每⼀个阶段都使程序设计的效率⼤⼤提⾼。我们常常把机器语⾔称为第
⼀代程序设计语⾔,把汇编语⾔称为第⼆代程序设计语⾔,把⾼级语⾔称为第三代程序设计语⾔,把最新的程序设计语⾔称为第四代语⾔。
1.1.1 机器语⾔
  机器语⾔是计算机能直接识别和执⾏的⼀组机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。⼀条机器指令就是机器语⾔的⼀个语句,它是⼀组有意义的⼆进制代码。每条机器指令⼀般由操作码和地址码两部分构成,其中操作码说明指令的含义,地址码说明操作数的地址。机器语⾔程序能够在对应型号的计算机上直接运⾏。
  【例1.1】 若计算:
![image](yqfile.alicdn/23ba8ecb08509597c3b455a47bcaf47b8b9c9412.png)
⽤Pentium机器语⾔可编出如下程序⽚段(设程序从100号单元开始;X、Y分别占⽤116、118号单元)。
1010 1001 0001 0110 0000 0001
0011 1100 0001 1000 0000 0001
0111 1100 0000 0101
0010 1101 0001 0101 0000 0000
1110 1010 0000 0011
0000 0101 0001 0101 0000 0000
1010 0011 0001 1000 0000 0001
…  …  …  …  …  …  …
0000 0000 0000 0000
0000 0000 0000 0000
从上⾯的例⼦可以看出:
⽤机器语⾔进⾏程序设计⽐较烦琐。⾸先,程序员要熟记所⽤计算机的全部指令集及每条指令的含义;其次,在程序编写过程中,程序员要⾃⼰处理每条指令和每⼀数据的存储分配和输⼊/输出,还要记住每步中所使⽤的⼯作单元处于何种状态。由于程序员既要驾驭程序全局⼜要深⼊每个局部细节,因此程序的开发周期长、可靠性差。
机器语⾔编写出的程序都是由0和1构成的符号串,可读性差,还容易出错,不易交流和维护。
两杠两星
机器语⾔编程的思维及表达⽅式与程序员⽇常的思维和表达⽅式差距较⼤,程序员需要经过长期的训练才能胜任。
机器语⾔程序设计严重依赖于具体计算机的指令集,编写出的程序可移植性差、重⽤性差。
  基于上述原因,⼈们引进了汇编语⾔。
1.1.2 汇编语⾔
  鉴于机器语⾔编程的烦琐,为减⼩程序员在编程中的劳动强度,20世纪50年代中期,⼈们开始⽤⼀些“助记符号”来代替0、1码编程,即⽤助记符代替机器指令中的操作码,⽤地址符号或标号代替机器
指令中的地址码,将机器语⾔变成了汇编语⾔。汇编语⾔也称符号语⾔,即符号化的机器语⾔,提⾼了程序的可读性和程序开发效率。
  完成例1.1中同样的计算,Pentium汇编语⾔程序⽚段如下:
MOV    AX    ,X
峰蜜
CMP    AX    ,Y
JL        S1
SUB        AX    ,15
JMP        S2
S1:ADD    AX    ,15
S2:MOV    Y    ,AX
… … … … … …
X  DW  ?
Y  DW  ?
  汇编语⾔⽤助记符⽽不是0和1序列来表⽰指令,程序的⽣产效率和质量都有所提⾼。但是使⽤汇编语⾔编写的程序,计算机不能直接识别,必须有⼀种程序将汇编语⾔翻译成机器语⾔,起这种翻译作⽤的程序称为汇编程序(Assembler),汇编程序把汇编语⾔翻译成机器语⾔的过程称为汇编(Assembling)。
  汇编语⾔程序经汇编得到的⽬标程序占⽤内存空间少,运⾏速度快,有着⾼级语⾔不可替代的作⽤,因此汇编语⾔常⽤来编写系统软件和过程控制软件。
  汇编语⾔和机器语⾔都与具体的机器有关,它们都称为⾯向机器的语⾔,也称为低级语⾔。程序员⽤它们编程时,不仅要考虑解题思路,还要熟悉机器的内部构造,并且要“⼿⼯”地进⾏存储器分配,编程的劳动强度仍然很⼤,这些仍然阻碍着计算机的普及和推⼴。因此,⼈们⼜进⼀步引进了⾼级语⾔。
1.1.3 ⾼级语⾔
  ⽆论是机器语⾔还是汇编语⾔,它们都是⾯向硬件具体操作的,语⾔对机器的过分依赖要求使⽤者必须对硬件结构及其⼯作原理都⼗分熟悉,这对⾮计算机专业⼈员是难以做到的,对于计算机的推⼴
应⽤也是不利的。计算机的发展,促使⼈们去寻求⼀些与⼈类⾃然语⾔相接近且能为计算机所接受的语意确定、规则明确、⾃然直观和通⽤易学的计算机语⾔。这种与⾃然语⾔相近并为计算机所接受和执⾏的计算机语⾔称为⾼级语⾔。⾼级语⾔是⾯向⽤户的语⾔。⽆论何种机型的计算机,只要配备相应的⾼级语⾔的翻译程序,⽤该⾼级语⾔编写的程序就可以在该机器上运⾏。
  例如,使⽤C语⾔完成例1.1中的计算,可⽤如下语句:
if(X<Y)
Y=X+15;
个税缴纳标准
else
余少刘亦菲
四年级上册数学期末试卷及答案2014Y=X?15;
  ⾼级语⾔可读性好,机器独⽴性强,具有程序库,可以在运⾏时进⾏⼀致性检查从⽽检测程序中的错误,使得⾼级语⾔⼏乎在所有的编程领域取代了机器语⾔和汇编语⾔。⾼级语⾔也随着计算机技术的发展⽽不断发展,⽬前有许多种⽤于不同⽬的的⾼级程序设计语⾔,⼴泛使⽤的有C、C++、Java、C#、F#、JavaScript、JSP等。
  根据⼈们研究兴趣的不同,⾼级语⾔也有多种不同的分类⽅法。从语⾔的范型分类,当今的⼤多数程序设计语⾔可以划分为如下四类。  1.命令式语⾔
  命令式语⾔(Imperative Language)也称过程式语⾔。其特点是命令驱动,⾯向动作(语句),即将计算看做是动作(语句)的序列。⼀个命令式语⾔程序由⼀系列的语句组成,每个语句的执⾏引起若⼲存储单元中的值的改变。Pascal、C和ADA都是典型的命令式语⾔。
  2.函数式语⾔
  函数式语⾔(Functional Language)注重程序实现的功能,⽽不是像命令式语⾔那样⼀个语句接⼀个语句地执⾏。程序的编写过程是从已有函数出发构造出更复杂的函数,对初始数据集应⽤这些函数直⾄最终的函数可以从初始数据计算出最终的结果。因此,函数式语⾔也称应⽤式语⾔。LISP、ML和Haskell都属于这种语⾔。
  3.⾯向对象语⾔
  ⾯向对象语⾔(Object-Oriented Language)是当今最流⾏、最重要的语⾔。它的主要特点是⽀持封装性、继承性和多态性等。把复杂的数据和对这些数据的操作封装在⼀起,构成对象;对简单对象进⾏扩充、继承简单对象的特性,从⽽设计出复杂的对象。对对象的构造可以使⾯向对象程序具有命令
式语⾔的有效性,通过作⽤于特定数据的函数的构造,可以具有应⽤式语⾔的灵活性和可靠性。SmallTalk、C++、Java就属于⾯向对象语⾔。
  4.逻辑式语⾔
  逻辑式语⾔(Logical Language)也称做基于规则的语⾔(Rule-based Language)。逻辑式程序设计以“项”之间“关系”的定义、应⽤这些关系的事实以及从现存的事实中“推理”出新的事实的规则为基础。项可能是逻辑变量或者包含逻辑变量。事实和规则称
为“⼦句”。逻辑式语⾔的程序由“⼦句列表”组成。最有代表性的逻辑式语⾔是PROLOG。PROLOG以逻辑程序设计为基础,以处理⼀阶谓词演算为背景。它⽂法简洁,表达⼒丰富,具有独特的⾮过程型语⾔(⼀个语句就相当于过程语⾔的⼀个⼦程序⽽并⾮算法的⼀步),是⼀种具有推理功能的逻辑型语⾔。PROLOG语⾔已被⼴泛地应⽤于关系数据库、抽象问题求解、数理逻辑、公式处理、⾃然语⾔理解、专家系统以及⼈⼯智能的许多领域。
  计算机的指令系统只能执⾏⾃⼰的指令程序,⽽不能执⾏其他语⾔的程序。因此,若想⽤⾼级语⾔,则必须有这样⼀种程序,它把⽤汇编语⾔或⾼级语⾔写的程序(称为源程序)翻译成等价的机器语⾔程序(称为⽬标程序),我们称这种翻译程序为翻译器。汇编语⾔的翻译器为汇编程序,⾼级语⾔的翻译器为编译程序。
  翻译器的“翻译”通常有两种⽅式,即编译⽅式和解释⽅式。编译⽅式是:事先编好⼀个称为编译程序的机器语⾔程序,作为系统软件存放在计算机内,当⽤户把由⾼级语⾔编写的源程序输⼊计算机后,编译程序便把源程序整个地翻译成⽤机器语⾔表⽰的与之等价的⽬标程序,然后计算机再执⾏该⽬标程序,以完成源程序要处理的运算并取得结果。编译程序将源程序翻译成⽬标程序的过程发⽣在翻译时间,翻译成的⽬标代码随后运⾏的时间称为运⾏时间。解释⽅式是:源程序进⼊计算机时,解释程序边扫描边解释,做逐句输⼊逐句翻译,计算机⼀句句执⾏,并不产⽣⽬标程序。
  解释器是源程序的⼀个执⾏系统,⽽编译程序是源程序的⼀个转换系统,换句话说,解释程序的⼯作结果是得到源程序的执⾏结果,因此解释程序相当于执⾏程序的抽象机;⽽编译程序的⼯作结果是得到等价于源程序的某种⽬标机程序,因此编译程序是⾼级语⾔程序到某种低级语⾔程序的转换器。
  ⾼级程序设计语⾔的编译⽅式和解释⽅式如图1.1所⽰。
  C、C++、VB、VC++等⾼级语⾔执⾏编译⽅式;Java语⾔则以执⾏解释⽅式为主;⽽C、C++等语⾔是能书写编译程序的⾼级程序设计语⾔。
公众账号
1.1.4 第四代语⾔
  第四代语⾔(Fourth-Generation Language,以下简称为4GL)的出现是出于商业需要。4GL⼀词最早出现在20世纪80年代初期软件⼚商的⼴告和产品介绍中。由于4GL具有“⾯向问题”、“⾮过程化程度⾼”等特点,可以呈数量级地提⾼软件⽣产率,缩短软件开发周期,因此赢得很多⽤户的青睐。20世纪80年代中期,许多著名的计算机科学家对4GL展开了全⾯研究,从⽽使4GL进⼊了计算机科学的研究范畴。
  4GL以数据库管理系统所提供的功能为核⼼,进⼀步构造了开发⾼层软件系统的开发环境,如报表⽣成、多窗⼝表格设计、菜单⽣成系统、图形图像处理系统和决策⽀持系统,为⽤户提供了⼀个良好的应⽤开发环境。它提供了功能强⼤的⾮过程化问题定义⼿段,⽤户只需告知系统做什么,⽽⽆须说明怎么做,因此可⼤⼤提⾼软件⽣产率。
  进⼊20世纪90年代,随着计算机软硬件技术的发展和应⽤⽔平的提⾼,⼤量基于数据库管理系统的4GL商品化软件已在计算机应⽤开发领域中获得⼴泛应⽤,成为⾯向数据库应⽤开发的主流⼯具,如Oracle应⽤开发环境、Informix?4GL、SQL Windows、Power Builder等。它们为缩短软件开发周期、提⾼软件质量发挥了巨⼤的作⽤,为软件开发注⼊了新的⽣机和活⼒。
  虽然4GL具有很多优点,也有很⼤的优势,成为⽬前应⽤开发的主流⼯具,但它也存在着以下严重不
⾜:
4GL虽然功能强⼤,但在其整体能⼒上却与3GL有⼀定的差距。这⼀⽅⾯是语⾔抽象级别提⾼以后不可避免地带来的(正如⾼级语⾔不能做某些汇编语⾔做的事情那样);另⼀⽅⾯是⼈为带来的,许多4GL只⾯向专项应⽤,有的4GL为了提⾼对问题的表达能⼒,提供了同3GL的接⼝,以弥补其能⼒上的不⾜,如Oracle提供了可将SQL语句嵌⼊C程序中的⼯具PRO*C。
4GL由于其抽象级别较⾼,不可避免地带来系统开销⼤,运⾏效率低(正如⾼级语⾔运⾏效率没有汇编语⾔⾼⼀样)等问题,对软硬件资源消耗严重,应⽤受硬件限制。
由于缺乏统⼀的⼯业标准,4GL产品花样繁多,⽤户界⾯差异很⼤,与具体的机器联系紧密,语⾔的独⽴性较差(SQL稍好),影响了应⽤软件的移植与推⼴。
⽬前4GL主要⾯向基于数据库应⽤的领域,不适合于科学计算、⾼速的实时系统和系统软件开发。