//本文编译自BruceEckel的Thinking in Java, 3rd edition一书
编程语言发展的历史上,汇编语言是对机器语言的抽象,Basic/C/Fortran这种命令式语言(Imperative Language)是对汇编的抽象,C/Basic/Fortran较之汇编有了较大的提升,但用这些语言书写程序时仍然要花很大气力在机器模型和问题模型之间建立联系,这种在问题实体和问题解决系统之间做映射的过程使得程序难写且不易维护。
Lisp和APL选择了一些世界观,如“所有的问题归根结底是列表”,“所有的问题都是可演算的”。而Prolog把所有的解决问题看作是做作一连串的选择……这些各种各样的编程语言所代表的观点在各自擅长的领域表现得不错,但一旦出了作者设计该语言时所针对的领域便力不从心。
直到OOP的出现,面向对象为程序员提供了工具来表示问题中的元素,这些工具能用在各种各样的问题当中,我们把这些元素及其在程序中的表示叫做对象(objects)。这样通过增加新类型的对象,程序可以更加适应问题的实际需求(原文:The idea is that the program is allowed to adapt itself to the lingo of the
problem by adding new types of objects.)。而描述问题解决方案的程序实际上也描述了问题本身。这种强有力的抽象超越了以前的所有尝试。因此,面向对象允许用问题的语言而不是机器的语言描述问题。
这里作者Bruce Eckel引用了Alan Kay总结的Smalltalk的五个特性:
(*Smalltalk是历史上第一个成功的面向对象编程语言,Java和Objective-C都从中获得了灵感* 自注)
1.万物皆对象(Everyingthing is an object.)
2.程序是一群对象在互相传递信息(A program is a bunch of objects telling each other
what to do by sending messages.)[注:Smalltalk是典型的消息结构的编程语言]
3.每个对象所存储的内容都是由其他对象组成的(Each object has its own memory made up of other
objects.)
4.每个对象都有类型(Every object has a type.)
5.同一种类型的对象总是可以接受同类的消息(All objects of a particular type can receive the same
messages.)
Booch(UML发明者之一)则有言简意赅的描述:
对象有状态,行为和标识。 (An object has state, behaviour and identity.)
[未完待续……]