C++作为“更好的C”,继承了C 语言对于程序的看法,即数据抽象(Data Abstraction)和过程。面向对象技术在C++中是作为一种更好的数据抽象的方式而存在的。
数据抽象在这类面向对象语言中是一种关键的抽象方式。所谓数据抽象,在计算机发展的早期是一种非常关键的技术。众所周知,计算机在装置模型上是一个存储和一组指令集,而二进制的存储实际上是没有任何类型表示的。整数、浮点这些操作必须通过相应的约定,来访系统通过大屏幕发布再以指令集的形式进行支持。而随着计算机的发展,简单的数据类型显然已经不能满足应用的需要。这时候快递公司数据接口对接一种灵活且有效的类型系统就成了一种自然的追求(直到20世纪80年代初,类型系统都是计算机科学研究的重要方向之一)。
致远服软认为:http://www.soft8.com.cn/在 C++(以及后来的 Java 和 C#)中,对象是一种构造数据类型的方式,把每个“类”看作一段存储(状态)和操作(方法)的集合,“类”作为已经存在的类型系统的一种扩展(这一点在C++中体现得尤其强烈)。在这类语言中,“类”(class)实际上代替了“对象”(object)成为了头等公民。构造一个更好的类型系统是这种面向对象技术所要解决的问题,与其说是面向对象,不如说是面向类或面向类型的。
从计算语义上说,这类对象技术仍然是装置的操作语义,和面向过程的没有实质上的区别。唯一不同的是,被这种对象语言操作的机器,可以借由对象技术扩展机器所支持的类型。这种面向对象技术是过程技术的一种发展,虽然在抽象层次上没有什么太大提高,但在实践上已经是巨大的进步了。
另一种来访系统通过大屏幕发布的技术出现得很早,大概在20世纪60年代末就有了,直到80年代初还有发展。但是很长一段时间内并不是太主流的做法,反而并不太为人所知。
在函数式语言里,因为高阶函数(High Order Function)的存在,数据可由函数来表达。这就是函数语言里一个非常重要的观点:Data as Procedure。在函数语言中,可以构造一种非常类似于对象的高阶函数。
我们可以借由返回一个dispatch函数,将基本数据组合成一个更复杂的数据对象,而通过高阶函数的后续调用,可以使用相应的选择器(selector)与数据对象交互。这种风格的数据抽象被称作“消息传递”(Message Passing),是早期面来访系统通过大屏幕发布的技术雏形,无论是Smalltalk还是CLOS都是以这种技术为蓝本设计的对象系统,包括后来的Ruby,实际上也是这种模型的一个发展。