第1章 绪 论

1.1 计算机语言发展概述

1.1.1 计算机程序设计语言的发展

计算机之所以能自动进行计算,是因为采用了程序存储的原理,计算机的工作体现为执行程序。程序是控制计算机完成特定功能的一组有序指令的集合,编写程序所使用的语言称为程序设计语言,它是人与计算机之间进行信息交流的工具。从1946年世界上诞生第一台计算机起,在短短的50余年间,计算机技术迅速发展,程序设计语言的发展从低级到高级,经历了机器语言、汇编语言、高级语言到面向对象语言的多个阶段,具体过程如下:

⑴ 机器语言

计算机能够直接识别和执行的二进制指令(也称机器指令)的集合称为该种计算机的机器语言。早期的计算机程序都是直接使用机器语言编写的,这种语言使用0、1代码,因此编写出的程序难以理解和记忆,目前已不被人们使用。

⑵ 汇编语言

通过助记符代替0、1机器指令以利于理解和记忆,由此形成了汇编语言。汇编语言实际上是与机器语言相对应的语言,只是在表示方法上采用了便于记忆的助记符号来代替机器语言相对应的二进制指令代码,因此也称为符号语言。计算机不能直接识别汇编语言,需要编译后才能识别。这种语言的执行效率较高,但由于难以记忆,因此使用较少。
⑶ 高级语言

机器语言和汇编语言是面向机器的语言,高级语言采用更接近自然语言的命令或语句,使用高级语言编程,一般不必了解计算机的指令系统和硬件结构,只需掌握解题方法和高级语言的语法规则,就可以编写程序。高级语言在设计程序时着眼于问题域中的过程,因此它是一种面向过程的语言,对于高级语言,人们更容易理解和记忆,这也给编程带来很大方便,但它与自然语言还是有较大差别。

⑷ 面向对象语言

面向对象语言是比面向过程语言更高级的一种高级语言。面向对象语言的出现改变了编程者的思维方式,使设计程序的出发点由着眼于问题域中的过程转向着眼于问题域中的对象及其相互关系,这种转变更加符合人们对客观事物的认识。因此,面向对象语言更接近于自然语言,面向对象语言是人们对于客观事物更高层次的抽象。

目前世界上已经设计和实现的计算机语言有上千种之多,但实际被人们广泛使用的计算机语言不过数十种。

1.1.2 程序设计的发展历程

回顾程序设计发展的历史,大体上可以划分为如下几个不同的时期。50年代的程序都是用指令代码或汇编语言来编写的,这种程序的设计相当麻烦,编制和调试一个稍许大一点的程序常常要花费很长的时间,培养一个熟练的程序员更需经过长期的训练和实习,这种局面严重影响了计算机的普及应用。60年代高级语言的出现大大简化了程序设计,缩短了解题周期,因此显示出强大的生命力。此后,编制程序已不再是软件专业人员才能做的事了,一般工程技术人员花上较短的时间学习,也可以使用计算机解题。这个时期,随着计算机的应用日益广泛地渗透到各学科和技术领域,也发展了一系列不同风格的、为不同对象服务的程序设计语言。其中较为著名的有FORTRAN、COBOL、ALGOL、LISP、PL/1、PASCAL等十几种语言。高级语言的蓬勃兴起,使得编译和形式语言理论相应日趋完善,这是该时期的主要特征。但就整个程序设计方法而言,并无实质性的改进。

自60年代末到70年代初,出现了大型软件系统,如操作系统、数据库,这给程序设计带来了新的问题。大型系统的研制需要花费大量的资金和人力,可是研制出来的产品却是可靠性差,错误多,且不易维护和修改。一个大型操作系统有时需要几千人/年的工作量,而所获得的系统又常常会隐藏着几百甚至几千个错误。当时,人们称这种现象为“软件危机”。“软件危机”震动了软件界,程序设计的传统习惯和工作方式导致了不清晰的程序结构,使得程序的可靠性难以保障;另一方面,程序设计工具的严重缺乏也使得大型系统的开发陷入困境。此时人们开始重新审视程序设计中的一些最基本的问题。例如,程序的基本组成部分是什么?应该用什么样的方法来设计程序?如何保证程序设计正确?程序设计的主要方法和技术应如何规范等等。

