什么是"面向对象编程"?(1991修订版)
What is "Object-Oriented Programming"(1991 revised version)
Bjarne Stoustrup
AT&T Bell Laboratories
Murray Hill,New Jersey 07974
张珺译
Zhangjun@huawei.com
译者序
不要将本文简单地视为是对C++特征的一个介绍。它的意义在于,一方面介绍了编程风格的演变,以及这种演变背后的动机
。另一个方面,它特别澄清了基于对象的(OB)和面向对象(OO)的异同,这是具有很大意义的。我们可以看到,
不管是OB还是OO,都不过是一种程序的组织形式。 这在很大程序上指出了OO着眼于解决什么样的问题
(程序如何组织才能有弹性,容易重用和理解),而不解决什么问题(数据结构的设计,算法的设计)等等。
摘要
“面向对象编程”和“数据抽象”已经成为常用的编程术语,然而,很少有人能够就它们的含义取得一致的认识;本文以Ada,C++,Module 2,Simula和Smalltalk等语言为背景对此给出一个非正式的定义。基本的想法是将“支持数据抽象”等同于定义和使用新数据类型的能力,而将“支持面向对象编程”等同于对类层次的表达能力。同时,还讨论了通用编程语言为支持此种编程风格而必须提供的机制。文中虽然采用C++来表述问题,但其讨论的范围并不仅限于这个语言。
1 介绍
并不是所有的语言都是面向对象的。一般认为,APL,Ada,Clu,C++,LOOPS和Smalltalk是面向对象的,我也曾经听说过关于使用C, Pascal,Module-2,和CHILL进行面向对象设计的讨论。那么是否可以尝试使用Fortran和Cobol来进行面向对象设计呢?我认为那也一定是可行的。在很多圈子里,“面向对象”已经成为“优秀”的高科技代名词,在商业出版领域可以看到有以下的三段论:
Ada是优秀的
面向对象是优秀的
所以Ada是面向对象的
本文从通用编程语言的角度出发陈述了“面向对象”技术的概貌:
第2节比较了数据抽象和面向对象之间的异同,也将它们和其他的编程风格做了区分;同时,指出了为了支持不同的编程风格所需的重要机制。
第3节陈述了为高效地支持数据抽象所需的语言机制。
第4节讨论了支持面向对象所需的设施。
第5节陈述了传统硬件体系结构和操作系统对于数据抽象和面向对象编程施加的限制。
文中例子程序使用C++来书写,这部分是出于介绍C++的目的,部分是因为C++是少数几个同时支持数据抽象,面向对象程序设计和传统编程风格的语言。本文不讨论为支持特定高层语言特性而涉及的并发性和特殊硬件支持。
2.编程风格(Programming Paradigms)
面向对象编程是一种用来针对一类问题编写优质代码的编程技术。一个语言称为是“面向对象”的如果它支持(Support)面向对象风格的编程。
在这里存在一个重要的区别。一个语言称为是“支持”某种风格的编程技术的,如果它提供了便于实施(方便地,安全地和高效地)该种风格编程的手段;反之,如果需要使用额外的技能和手段来获得基于某种风格的编码,则这个语言就是不“支持”该种编程风格的,我们只能说这个语言“使能”(Enable)了某种编程风格。举例来说,人们可以使用Fortran编写结构化程序,使用C语言编写类型安全的程序,在Module-2中使用数据抽象技术,但是,这些任务都具有不必要的困难性,因为这些语言都不“支持”那些编程风格。
对于某种编程风格的支持不仅意味着语言提供明确的并且可以直接使用的编程手段,而且还意味着在编译时间和运行时间提供某种检查,以防止代码无意中偏离了该种风格。类型检查是一个特别明显的例子,二义性检查和运行时间检查也可以扩充语言支持特定编程风格的能力。同时,象标准库和编程环境等等都可以增强这种支持。
并不一定说一个语言如果支持了某种特性,则它就一定优于其他没有支持该特性的语言。在这里存在着太多的反例。重要的不是一个语言具有多少特性,而是它具有的特性是否能够在特定的领域内足以支持特定的编程风格。
上一页 下一页






