Smalltalk 是19世纪70年代由 Alan Kay 设计的,第一个以面向对象(Object-Orientation)为主要范式的编程语言 1。Smalltalk 具有大量首创的特性,深刻影响了其之后的编程语言、开发环境和软件过程。
由 Smalltalk 开始的面向对象的设计思想影响了后来出现的 C++,Objective-C,Python,Java,Ruby,C# 等众多编程语言,甚至在以函数式著称的 Lisp 和逻辑编程语言 Prolog 当中也演化出了功能强大的对象系统23。在所有编程范式当中,面向对象的编程范式毫无疑问取得了突出的成功。究其原因,一方面在于面向对象的设计一般易于描述和理解,而针对对象系统的建模、分析和可视化工具也得到长足的发展;其次,面向对象的诸多实践4如模块化(Modulariry)、复用(Reusability)等优化了软件行业的经济效益(Economic benefits)5。这些原因使得面向对象的设计方法和软件系统得到了从个人到企业的广泛采用(Adoption)。
面向对象的核心思想之一是封装(Encapsulation),与之类似的一个概念是闭包(Closure),后者在提供一阶函数(First-class function)的编程语言内普遍存在。在对闭包与对象的比较上有很多精彩的争论67,将闭包作为底层机制来实现对象系统在函数式编程语言中屡见不鲜89,而早期的面向对象的编程语言也在发展过程中不断吸收函数式编程的诸多