艾伦·凯曾说,“I made up the term object-oriented, and I can tell you I did not have C++ in mind.”(“我发明了术语‘面向对象’,可以告诉您我没有C++”)。
今天看到这句话,激发了笔者写一篇文章聊聊C++与面向对象思想的关系。
正统的面向对象思想
艾伦·凯(Alan Kay)是计算机科学家,是面向对象编程(Object-Oriented Programming,简称OOP)的发明者。他在1960年代和1970年代的工作对个人计算机和现代编程概念产生了深远影响。
艾伦·凯对面向对象编程的理解强调以下几个核心概念:
-
封装:对象应该将其状态和行为封装起来,隐藏内部实现的细节,只暴露有限的接口与外界交互。而C++提供friend等机制破坏了内部的隐藏。
-
消息传递:对象之间的交互应该通过发送消息来完成,而C++将这些消息理解成调用其他对象的方法。
-
动态绑定:系统在运行时决定哪个代码将被执行,而不是像C++这样在编译时固定下来。
-
原型继承:对象可以通过克隆现有的对象(原型)来创建新对象,并可能在此基础上进行修改,这与C++基于类的继承是不同的。
因此,艾伦·凯的这句话认为C++并没有完全捕捉到他最初提出的面向对象编程的精