日期:2009-07-24  浏览次数:20626 次

5. OO之后是什么?

通过上节的讨论我们了解了维特根斯坦在《逻辑哲学论》一书中提出的OO的思想。即存在如下的认识链: 世界 → 事实 → 原子事实 → 对象(object)。本节我们讨论OO之后是什么这个问题。我们将从历史的和逻辑的角度来进行推理,看看能得出什么样的结论。

一、 从软件工程的发展历史来看

1969年NATO会议之后,“软件危机”成为人们关注的焦点。为迎接软件危机的挑战,人们进行了不懈的努力。这些努力大致上是沿着两个方向同时进行的。一是从管理的角度,希望实现软件开发过程的工程化。这方面最为著名的成果就是提出了大家都很熟悉的“瀑布式”生命周期模型。它是在60年代末“软件危机”后出现的第一个生命周期模型。如下所示。

分析 → 设计 → 编码 → 测试 → 维护

后来,又有人针对该模型的不足,提出了快速原型法、螺旋模型、喷泉模型等对“瀑布式”生命周期模型进行补充。现在,它们在软件开发的实践中被广泛采用。

这方面的努力,还使人们认识到了文档的标准以及开发者之间、开发者与用户之间的交流方式的重要性。一些重要文档格式的标准被确定下来,包括变量、符号的命名规则以及原代码的规范格式。

值得一提的是,在开发者之间、开发者与用户之间的交流方式这方面,由于Internet的出现提供了一种全新的交流手段,也产生了一种基于Internet的全新的开发方式,即OSS(Open Source Software)。 其代表作有Linux(操作系统),Apeche(web server),Sendmail(Mail server)等。OSS是一种极有前途的开发方式,借Internet发展的大潮,它势必会对整个软件开发模型产生难以估量的影响。近期的IEEE软件工程专刊将为次出一期专题特刊。1999年1月份也将举行关于Linux/OSS的国际研讨会。各家计算机公司纷纷对此作出反应,微软也意识到了来自OSS的巨大威胁,在8月底提出了一份内部保密的文件,专门提出了自己的应对策略,可谓是山雨欲来风满楼。有兴趣者请对此保持关注。

软件工程发展的第二个方向,侧重与对软件开发过程中分析、设计的方法的研究。这方面的第一个重要成果就是在70年代风靡一时的结构化开发方法,即PO(面向过程的开发或结构话方法)。 PO是人们在用计算机世界来表达现实世界时,追求过程话、模块化、封装以及更高的抽象的结果。 人们用计算机来映射现实世界时,最低层的实现无非是靠数字电路技术产生的高电平与低电平信号。用数学的语言来表示,就是像 010101000010111 这样的二进制串。这样的抽象层次是极低的,远离了自然语言,对一般人是不可理解的。人们把这些二进制串分块定义,提出了字节、ASCII码这样的更高抽象层次的概念,使之对应于自然语言的一个个字母。在此基础再借助某种形式语言,抽象出变量、表达式、运算、语句等概念。在这个层面上,一般经过训练的程序员已经可以比较不那么痛苦地进行软件开发了。下一步的抽象就产生了PO。 在PO中,人们关注的是如何用函数和过程来实现对现实世界的模拟,将其映射到计算机世界之中。 OO是这种抽象层次不断提高的过程的自然发展结果,它采用类和对象的概念,把变量以及对变量进行操作的函数和过程封装在一起,用这种更高一级的抽象来表达客观世界。通常,一个对象包含一些属性和方法,它对应于自然语言中一个有意义的名词,描述了现实世界中的一个物体(物理实体)或概念(抽象实体)。 这个抽象层次如下图所示:

计算机世界中的抽象层次

*XO(X?-Oriented) 最高的抽象层次
*OO(对象、类)
*PO(过程、函数、变量)
*变量、运算、表达式、语句
*字节(4位、8位、16位、32位、64位)
*二进制串 0101011110001 最低的抽象层次

从上图及以上的讨论我们知道,软件工程的发展历史就是人们不断追求更高的抽象、封装和模块化的历史。OO当然不会是历史的终结。尽管不能精确得到OO之后是什么,我们至少可以推知,OO之后的XO,必然将是比OO更高一级的抽象。它所依赖的核心概念必然高于并包容对象这一概念。正如对象高于并包容了函数和变量一样。


二、 从维特根斯坦在《逻辑哲学论》一书中的思想来看

前面我们已经知道,维特根斯坦在《逻辑哲学论》 一书中提出了如下思想:

*世界可以分解为事实 ( The world divides into facts.)
*事实是由原子事实(atomic facts)组成的。
*一个原子事实是多个对象(objects)的组合。
*对象是简单的(基本的) The Object is simple。
*对象形成了世界的基础。

即: 世界---事实----原子事实----对象这样一个从整体到局部、从抽象到具体的认识之链。在这个层次中,对象作为最基本的模块,构成了整个认识大厦的基石。对象通过相互之间的复杂的关联构成了整个世界。这个观点也是面向对象理论的基石。

上一段我们通过对计算机世界的分析得出,OO之后的发展,必将产生比OO更高一级的抽象的概念用于编程。按照维特根斯坦的思想可以很自然地得出结论:这个概念就是事实(FACT)。即面向对象之后是面向事实,OO之后是FO(Fact-Oriented)。

那么,什么是事实(fact)?让我们再次重温一下维特根斯坦的观点。

首先,世界是所有事实的总和。世界可以分解为事实。任一事实或者为真,或者不为真。(即事实应返回一个布尔变量,或为TRUE,或为FALSE)
其次,那些为真的事实,是由原子事实(atomic facts)组成的。
原子事实和简单对象的关系是这样的:一个原子事实是多个对象(object)的组合。在原子事实中,对象以某种确定的方式相连。原子事实中对象相互连接的方式即是原子事实的结构。 也就是说,原子事实是有结构的,这种结构被维特根斯坦看作是现实世界的模式(form)。

这里,维特根斯坦提出了几个重要的概念:事实(fact)、原子事实(atomic fact)和模式(form)。

如果我们以上的推理过程正确的话,我们将得出一个结论:面向对象(OO)之后是面向事实(FO),在面向事实(FO)的分析、设计和编程中,我们将主要围绕事实(fact)、原子事实(atomic fact)和模式(form)这些基本概念来组织我们的软件开发活动。在人们认识世界的层次结构中,这些概念是比对象(object)和类(class)更高一级的抽象。