Alan Kay曾经总结了第一个成功的面向对象语言Smalltalk的五个基本特性,这些特性表现了一种纯粹的面向对象程序设计方式:

  1. 万物皆为对象

    将对象视为奇特的变量,它可以存储数据,你还可以要求它在自身上执行操作。

    理论上讲,你可以抽取待求解问题的任何概念化构件(狗、建筑物、服务等),将其表示为程序中的对象。

  2. 程序是对象的集合,它们通过发送消息来告知彼此所要做的

    要想请求一个对象,就必须对该对象发送一条消息。具体地说,可以把消息想像为对某个特定对象的方法的调用请求。

  3. 每个对象都有自己的由其他对象所构成的存储

    可以通过创建包含现有对象的方式来创建新类型的对象。因此,可以在程序中构建复杂的体系,同时将其复杂性隐藏在对象的简单性背后。

  4. 每个对象都拥有其类型

    「每个对象都是某个类的一个实例」。每个类最重要的区别于其他类的特性就是「可以发送什么样的消息给它」。

  5. 某一特定类型的所有对象都可以接收同样的消息

    因为「圆形」类型的对象同时也是「几何形」类型的对象。所以一个「圆形」对象必定能够接受发送给「几何形」对象的消息。这意味着可以编写与「几何形」交互并自动处理所有与几何形性质相关的事物的代码。这种可替代性(substitutability)是OOP中最强有力的概念之一。 [ˌsəbstəˌtjʊtə’bɪlətɪ]

Booch提出了一个更简洁的描述:对象具有状态、行为和标识——每一个对象都可以拥有内部数据(状态)和方法(行为)。并且每一个对象都可以唯一地与其他对象区分开来。

来自Java编程思想4