1969年,E.W.Dijkstra首先提出了结构化程序设计的概念,他强调了从程序结构和风格上来研究程序设计。经过几年的探索和实践,结构化程序设计的应用确实取得了成效,用结构化程序设计的方法编写出来的程序不仅结构良好,易写易读,而且易于证明其正确性。到20世纪70年代末结构化设计方法得到了很大的发展,Niklans Wirth又提出了“算法+数据结构 = 程序设计”的程序设计方法,他将软件划分成若干个可单独命名和编址的部分,它们被称为模块,模块化使软件能够有效地被管理和维护,能够有效的分解和处理复杂问题。在80年代,模块化程序设计方法普遍被人们接受。虽然几十年来结构化程序设计技术得到了广泛的使用,但有些问题仍未得到很好的解决。由于软件开发是对问题的求解过程,从认识论角度看,软件开发过程包括人们对要解决问题及相关事物的认识和基于认识所进行的描述。而结构化设计方法不能直接反映出人类认识问题的过程。另外,结构化设计方法中,程序模块和数据结构是松散地耦合在一起的,因此,当应用程序比较复杂时,容易出错,难以维护。随着计算机软件的发展,软件系统越来越复杂庞大,结构化程序设计方法已显得力不从心。

在20世纪80年代,人们又提出了面向对象的程序设计方法。这种方法直接对问题域中的客观事物建造分析模型中的对象,使得对象的描述与客观事物一致,保持问题域中的单个事物及事物之间的关系的原貌,而面向对象的的语言可以直接描述问题域中的对象及其相互关系。用面向对象的程序设计方法,可以使人们对复杂系统的认识过程与系统的程序设计与实现过程尽可能地一致,这是因为它从客观世界中所存在的事物出发,比较符合人们的思维方式。因此,目前这种面向对象的程序设计模式正逐渐取代“数据结构+算法”的面向过程的程序设计模式。

1.1.3 结构化程序设计概述

自提出结构化程序设计的概念后,经过十几年的发展,结构化程序设计已经具有了很广泛的内容,大体上可以归纳为以下几点:

1、结构化程序的基本结构

结构化程序包含有三种基本结构,人们可以用这三种基本结构来展开程序,表示一个良好的算法,从而使程序的结构清晰、易读易懂且质量好、效益高。这三种基本结构为顺序结构、 选择结构和循环结构。

⑴ 顺序结构

顺序结构是一种最简单、最基本的结构,在顺序结构内,各块是按照它们出现的先后顺序依次执行。表示了一个顺序结构形式,从图中可以看出它有一个入口a点,一个出口 b点,在结构内A框和B框都是顺序执行的处理框。

⑵ 选择结构

选择结构中包含一个判断框,根据给定的条件p是否成立而选择执行A框或B框,当条件成立时,执行A,否则执行B。A框或B框可以是空框,即不执行任何操作,但判断
框中的两个分支,执行完A或B后都必须汇合在一起,从出口b 退出,然后接着执行其后的过程。

⑶ 循环结构

循环结构又称重复结构,是指在一定条件下反复执行一个程序块的结构。循环结构也是只有一个入口,一个出口。根据循环条件的不同,循环结构分为当型循环结构和直到型循环结构两种。

① 当型循环的结构如图1-1-3,其功能是:当给定的条件p成立时,执行A框操作,执行完A操作后,再判断p条件是否成立,如果成立,再次执行A操作,如此重复执行A操作,直到判断p条件不成立才停止循环。此时不执行A操作,而从出口b脱离循环结构。

