所有编程语言都提供抽象机制
人们通过计算机所能够解决的问题的复杂性取决于抽象的类型质量。所谓的“类型”是指“所抽象的是什么?” 举个例子: 汇编语言是对底层机器的轻微抽象; 命令式语言是对汇编语言的抽象; 上面两种语言所抽象的内容基于计算机的结构,而不是基于所要解决的问题的结构来考虑。
而面向对象思想的实质是:程序可以通过新类型的对象使自身适用于某个特定的问题。就是说,编写的代码一方面是对问题的解决,另一方面也是对问题的描述。所以,面向对象允许根据问题来描述问题,而不是根据运行解决方案的计算机来描述问题。理解面向对象可以把每个对象看做一台微型计算机--这台计算机具有状态,具有操作,用户可以根据这些对象执行对应的操作
Alan Kay曾经总结了第一个成功的面向对象语言,同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了一种纯粹的面向对象程序设计方式: 1)万物皆对象 2)程序是对象的集合,它们通过发送消息来告知彼此所要做的 3)每个对象都有自己的由其他对象所构成的存储,换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象。因此,可以在程序中构建复杂的体系,同时将其复杂性隐藏在对象的简单性背后 4)每个对象都拥有其类型也就是类,每个class,类和类型相同 5)某一特定类型的所有对象都可以接收同样的消息,体现了继承的思想
Booach对象提出了一个更加简洁的描述:对象具有状态、行为和标识