面向对象的编程与维特根斯坦 ( 转)上(1 / 2)

加入书签

 1、什么是软件开发?

软件开发的过程就是人们使用各种计算机语言将人们关心的现实世界映射到计算机

世界的过程;

现在的计算机的数学理论基础是由计算机的开山鼻祖,大名鼎鼎的图灵于1937年提出

的图灵机模型。随后不到十年,电子计算机就诞生了(1945)。(埃尼亚克)

我们都知道,它当时的主要任务之一就是用于导弹弹道轨迹的计算。当时的软件开发

(如果可以称之为软件开发的话)与现在的大不相同。为了算一道题,要有人事先把完成

加减乘除等各类运算的部件像搭积木那样搭起来,如果换一道题,则要把这些部件分解

开来,根据新的要求重新搭建,效率极低(与现在比)。

现代电子计算机的体系结构及实际计算模型来自冯.诺依曼的思想。1946年他和他的

同事们发现了埃尼亚克的缺陷,发表了一份报告,提出了程序放入内存,顺序执行的思想

,这样,当算一道新题时就只需采取改变计算机中的程序的“软”的方法。

英国的科学家维尔克斯实现了冯.诺依曼的思想,领导研制了“艾克萨克”,在技术

上比埃尼亚克来了个大的飞跃。

因此,现在的计算机通常被称为冯.诺依曼计算机。

软件开发的历史也从此正式开始。

早期程序员们使用机器语言来进行编程运算;随着编译技术的出现,人们设计了许多

更高级别的语言;这些语言摆脱了机器语言繁琐的细节,更接近于人的自然语言,迅速流

行开来。

据统计,全世界的高级语言起码有几千种,但从可计算性的角度看,它们的计算能力

都等价于图灵机。已经证明,一个计算机语言,只要除了赋值语句之外,还包括顺序语

句,条件语句和循环语句,它的计算能力即相当于图灵机。

这里当然要排除其他技术因素的影响,如程序长度,变量个数,数据精度等。

由于图灵机的想法是把问题转化为一步一步按规则执行的机械求解过程,各种计算

机语言也不过都是某种形式语言,因此软件开发的过程实质上就是程序员们对客观世界问

题域的形式化的过程。

程序员们先建立问题的模型(形式化),再用计算机语言加以合适的表达,最后再输入

计算机里进行计算。

2从PO(面向过程)到OO(面向对象)

从上一节的论述我们知道:

软件开发的过程就是人们使用各种计算机语言将人们关心的现实世界(问题域)映射到

计算机世界的过程;如下图:

现实世界问题域-----建立模型(借助某种建模思想)------编程实现

(借助某种编程语言)-------计算机世界执行求解

在谈论OO之前,先让我们回顾一下高级语言的历史.

最早的高级语言大约诞生于1945年,是德国人楚译为他的Z-4计算机设计的Plan

Calcul,比第一台电子计算机还早几个月;在电子计算机上实现的第一个高级语言是美国

尤尼法克公司于1952年研制成功的ShortCode;而真正得到推广使用,

至今仍在流行的第一个高级语言是美国的计算机科学家巴科斯设计,并于1956年首先在

IBM公司的计算机上实现的FORTRAN语言.

早期的高级语言主要是应用于科学和工程计算,其代表作有FORTRAN和ALGOL60.计算机

进入商业和行政管理领域以后,出现了COBOL和RPG等便于商界使用的语言.近年来,这类语

言和数据库技术,图形界面技术(可视化编程),面向对象的思想及RAD(RapidApplication

Devolopment)的概念相结合,形成了一批更方便使用的所谓第四代语言(4GL),如

Powerbuilder,Delphi,VB等.

前一类应用于科学和工程计算的大型语言相对来说更为基础,因而也更为灵活,应用范

围更为广泛.在FORTRAN,BASIC(学习型)之后,自70年代以来,模块特征更明显,简单易用

,可靠性强的PASCAL异军突起,在世界范围内广泛流行.但进入80年代以后,

它的地位又逐渐为更实用的C语言替代.到现在,C语言的地位已相当于一种"高级汇编语

言"了.

80年代后期,面向对象的语言开始浮出水面,C++借助使用C语言的庞大程序员队伍,

