面向对象程序设计的历史与发展
面向对象程序设计的历史与发展
面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一
种程序设计范型,同时也是一种程序开发的方法。它将对象作为程序的基本单元,将程序
和数据 封装 其中,以提高软件的重用性、灵活性和扩展性。当我们提到面向对象的时候,
它不仅指一种程序设计方法。它更多意义上是一种程序开发方式。
面向对象出现以前,结构化程序设计是程序设计的主流,结构化程序设计又称为面
向过程的程序设计。在面向过程程序设计中,问题被看作一系列需要完成的任务,函数
(在此泛指例程、函数、过程)用于完成这些任务,解决问题的焦点集中于函数。其中
函数是面向过程的,即它关注如何根据规定的条件完成指定的任务。
在多函数程序中,许多重要的数据被放置在全局数据区,这样它们可以被所有的函
数访问。每个函数都可以具有它们自己的局部数据。这种结构很容易造成全局数据在无
意中被其他函数改动,因而程序的正确性不易保证。面向对象程序设计的出发点之一就
是弥补面向过程程序设计中的一些缺点:对象是程序的基本元素,它将数据和操作紧密
地连结在一起,并保护数据不会被外界的函数意外地改变。比较面向对象程序设计和面
向过程程序设计,还可以得到面向对象程序设计的其他优点:
1)数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减
少甚至避免对外界的干扰;
2)通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效
率,也减低了出错概率,降低软件维护的难度;
3)结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程
序中,减少软件开发过程中中间环节的转换过程;
4)通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,
在一定程度上更便于控制软件复杂度;
6)以对象为中心的设计可以帮助开发人员从静态(属性)和动态(方法)两个方面
把握问题,从而更好地实现系统;
7)通过对象的聚合、联合可以在保证封装与抽象的原则下实现对象在内在结构以及
外在功能上的扩充,从而实现对象由低到高的升级。
计算机科学中对象和实例概念的最早萌芽可以追溯到麻省理工学院的 PDP-1 系统。
这一系统大概是最早的基于容量架构(capability based architecture)的实际系统。
另外 1963 年 Ivan Sutherland 的 Sketchpad 应用中也蕴含了同样的思想。对象作为编
程实体最早是于 1960 年代由 Simula 67 语言引入思维。Simula 这一语言是奥利-约翰·
达尔和克利斯登·奈加特在挪威奥斯陆计算机中心为模拟环境而设计的。(据说,他们是为
了模拟船只而设计的这种语言,并且对不同船只间属性的相互影响感兴趣。他们将不同的
船只归纳为不同的类,而每一个对象,基于它的类,可以定义它自己的属性和行为。)这
种办法是分析式程序的最早概念体现。在分析式程序中,我们将真实世界的对象映射到抽
象的对象,这叫做“模拟”。Simula 不仅引入了“类”的概念,还应用了实例这一思想——这
可能是这些概念的最早应用。
20 世纪 70 年代施乐 PARC 研究所发明的 Smalltalk 语言将面向对象程序设计的概念
定义为,在基础运算中,对对象和消息的广泛应用。Smalltalk 的创建者深受 Simula 67
的主要思想影响,但 Smalltalk 中的对象是完全动态的——它们可以被创建、修改并销毁,
这与 Simula 中的静态对象有所区别。此外,Smalltalk 还引入了继承性的思想,它因此
一举超越了不可创建实例的程序设计模型和不具备继承性的 Simula。此外,Simula 67
的思想亦被应用在许多不同的语言,如 Lisp、Pascal。
评论0
最新资源