1.1 计算机语言的发展过程
自1946年第一台电子计算机问世以来,计算机已被广泛地应用于生产、生活的各个领域,推动着社会的进步与发展。特别是Internet出现后,传统的信息收集、传输及交换方式发生了革命性的改变。
计算机科学的发展依赖于计算机硬件和软件技术的发展,硬件是计算机的躯体,软件是计算机的灵魂。没有软件,计算机只是一台“裸机”,什么也不能干;有了软件,计算机才有“思想”,才能做相应的事。软件是用计算机语言编写的。计算机语言的发展经历了从机器语言、汇编语言到高级语言的历程,如图1-1所示。
1. 机器语言(Machine Language)
计算机使用的是由“0”和“1”组成的二进制数,二进制编码方式是计算机语言的基础。计算机发明之初,科学家只能用二进制数编制的指令控制计算机运行。每一条计算机指令均由一组“0”、“1”数字,按一定的规则排列组成,若要计算机执行一项简单的任务,需要编写大量的这种指令。这种有规则的二进制数组成的指令集,就是机器语言(也称为指令系统)。不同系列的CPU,具有不同的机器语言,如目前个人计算机中常用AMD公司的系列CPU和Intel公司的系列CPU,具有不同的机器语言。
机器语言是计算机唯一能识别并直接执行的语言,与汇编语言或高级语言相比,其执行效率高。但其可读性差,不易记忆;编写程序既难又繁,容易出错;程序调试和修改难度巨大,不容易掌握和使用。此外,因为机器语言直接依赖于中央处理器,所以用某种机器语言编写的程序只能在相应的计算机上执行,无法在其他型号的计算机上执行,也就是说,可移植性差。
2. 汇编语言(Assemble Language)
为了减轻使用机器语言编程的痛苦,20世纪50年代初,出现了汇编语言。汇编语言用比较容易识别、记忆的助记符替代特定的二进制串。下面是几条Intel80x86的汇编指令:
ADD AX , BX ;表示将寄存器AX 和 BX 中的内容相加,结果保存在寄存器AX中。
SUB AX , NUM ;表示将寄存器AX中的内容减去NUM,结果保存在寄存器AX中。
MOV AX , NUM ;表示把数NUM保存在寄存器AX中。
通过这种助记符,人们就能较容易地读懂程序,调试和维护也更方便了。但这些助记符号计算机无法识别,需要一个专门的程序将其翻译成机器语言,这种翻译程序被称为汇编程序。
汇编语言的一条汇编指令对应一条机器指令,与机器语言性质上是一样的,只是表示方式做了改进,其可移植性与机器语言一样不好。总之,汇编语言是符号化的机器语言,执行效率仍接近于机器语言,因此,汇编语言至今仍是一种常用的软件开发工具。
3. 高级语言
尽管汇编语言比机器语言方便,但汇编语言仍然具有许多不便之处,程序编写的效率远远不能满足需要。1954年,第一个高级语言—FORTRAN问世了。高级语言是一种用能表达各种意义的“词”和“数学公式”按一定的“语法规则”编写程序的语言,也称为高级程序设计语言或算法语言。半个多世纪以来,有几百种高级语言问世,影响较大、使用较普遍的有FORTRAN、A LGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、C、PROLOG、Ada、C++、Visual C++、Visual Basic 、Delphi、Java等。高级语言的发展也经历了从早期语言到结构化程序设计语言、面向对象程序设计语言的过程。
高级语言与自然语言和数学表达式相当接近,不依赖于计算机型号,通用性较好。高级语言的使用,大大提高了程序编写的效率和程序的可读性。
与汇编语言一样,计算机无法直接识别和执行高级语言,必须翻译成等价的机器语言程序(称为目标程序)才能执行,如图1-2所示。高级语言源程序翻译成机器语言程序的方法有“解释”和“编译”两种。解释方法采用边解释边执行的方法,如早期的BASIC 语言即采用解释方法,在执行BASIC 源程序时,解释一条BASIC语句,执行一条语句。编译方法采用相应语言的编译程序,先把源程序编译成指定机型的机器语言目标程序,然后再把目标程序和各种标准库函数连接装配成完整的目标程序,在相应的机型上执行。如C、C++、Visual C++及Visual Basic等均采用编译的方法。编译方法比解释方法更具有效率。
4. 结构化程序设计(Structural Programming)语言
高级语言编写程序的编写效率虽然比汇编语言高,但随着计算机硬件技术的日益发展,人们对大型、复杂的软件需求量剧增,而同时因缺乏科学规范、系统规划与测试,程序含有过多错误而无法使用,甚至带来巨大损失。20世纪60年代中后期“软件危机”的爆发,使人们认识到大型程序的编制不同于小程序。“软件危机”的解决一方面需要对程序设计方法、程序的正确性和软件的可靠性等问题进行深入研究,另一方面需要对软件的编制、测试、维护和管理方法进行深入研究。
1968年,E.W.Dijkstra首先提出“GOTO语句有害”论点,引起了人们对程序设计方法讨论的普遍重视。程序设计方法学在这场讨论中逐渐产生和形成。程序设计方法学是一门讨论程序性质、设计理论和方法的学科。它包含的内容比较丰富,如:结构化程序设计、程序的正确性证明、程序变换、程序的形式说明与推导以及自动程序设计等。
在程序设计方法学中,结构化程序设计占有重要的地位,可以说,程序设计方法学是在结构化程序设计的基础上逐步发展和完善的。结构化程序设计是一种程序设计的原则和方法。它讨论了如何避免使用GOTO语句;如何将大规模、复杂的流程图转换成一种标准的形式,使得它们能够用几种标准的控制结构(顺序、分支和循环)通过重复和嵌套来表示。结构化程序设计思想采用“自顶向下、逐步求精”的方法,避免被具体的细节所缠绕,降低难度,直到恰当的时机,才考虑实现的细节,从而有效地将复杂的程序系统设计任务分解成许多易于控制和处理的子程序,便于开发和维护。
按结构化程序设计的要求设计出的高级程序设计语言称为结构化程序设计语言。利用结构化程序设计语言,或者说按结构化程序设计思想编写出来的程序称为结构化程序。结构化程序具有结构清晰、容易理解、容易修改、容易验证等特点。
1970年,瑞士计算机科学家Niklaus.Wirth开发了第一个结构化程序设计语言—Pascal语言,标志着结构化程序设计时期的开始。Pascal语言的简洁明了以及丰富的数据结构,为程序员提供了极大的方便性与灵活性,同时它特别适合微计算机系统,因此大受欢迎,并迅速走红。结构化程序设计方法也在整个20世纪70年代的软件开发中占绝对统治地位。除Pascal语言外,常见的结构化程序设计语言还有C、FORTRAN、True BASIC等。
但是,到了20世纪70年代末期,随着计算机应用领域的不断扩大,对软件技术的要求越来越高,结构化程序设计语言和结构化程序设计方法又无法满足用户需求的变化了,其缺点也日益显露出来:
(1)代码的可重用性差。随着软件规模的逐渐庞大,代码重用成了提高程序设计效率的关键;但采用传统的结构化设计模式,程序员每进行一个新系统的开发,几乎都要从零开始,这中间需要做大量重复、繁琐的工作。
(2)可维护性差。结构化程序是由大量的过程(函数、子程序)组成的;随着软件规模逐渐庞大,程序变得越来越复杂,过程(函数、子程序)越来越多,相互间的耦合越来越高,它们变得难以管理;当某个业务有所变化时必须对大量的程序进行修改和调试。
(3)稳定性差。结构化程序要求模块独立,并通过过程(函数、子程序)的概念来实现。但这一概念狭隘、稳定性有限,在大型软件开发过程中,数据的不一致性问题仍然存在。
(4)难以实现。在结构化程序中,代码和数据是分离的,正如Niklaus.Wirth的定义:结构化程序=算法+数据结构。例如在C语言中,代码单位为函数,而数据单位称为结构,函数和结构没有结合在一起。然而,函数和数据结构并不能充分地模拟现实世界。人的思维焦点通常是在于事物和实体,以及它们的属性和活动,比如说当考虑会计部门的应用程序时,我们会考虑下列内容:
出纳支付工资;
职工出具凭证;
财务主管批准支付;
出纳记账。
但实际应用中,要决定如何通过数据结构、变量和函数来实现这个应用程序却是很困难的。
5. 面向对象(Object Oriented)语言的产生
结构化程序设计方法与语言是面向过程的,存在较多的缺点,同时程序的执行是流水线式的,在一个模块被执行完成前,不能干别的事,也无法动态地改变程序的执行方向。这和人们日常认识、处理事物的方式不一致。人们认为客观世界是由各种各样的对象(或称实体、事物)组成的;每个对象都有自己的内部状态和运动规律,不同对象间的相互联系和相互作用构成了各种不同的系统,进而构成整个客观世界;计算机软件主要就是为了模拟现实世界中的不同系统,如物流系统、银行系统、图书管理系统、教学管理系统等。因此,计算机软件可以认为是,现实世界中相互联系的对象所组成的系统,在计算机中的模拟实现。
为了使计算机更易于模拟现实世界,1967年挪威计算中心的Kisten.Nygaard和Ole.Johan Dahl开发了Simula67语言,它提供了比子程序更高一级的抽象和封装,引入了数据抽象和类的概念,被认为是第一个面向对象程序设计语言。20世纪70年代初,Palo Alto研究中心的Alan Kay所在的研究小组开发出了Smalltalk语言,之后又开发出了Smalltalk-80。Smalltalk-80被认为是最纯正的面向对象语言,它对后来出现的面向对象语言,如Object-C、C++、Java、Self、Eiffl产生了深远的影响。
随着面向对象语言的出现,面向对象程序设计方法也应运而生且得到迅速发展,面向对象的思想也不断向其他方面渗透。1980年Grady Booch提出了面向对象设计的概念,之后面向对象分析的概念也被提出。1990年以来,面向对象分析、测试、度量和管理等研究得到了长足的发展,并在全世界掀起了一股面向对象热潮,至今盛行不衰。面向对象程序设计在软件开发领域掀起了巨大的变革,极大地提高了软件开发效率。
| 回书目 上一节 下一节 |
|
· 第六章 你能帮我吗?.. · Linux笔试面试题选摘测.. · 08年5月软考网管上午真.. · 性能测试从零开始 目录 · 08年5月软考网工上午真.. · 上周拒绝服务攻击(DDo.. |
· 08年5月各大网上书店及.. · 2008年5月24日软考试题.. · 软件设计师专家临考模.. · 上周网络管理员专家自.. · 网络工程师自测获奖名.. · 08年4月各大网上书店及.. |
|
||||
| · NAC安全访问控制 · 网络布线测试仪器 · Windows Server 2008专.. · Windows远程桌面应用 · 网络故障排除宝典 · 运营商封堵ADSL共享 中.. · 解析35岁技术人的价值.. · 世纪枭雄比尔盖茨的王.. |
· 主流品牌防火墙配置 · ASP.NET开发教程 · 超级计算机TOP500专题 · Vista SP1对决XP SP3 · SQL Server 2008/2005.. · 程序员如何成长? · C#技术开发指南 · 虚拟化技术还有点“虚” |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Windows远程桌面应用 · C#技术开发指南 · Apache技术专题 |
· Windows集群服务应用 · C#技术开发指南 · 国际文档格式标准开战 · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · C#技术开发指南 · 三层交换技术专题 · Apache技术专题 · C#技术开发指南 |
· Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 |
|||