② 直到型循环的结构如图1-1-4,其功能是,先执行A框操作,然后判断给定条件p是否成立,如果不成立,再次执行A操作;然后再对p进行判断,如此反复,直到给定的p条件成立为止。此时不再执行A框,从出口b脱离循环。由以上三种基本结构构成的程序,称为结构化程序。一个结构化程序,以及三种基本结构中的每一种结构都应具有以下特点:

有一个入口
一个出口
没有死语句,即每一个语句都应该有一条从入口到出口的路径通过它(至少通过一次)。
没有死循环(无限制的循环)。

实践证明,任何满足以上四个条件的程序,都可以表示为由以上三种基本结构所构成的结构化程序;反之,任何一个结构化程序都可以分解为一个个基本结构。

2、结构化程序的设计方法

结构化程序主要采用自上而下、逐步细化的设计方法,即先全局后局部、先整体后细节、先抽象后具体的设计方法。由于实际问题往往比较复杂,为了提高效率,在进行结构化程序设计时,常常伴随着使用关键部分优先考虑的设计方法。

3、结构化程序的组织结构

在结构化程序中常常用模块化结构来组织程序.

1.1.4 面向对象程序设计概述

1、面向对象方法的起源

结构化程序设计技术虽已使用了几十年,但如下问题仍未得到很好的解决。

⑴ 面向过程的设计方法与人们习惯的思维方法仍然存在一定的差距,所以很难自然、准确地反映真实世界。因而用此方法开发出来的软件,有时很难保证其质量,甚至需要进行重新开发。

⑵ 结构化程序设计在方法实现中只突出了实现功能的操作方法(模块),而被操作的数据(变量)处于实现功能的从属地位,即程序模块和数据结构是松散地耦合在一起

的。因此当应用程序比较复杂时,容易出错,难以维护。由于上述缺陷,结构化程序设计方法已不能满足现代化软件开发的要求,一种全新的软件开发技术应运而生,这就是面向对象的程序设计(Object Oriented Programming,简称OOP)。

20世纪80年代,在软件开发中各种概念和方法积累的基础上,就如何超越程序的复杂性障碍,如何在计算机系统中自然的表示客观世界等问题,人们提出了面向对象的程序设计方法。面向对象的方法不再将问题分解为过程,而是将问题分解为对象。对象将自己的属性和方法封装成一个整体,供程序设计者使用。对象之间的相互作用则通过消息传递来实现。用面向对象的程序设计方法,可以使人们对复杂系统的认识过程与系统的程序设计与实现过程尽可能地一致。目前,这种“对象+消息”的面向对象的程序设计模式正逐渐取代“数据结构+算法”的面向过程的程序设计模式。

2、面向对象语言的发展

早在20世纪60年代,就出现了最早的面向对象语言Simula67语言,具有了类和对象的概念。随后又推出了纯面向对象设计语言,如80年代美国Xerox Palo Alto 研究中心推出了Smalltalk,它完整地体现并进一步丰富了面向对象的概念,还开发了配套的工具环境,为其最终实用化奠定基础。但由于当时人们已经接受并广泛应用结构化设计理论,而不能一下子完全接受面向对象程序设计的所有思想等诸多原因,这些语言并没有能够广泛流行起来。后来人们开始对流行的语言进行面向对象的扩充,曾经推出过许多种类的版本,而主要成功的代表是在当时流行的程序设计语言C语言的基础上开发的C++语言。这时面向对象语言已形成几大类别:一类是纯面向对象的语言,如Smalltalk和Eiffel;另一类是混合型的面向对象语言,如C++和Objective C;还有一类是与人工智能语言结合形成的,如LOOPS、Flavors和CLOS;适合网络应用的有JAVA语言等。C++语言是由AT&T公司的贝尔实验室的Bjarne Stioustrup 博士开发的,它的创作灵感来源于计算机语言多方面成果的凝聚,特别是BCPL(Basic Combined Programming Language,C语言的基础)和Simula 67(以面向对象为核心的语言),同时也借鉴了Algol68语言。C++的名字是由Rick Masenirti提出,到1983年确定。