一举建立了面向对象语言的老大地位.从而OO的思想正式统治了整个软件开发界.C++的

流行甚至使得美国军方从80年开始大力扶植的Ada语言还未及推广便胎死腹中了.

90年代以后,计算机世界更是发生了天翻地覆的变化,原先的单机平台让位于WEB,

"网络就是计算机",新的语言不仅要是OO的,Visual的,更要是基于WEB的.Java语言借

INTERNET的东风,横空出世,一夜红遍天下,变化之快令人瞠目结舌.

上述这些变化,表面是不同的编程工具在城头变幻大王旗,但其背后反映的却是一种

更为深刻的认识论的改变,即你是用何种观点来认识这个世界的?

在PO中,程序员们分析了问题域之后,得到一个PO的模型,其中常见的词语是变量,

函数,过程等;

PO:现实世界-----流程图(变量,函数)------PO语言-------执行求解

在OO中,程序员们先得到一个OO的模型,其中常见的词语是类,对象,方法,消息等;

OO:现实世界-----类图(对象,方法)------OO语言-------执行求解

我们可以看到:

PO更接近于计算机世界的物理实现;

OO则更符合于人们的认识习惯;

如果说,软件危机的根源在于人们认识表达的过程(不断反复,逐步深化)和冯.诺依曼

计算机的实现过程(顺序执行)之间存在巨大鸿沟的话,那么从PO到OO意味这这鸿沟在逐

渐缩小;

OO作为一种思想及编程语言,为软件开发的整个过程--从分析设计到coding--提供了

一个完整解决方案.OO堪称是软件发展取得的里程碑式的伟大成就,人们无不为之喝彩!

一提到OO,我们将会联想到C++,smalltalk,simula,联想到UseCase,ROSE,Mr.

Booch,Jacboson以及Rational公司,但却很少有人会提及维特跟斯坦(Wittgenstein).

然而,正是这位充满传奇色彩的哲学家,不仅第一次清楚地表达了OO的思想,更进一

步提及了OO以后的事情,及其最后的极限所在.

在目前这个变幻莫测的时代重温并认真思考一下这位先哲的思想,或许能使我们更加

清醒,更明确前方道路的漫长.

3维特跟斯坦(Wittgenstein)与OO

维特跟斯坦是本世纪乃至人类哲学史上最伟大的哲学家之一。他生前只于1922年出

版了一本著作——《逻辑哲学论》(TractatusLogico-Philosophicus)。

在该书中,他阐述了一种世界观,或者说一种认识世界的观点,这种观点,在六七十年

后的今天,终于由一种哲学思想沉淀到技术的层面上来,成为计算机业界的宠儿,这就是

“OO”,Object-Oriented,面向对象,或物件导向(港台用语)。

让我们先扯得远点儿,(可能扯得确实远了点),先谈谈这个人,再谈他《逻辑哲学

论》一书中的OO思想。

对西方哲学感兴趣的朋友都知道,在西方哲学史上发生过两次深刻的转向。一次是

由“本体论”向“认识论”的转向;另一次是由“认识论”到“方法论”的转向。

古希腊罗马时代的西方哲学,被称为“本体论”的时代,那时哲学家们最关心的是

世界的本源问题,即世界是由什么组成的?世界的本质是什么?等等这些探究世界根本

的问题。从泰勒斯的“万物皆水”到“四元素”说,“原子论”,再到伯拉图的“绝对

理念”,都对这一问题提出了各自的见解。

基督教借助信仰的影响力量(犹太教传统)和世俗的政治专制力量(罗马传统),以上

帝这一概念对此问题作出终结性回答,持异议者将有生命危险,布鲁诺即因此被烧死。

当然,基督教也出了几个杰出的哲学家,他们继承了希腊的理性传统,混合了圣经的思

想,构造了宏伟的基督教哲学体系。他们的代表人物是奥古斯丁和托马斯.阿奎拿。

阿奎拿曾提出了证明上帝存在的五种方法(希腊理性传统)。

中世纪之后,随着文艺复兴运动的兴起,人们开始从上帝的阴影下走出,发现了自身

的作用,即人的价值。

以笛卡尔的“我思故我在”为标志,哲学开始了由“本体论”向“认识论”的转变;这一

