陆伟
(无锡职业技术学院,江苏无锡 214121)
哲学与面向对象的关系及软件开发的发展方向
陆伟
(无锡职业技术学院,江苏无锡 214121)
本文主要就哲学和面向对象从软件工程的发展到面向对象方法的产生做了简单的介绍,同时概要的描述了面向对象方法,也从哲学的角度对软件工程的发展方向作出了适当的猜测。
面向过程(PO) 面向对象(OO) 对象(OBJECT) 事实(FACT)
软件开发的过程就是人们使用各种计算机语言将人们关心的现实世界映射到计算机世界的过程。这方面的第一个重要成果就是在70年代风靡一时的结构化开发方法,即面向过程的开发或结构化方法(PO)。面向过程方法是人们在用计算机世界来表达现实世界时,追求过程化、模块化、封装以及更高的抽象的结果。人们使用计算机来映射现实世界时,最低层的实现无非是靠数字电路技术产生的高电平与低电平信号,用数学的语言来表示,就是像0和1这样的二进制码,这样的抽象层次是极低的,远离了自然语言,对一般人是不可理解的。人们把这些二进制串分块定义,提出了字节、ASCII码这样的更高抽象层次的概念,使之对应于自然语言的一个个字母。在此基础再借助某种形式语言,抽象出变量、表达式、运算、语句等概念,下一步的抽象就产生了面向过程方法。在面向过程方法中,人们关注的是如何用函数和过程来实现对现实世界的模拟,将其映射到计算机世界之中。但是到了七十年代末期,软件行业受到软件危机的困扰,面向过程这种结构化的开发方法不能够很好地解决软件危机,面向对象这种全新概念的方法由此出现。
对象是人脑中的物质意识和精神意识,通俗地讲,就是事物在人脑中的映象和人脑对事物的意向,对象不是实体,它可以脱离实体而存在,对象之间也可以包含对象。对象(Object)一词,早在十九世纪就有现象学大师胡塞尔提出并定义,对象是世界中的物体在人脑中的映象,是人的意识之所以为意识的反映,是做为一种概念而存在的先念的东西,它还包括了人的意愿。对象就是客观世界中物体在人脑中的映象及人的意向。只要这个对象存在我们的思维意识当中,我们就可以借此判断同类的东西,这是哲学意义上的对象。我们经常所说的“对象”,一般指的是解决信息领域内所遇到问题的方法,特别是应用软件技术来解决问题的方法。如我们经常碰到的面向对象的编程(Object-Oriented Programming)、面向对象的分析(Object-Oriented Analysis)、面向对象的设计(Object-Oriented Design)等。应用前面所介绍的关于对象的概念,可以对这些问题做进一步的分析。在面向较复杂的系统,我们可以将它作为一个对象来进行分析。一个系统,或者说解决某个问题的全套解决方案,作为一个对象来看,可以由多个部分组成。同样,这个对象也可以由多个对象组成。对于同类的事物,可以由一个对象来表示。
哲学家维特跟斯坦(Wittgenstein),在哲学史上第一次清楚地表达了对象的思想,更进一步提及了以后的事情。他在他的著作《逻辑哲学论》(Tractatus Logico-Philosophicus)中阐述了一种世界观,或者说一种认识世界的观点,这种观点,在六七十年后的今天,终于由一种哲学思想沉淀到技术的层面上来,成为计算机业界的宠儿,这就是面向对象(OO)-----(Object-Oriented)。他的思想主要可以概括为:世界由实际发生的一切事实(facts)所组成;事实(facts)由原子事实(atomic facts)所组成;原子事实(atomic facts)由更基本的对象(objects)所组成;我们的关于外部世界的主观描述图画,与它所描述的外部世界具有相同的逻辑结构;我们的思想与客观世界是逻辑同构的;语言的极限就是世界的极限,等等。中心思想是(1)世界可以分解为事实(The world divides into facts),(2)事实是由原子事实(atomic facts)组成的。(3)一个原子事实是多个对象(objects)的组合。(4)对象是基本的(The Object is simple)。(5)对象形成了世界的基础。即:世界---事实----原子事实----对象,这样一个从整体到局部、从抽象到具体的认识链,在这个层次中,对象作为最基本的模块,构成了整个认识大厦的基石。对象通过相互之间的复杂的关联构成了整个世界,这个观点也是面向对象理论的基石。
面向对象是人们认识客观世界的抽象层次不断提高的过程的发展结果,它采用类和对象的概念,把变量以及对变量进行操作的函数和过程封装在一起,用这种更高一级的抽象来表达客观世界。面向对象方法起源于六十年代末期,它是一种新的认知和表示世界的分析方法、设计方法和思维方法。面向对象方法学的出发点和所追求的基本目标是使人们分析、设计与实现一个系统的方法尽可能接近人们认识一个系统的方法。也就是使描述问题的问题空间和解决问题的方法空间在结构上尽可能一致。其基本思想是:对问题空间进行自然分割,以更接近人类思维的方式建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计出的软件尽可能直接地描述现实世界,构造出模块化的、可重用的、维护性好的软件,同时限制软件的复杂性和降低开发维护费用。
面向对象方法在软件开发中对方案的解决具有很大的好处,在设计优秀合理的情况下尤其如此,人们可以只编写一次代码而在今后能够反复重用,面向对象编程减少了编写代码的总量,加快了开发的进度,也同时降低了软件中的错误量。同时面向对象技术也为软件工业实现工程化提供了强有力的支持。
人们提出了许多面向对象的计算机程序设计语言、面向对象的软件设计方法、面向对象的数据库等等。自80年代后期以来,相继出现的多种面向对象开发的方法有O M T(O b j e c t M o d e l i n g Technique),OOD(Object Oriented Design),RDD(Responsibility-Driven Design),OOAD(Object-Oriented Analysis and Design),OOSE(Object-Oriented Software Engineering)和VMT(Visual Modeling Technique)等等,C++,Objective-C,Object Pascal,CLOS(Common Lisp Object System),Eiffel,Actor这些语言也相继出现。面向对象方法已经发展成一种完整的方法论和系统化的技术体系。
那么面向对象方法之后呢,软件工程的发展方向又应该是什么呢?由上面的讨论可以知道,软件工程的发展历史就是人们不断追求更高的抽象、封装和模块化的历史。由维特根斯坦在《逻辑哲学论》中提出的思想得知,比对象更为抽象的概念是“事实(FACT)”,即面向对象之后是面向事实,OO之后是FO(Fact-Oriented)。在他的哲学思想上来说,世界是所有事实的总和,世界可以分解为事实。任一事实或者为真,或者不为真。其次,那些为真的事实,是由原子事实(atomic facts)组成的。原子事实和简单对象的关系是一个原子事实是多个对象(object)的组合。在原子事实中,对象以某种确定的方式相连。原子事实中对象相互连接的方式即是原子事实的结构。也就是说,原子事实是有结构的,这种结构被维特根斯坦看作是现实世界的模式(form)。这里有几个重要的概念:事实(fact)、原子事实(atomic fact)和模式(form)。这样可以知道面向对象(OO)之后是面向事实(FO),在面向事实(FO)的分析、设计和编程中,我们将主要围绕事实(fact)、原子事实(atomic fact)和模式(form)这些基本概念来组织我们的软件开发活动。在人们认识世界的层次结构中,这些概念是比对象(object)和类(class)更高一级的抽象。
那么面向事实以后又该是什么呢,这在哲学上看来这个问题似乎是无法解决的,它表明,存在一个极限。首先,要知道,软件的实质是人们以计算机编程语言为桥梁,将客观感知世界映射于计算机世界中去,以解决人们在客观感知世界中要解决的问题。这里牵涉三个主要的范畴:客观世界,计算机编程语言和计算机世界,计算机方面很显然,在单片CHIP上集成的元件个数总会有限,发展不可能无限进行下去,软件直接受硬件的发展限制;计算机编程语言方面,人们利用软件解决问题,总会求助于数学上的算法,如果一个问题根本没有算法,那么肯定是得不到解决的,还有一些问题,虽然理论上存在算法,但在人类有限的时间和空间里也同样不可能得到解决,这类的问题人们也是束手无策;再看客观世界,人们总是不断在用自己的主观思维来描述身边的客观世界,人类的主观思维充斥着自己离奇古怪的幻想和起伏不定的情绪,具有极大的跳跃性和不确定性,常常以直觉、想象的方式进行着自己的活动,通常是语言所不能表达的,也就更谈不上用程序去表达,软件开发者的这个主观想象世界很大程度上地影响着软件的开发,这里存在一个极限。维特根斯坦在《逻辑哲学论》中有一句话清楚地表达了这种思想:“对于那些不可言说的,必须保持沉默(Whereof one cannot speak,thereof one must be silent)。”
[1]全增暇,主编.《西方哲学史》.1996年.
[2]李光志,等.对象分析与设计方法比较.电子工业出版社,1996年.
[3]冯玉琳,等.对象技术导论.科学出版社,1998年.
[4]邵维忠,杨芙清.面向对象的分析.清华大学出版社,1998年.