1.1 计算机程序设计语言的发展
计算机之所以能自动进行计算,是因为采用了程序存储的原理,计算机的工作体现
为执行程序。程序是控制计算机完成特定功能的一组有序指令的集合,编写程序所使用
的语言称为程序设计语言,它是人与计算机之间进行信息交流的工具。
从1946年世界上诞生第一台计算机起,在短短的50余年间,计算机技术迅速发展,
程序设计语言的发展从低级到高级,经历了机器语言、汇编语言、高级语言到面向对象,具体学习资料请到菜鸟教程网下载观看bbs.jiaochengcn
语言的多个阶段,具体过程如下:
⑴ 机器语言
计算机能够直接识别和执行的二进制指令(也称机器指令)的集合称为该种计算机
的机器语言。早期的计算机程序都是直接使用机器语言编写的,这种语言使用0、1代码,
因此编写出的程序难以理解和记忆,目前已不被人们使用。
⑵ 汇编语言
通过助记符代替0、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.3 结构化程序设计概述
自提出结构化程序设计的概念后,经过十几年的发展,结构化程序设计已经具有了
很广泛的内容,大体上可以归纳为以下几点:
1、结构化程序的基本结构
结构化程序包含有三种基本结构,人们可以用这三种基本结构来展开程序,表示一
个良好的算法,从而使程序的结构清晰、易读易懂且质量好、效益高。这三种基本结构
为顺序结构、 选择结构和循环结构。
⑴ 顺序结构
顺序结构是一种最简单、最基本的结构,在顺序结构内,各块是按照它们出现的先
后顺序依次执行。表示了一个顺序结构形式,从图中可以看出它有一个入口a
点,一个出口 b点,在结构内A框和B框都是顺序执行的处理框。
⑵ 选择结构
选择结构中包含一个判断框,根据给定的条件p是否成立而选择执行A框或B框,
当条件成立时,执行A,否则执行B。A框或B框可以是空框,即不执行任何操作,但
判断框中的两个分支,执行完A或B后都必须汇合在一起,从出口b 退出,然后接着
执行其后的过程。所示的虚线部分就是选择结构,在选择结构中程序产生了分
支,但对于整个的虚线框而言,它仍然只具有一个入口a和一个出口b。
⑶ 循环结构
循环结构又称重复结构,是指在一定条件下反复执行一个程序块的结构。循环结构
也是只有一个入口,一个出口。根据循环条件的不同,循环结构分为当型循环结构和直
到型循环结构两种。
① 当型循环的结构,其功能是:当给定的条件p成立时,执行A框操作,
执行完A操作后,再判断p条件是否成立,如果成立,再次执行A操作,如此重复执行
A操作,直到判断p条件不成立才停止循环。此时不执行A操作,而从出口b脱离循环
结构。
② 直到型循环的结构,其功能是,先执行A框操作,然后判断给定条件
p是否成立,如果不成立,再次执行A操作;然后再对p进行判断,如此反复,直到给
定的p条件成立为止。此时不再执行A框,从出口b脱离循环。
由以上三种基本结构构成的程序,称为结构化程序。一个结构化程序,以及三种基
本结构中的每一种结构都应具有以下特点:
?有一个入口
?一个出口
?没有死语句,即每一个语句都应该有一条从入口到出口的路径通过它(至少通过
一次)。
?没有死循环(无限制的循环)。
实践证明,任何满足以上四个条件的程序,都可以表示为由以上三种基本结构所构
成的结构化程序;反之,任何一个结构化程序都可以分解为一个个基本结构。
2、结构化程序的设计方法
结构化程序主要采用自上而下、逐步细化的设计方法,即先全局后局部、先整体后
细节、先抽象后具体的设计方法。由于实际问题往往比较复杂,为了提高效率,在进行
结构化程序设计时,常常伴随着使用关键部分优先考虑的设计方法。
3、结构化程序的组织结构
在结构化程序中常常用模块化结构来组织程序,
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
[/url]
[url=bbs.jiaochengcn/forum.php?mod=forumdisplay&fid=58]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++语言可以定义虚函数,通过它来支持动态联编。动态联编是多态性的一个重
要特征。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论