时期哲学关心的是人的认识的问题,具体的流派以各自侧重的不同常分为“唯理论”和

“经验论”,前者注重理论演绎,以笛卡尔等人为代表;后者则注重感觉和经验,代表

人物是洛克,培根等。

科学其实就是融合了“唯理论”和“经验论”的长处而发展壮大的。既强调试验和

观察,运用归纳法,也重视利用数学和逻辑从归纳的结果出发,构造理论框架,演绎出

新的科学定理。

到了康德以后,尤其是本世纪初,哲学的核心问题开始由“认识论”转向“方法论

”,哲学关心的核心问题是认识如何实现的问题。这一时期,哲学家们开始认识到语言

对于人的认识的特殊地位,他们纷纷从研究语言出发来研究哲学。

其中甚至有些人极端的认为以前的所有哲学问题不过是语言的问题而已。

哲学的这次转向有时也被称为是“语言的转向”,新的哲学观点被冠以“语言哲学

”或“分析哲学”的名称。

“语言哲学”的发展经历了两个阶段,或者说可以被进一步分为两个学派:“逻辑

分析派”和“日常语言派”。维特跟斯坦的引人瞩目之处在于:他在前期持逻辑分析的观

点,后期则持日常语言的观点。

总结一下上面论述的要点,现在我们知道:

西方哲学的发展,经历了两次变革,一次是认识论转向;一次是语言转向;第一次转

向使哲学的基础从本体论和形而上学变为认识论,从研究超验的存在物转到研究认识的主

体和主客体关系;第二次转向把对主客体的关系的研究变成了对主体间的交流和传达问题的研究。把对主体的研

究从观念和思想的领域转到了语言的领域(语句及其意义);这两次转向的代表人物分别是

笛卡尔和维特跟斯坦。

下面是维特跟斯坦(Wittgenstein)的小传。

维特跟斯坦1889年生于维也纳。

青年时期的教育首先使他成为一名航空专业工科研究生,1908-1911,曼彻斯特。23岁时

他到著名的剑桥大学学习哲学,成为罗素的学生。据说维特跟斯坦当时正为自己未来的

发展方向感到迷茫,工科还是哲学?一天晚上他带着自己的一些手稿(杂感之类的东西)

来找罗素,要罗素读一下,然后判断自己是否是学哲学的料,如果不行的话,就准备卷

铺盖走人。罗素拿起他的手稿,只看了头一句话,就坚决地对他说,你不学哲学太可

惜了之类的话。维特跟斯坦这才坚定了投身哲学的决心。

在第一次世界大战期间(1914-1918),维特跟斯坦参加奥地利军队,后来被俘。

正是在这段时间里,他完成了自己的成名作,《逻辑哲学论》(TractatusLogico-Ph

ilosophicus)。该书于1922年以英文出版,是他生前出版的唯一的一本著作。

在这本书中,维特跟斯坦阐述了自己的"逻辑原子论"的哲学观点,成为该学派的

代表人物之一。其他著名的“逻辑原子主义者”包括罗素,怀海特,弗雷格等。

该书的出版开创了哲学研究的新方向。

完成这本书后,维特跟斯坦认为自己已经解决了所有的哲学问题,于是他就真的

放弃了哲学,先是作了一个花匠,后来作了一名小学教师。需要说明的是,他家很富

有,但他主动放弃了对巨额遗产的继承权,自愿过一种朴素简单的生活。

大约10年的时间,维特跟斯坦脱离了哲学界。但后来,他对自己在《逻辑哲学论》

中表述的哲学的可靠性产生了深深的怀疑。于是,在1929年他重新返回剑桥,成为三一

学院的老师。1939年他得到了教授的职称。但在第二次世界大战期间,他却以一名医生

的身份为军队服务。1947年维特跟斯坦从剑桥退休,定居于爱尔兰。这一时期他对哲学

的思考形成了他后期的哲学思想。1949年他去了趟美国,当年回来时不幸身患癌症,

1951年在牛津与世长辞。

死后,他后期的思考被整理出版,《哲学研究》(PhilosophicalInvestigations)

,《关于确定性》(OnCertainty)等等,开创了语言哲学研究的另一个新的方向。

↑返回顶部↑

书页/目录