面向对象编程背后的理论

Tin*_*nku 25 oop

Alonzo Church的lambda演算是函数式语言背后的数学理论.面向对象编程有一些形式理论吗?

Rol*_*ler 17

面向对象来自心理学而非数学.

如果你考虑一下,它就像人类工作的方式更像计算机的工作方式.我们认为在我们分类的对象中.例如,这张桌子是一个座椅家具.

Jean Piaget(1896-1980)为例,他研究儿童认知发展理论. 维基百科说:

皮亚杰在计算机科学和人工智能领域也有相当大的影响力.

他发现的一些认知概念(暗示了面向对象的概念):

分类 基于共同特征将对象分组在一起的能力.

类包含比简单分类更先进的理解是,某些类或对象集也是更大类的子集.(例如,有一类叫做狗的物体.还有一类叫做动物.但是所有的狗都是动物,所以这类动物包括狗的动物)

阅读更多:伯爵的发展理论http://www.learningandteaching.info/learning/piaget.htm#ixzz1CipJeXyZ


Mar*_*ers 5

OOP是一种混合功能,各种语言以稍微不同的方式实现.OOP没有单一的正式定义,但许多人试图根据声称面向对象的语言的共同特征来描述OOP.来自维基百科:

Benjamin Cuire Pierce和其他一些研究人员认为任何将OOP提炼到最小特征的尝试都是徒劳的.尽管如此,他仍然确定了在大多数面向对象语言中支持OOP编程风格的基本功能:

  • 动态分派 - 当在对象上调用方法时,对象本身通过在与对象关联的表中在运行时查找方法来确定执行哪些代码.此功能将对象与抽象数据类型(或模块)区分开来,后者具有所有实例的操作的固定(静态)实现.它是一种编程方法,可以提供模块化组件开发,同时非常高效.
  • 封装(或多方法,在这种情况下,状态保持独立)
  • 亚型多态性
  • 对象继承(或委托)
  • 打开递归 - 一个特殊的变量(在语法上它可能是一个关键字),通常称为this或self,它允许方法体调用同一个对象的另一个方法体.这个变量是后期的; 它允许在一个类中定义的方法在其某些子类中调用稍后定义的另一个方法.


小智 5

阿巴迪和卡德利写了《对象理论》,你可能想研究一下。另一个阐述是古老的 TAPL(IIRC,它们将对象视为类型化 lambda 演算中的递归记录)。我对这个东西了解不多。


Cal*_*ain 2

我会查看 OO 上的维基百科页面http://en.wikipedia.org/wiki/Object-oriented_programming 它有原理、基础知识和历史。

我的理解是,这是各种语言的功能和思想的进化过程,最终在 90 年代推动 GUI 成为主流。但我可能是大错特错了:-D

编辑:更有趣的是,人们仍然争论“什么使 OO 语言成为 OO”……我不确定定义 OO 语言的功能集是否得到普遍认可。