C++是一门高效实用的混合型程序设计语言,它包括两部分内容:一是C++基础部分,它是以C语言为核心的; 另一部分是C++面向对象特性部分,是C++对C语言的扩充部分。这样它既支持面向对象程序设计方法,又支持结构化程序设计方法,同时广泛的应用基础和丰富的开发环境的支持,也使面向对象设计得到很快普及。

3、C++语言对面向对象方法的支持

C++语言是C语言的扩展,其基础部分除了一些细微的差别外,可以说是C语言的超级,它保留了C语言功能强、效率高、风格简洁、适合于大多数的系统程序设计任务等优点,使得C++与C之间取得了兼容性,因此,在过去的软件开发中积累的大量的C的库函数和实用程序都可在C++中应用。另外,C++语言通过对C的扩充,克服了原有C语言的缺点,特别是引进了面向对象语言的要素,使得C++语言成为一种面向对象的程序设计语言,它对面向对象程序设计方法的支持体现在如下几个方面:

⑴ 支持数据封装

在C++语言中,类是支持数据封装的工具,对象是数据封装的实现。在封装中还提供了一种对数据访问的控制机制,使得有些数据被隐藏在封装体内,因此具有隐蔽性。封装体与外界进行信息交换是通过操作接口进行的。这种访问控制机制体现在类的成员中可以有公有成员、私有成员和保护成员。

⑵ 支持继承性

C++语言允许单继承和多继承。继承是面向对象语言的重要特性。一个类可以根据需要生成它的派生类,派生类还可以再生成它的派生类。派生类继承了基类成员,另外它还可以定义自己的成员。继承是实现抽象和共享的一种机制。

⑶ 支持多态性

C++语言支持多态性表现在:

① C++语言允许函数重载和运算符重载;

② C++语言可以定义虚函数,通过它来支持动态联编。动态联编是多态性的一个重要特征。

1.1.5 C++语言开发环境的发展

随着C++逐渐成为ANSI标准,这种新的面向对象程序设计语言迅速成为程序员最广泛使用的工具。众多C++语言的开发环境也随之不断地推出,竞争十分激烈。1986年Borland 公司开发了Turbo C++ 程序语言,而后又推出了Borland C++版本。Microsoft公司于80年代中期在Microsoft C 6.0的基础上开发了Microsoft C/C++ 7.0,同时引进了Mircrosoft Foundation Class (MFC)库1.0版本,完善了源代码。以前这些版本都是依赖于DOS环境,或在Windows下的DOS模式下运行。不久Microsoft公司推出的Micros
oft C/C++ 8.0,即Visual C++ 1.0版本,它是Microsoft公司

推出的第一个真正的基于Windows环境下的可视化的集成开发环境,它将编辑、编译、链接和执行集成为一体。从Visual C++ 1.5版本以后,Microsoft公司决定不再将更多的努力花在支持16位编程上,虽然Visual C++2.0仍提供对16位的支持,但从2.0版本以后,Visual C++更多的用来创建32位程序。在版本上,Microsoft公司没有推出3.0版本,版本号直接从2.0跳到4.0,这样,Visual C++与MFC的版本号取得一致。由于Internet的流行明显的影响了产品的设计,在4.0版本中,Visual C++引进了为Internet编程而设计的新类库。5.0版本也增加了一些新类,但注意力更多的集中在改善产品的界面上,以提供一个更好的在线帮助系统、更高级的宏能力和对在开发者组内进行类和其它代码共享的支持。6.0版本在功能上做了进一步的改进。Visual C++经历了从1.0到6.0等版本的发展,软件系统逐渐庞大,功能日益完善。

评论被关闭。