关于OO及虚拟机的简单认识

一、OO

OO (Object Orient) 本来是编译器的事儿,是程序高手让编译器能够编译数据与函数的封装及继承等语法,以便提高代码的可读性及复用性 。

大的计算机系统复杂性的增加及软件开发量的不断加大使 OO 逐渐成为把事情理清楚、弄简单的好办法,于是各编译工具(包含在开发环境之中)的供应商不断推出 OO 编译器,实现大系统的 OO 理论也迅速发展 。然而对于小的应用程序开发,是否 OO 倒没多大区别 。

OO 终归是编译器支持的语法,OO 编译之后的结果还是机器指令与对操作系统 API 的调用,所以 OO 支持的语言实际上是编译器在机器指令与操作系统 API 之上定义的语言 。进一步,OO 编译器支持的语言就是标准 OO 语言(主要由编译器支持)与操作系统特色 OO 语言(主要由操作系统支持)的累加,有人说其比例是 3 比 7 。所以某一种 OO 语言的实现能力主要是由编译器与操作系统 API 共同决定的,当然其配套的 IDE 对程序员的影响也很大 。

OO 语法在最终对编译器产生决定性影响后――当然从此对软件开发人员也形成决定性影响,开始对行业产生更大的影响 。

OO 思想对操作系统 API 及应用软件的也产生了影响,与编译器支持 OO 的形式是类库不一样,操作系统对 OO 的支持形式主要是组件,类库与组件之间没有任何必然的联系――尽管组件像是类的编译结果 。这两种开发形式对程序员开发来说没有多大区别――都是在基本 OO 库的基础上制作自己的 OO 库 。但是对于 OO 库的应用来说有区别,编译器支持的 OO 只能支持代码库的复用,而操作系统支持的 OO 除此之外还可以支持应用程序、应用系统的复用 。另外,操作系统的 API 也开始向 OO 的形式转变――尽管其内部结构变化不大 。

二、虚拟机

虚拟机是一个应用程序,为每种操作系统的开发了一个版本,它提供一组标准的 API(有的还提供实时编译器),仿真一个标准的CPU及操作系统的 API 集,在其之上的应用程序可以像运行在一个真实的CPU与操作系统之上一样 。虚拟机实际上主要做的是从其自定义的 API 到操作系统 API 之间的“翻译工作” 。虚拟机的好处是程序员的程序可以在操作系统之间复用,另一个好处是可以增加操作系统的安全可靠性――相当于又增加了一个系统运行级别 。

与 OO 的发展原因相似,大的计算机系统复杂性的增加及应用的不断增加使基于多操作系统的开发要求越来越多,虚拟机及其之上的标准组件库显然是减少开发量、增加复用的好选择 。然而对于小的应用程序开发,是否用虚拟机倒没多大区别 。

三、OO 与虚拟机

OO 与虚拟机没有必然的联系 。基于虚拟机进行设计的编译器供应商如果提供支持 OO 的编译器,那程序员就用 OO 开发;如果提供的不是 OO 编译器而是如 BASIC 编译器,那就用 BASIC 语言进行开发――当然到目前为止这只是一种假设 。

OO 与虚拟机的本质是一样的――都是为了复用,所以其二者的结合逐渐成为大型系统的开发的主要模式,进一步引得大的系统供应商竞相把自己的系统向这种模式转移、转变 。

四、各种 OO、各种虚拟机之间的竞争

OO 思想不会有竞争的,竞争的是编译器(及其定义的语法) 。但编译器主要依赖于虚拟机,所以虚拟机的竞争是主要的 。如果虚拟机都是一套标准的模式,那很快就会抹平竞争优势,这是不现实的,所以各虚拟机的性能会迅速提高、组件会迅速增多,但这又与跨操作系统发生冲突 。

说到底,OO 编译器、虚拟机都是开发工具,加上底层的操作系统的不同支持,供应商会在平台的广泛适用与高级功能之间不停地进行竞争、平衡,这大概会是未来很长一段时间的主要竞争模式 。进一步,整个行业应用程序开发都将向这种模式转变 。

推荐阅读