精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-06-17
我看,程序员大都有欧几里得情结。接受过形式化的思维的启蒙,但是没有经过形式化思维的专业训练,从事着与形式化无关的行业,又努力的试图为自己的工作寻求形式化的解决方案。手里没有金刚钻,但满眼看出去都是瓷器活,hehe........
|
|
返回顶楼 | |
发表时间:2005-06-17
庄表伟 写道 再重复一遍,是反对整个OO时代,这个时代里有很多现象都是不正常的。 1、概念不清 2、大师崇拜 3、各种乱七八糟的概念满天飞 4、故步自封 5、邪说盛行,歪道猖獗 这些都是要反对的 我倒是觉得你的文章好象也很符合以上其中几点。 |
|
返回顶楼 | |
发表时间:2005-06-17
ajoo 写道 引用 面向对象背后的那个形而上学基础是不正确的、是不适用于软件开发的
这句话难道不隐含着你知道对什么是“面向对象”这个前提? 请问,如果你没有一个面向对象的定义,那么上面的这个"背后的形而上"是什么意思? 既然没有定义,那么怎么会存在"背后的形而上学"?以至于你需要证明它不正确? 要证明一个没有定义的东西不正确,这只能是一个玩笑。 undefined就是undefined,根本无所谓正确不正确,也谈不上背后的形而上学。 这句话并不隐含着对于“面向对象”的定义。 某种需要被明确指出的哲学作为一种推动的力量,导致OO的出现。 导致OO这个时代的到来。 要分析OO时代背后的哲学推动力量,需要某种思想史意义上的猜测,这个猜测不是以对于OO的严谨定义为前提的。 可以称之为:“复杂现象背后的哲学动力猜测”,对于这样一个OO时代中出现的复杂现象,我们需要有一个“刀刀见血”的“现象批判”!而不是“勉为其难”给OO一个定义。 ajoo 写道 老庄别急.研究问题嘛.
你如果这么批判我当然没异议. 不过你的文章中不是这样的呀.你根本没提概念混乱不清这码事.而是上来就直接给"面向对象"和哲学拉组织关系了. 姑且说一个OO的定义: OO是一种哲学:这是OO所属种的定义 OO是一种指导软件开发的哲学:这是种加属差的标准定义。 OO作为一种哲学自然包括世界观和方法论。 OO的世界观是:“软件开发面对的世界中一切皆是对象”; OO的方法论是:“将世界分解为具有类属关系的大大小小的类,是软件开发的分析、设计与编程的指导方法” OOP就是在这种哲学指导之下的开发方法 OOA就是在这种哲学指导之下的分析方法 OOD就是在这种哲学指导之下的设计方法 总结而言,这样的定义实际上毫无疑义,不过是炮弹外面的糖衣而已。无论是对于我还是我的读者,这样的定义都没有给我和他们带来任何有价值的东西! ajoo,你觉得这样的定义有意思吗? |
|
返回顶楼 | |
发表时间:2005-06-17
age0 写道 庄表伟 写道 再重复一遍,是反对整个OO时代,这个时代里有很多现象都是不正常的。 1、概念不清 2、大师崇拜 3、各种乱七八糟的概念满天飞 4、故步自封 5、邪说盛行,歪道猖獗 这些都是要反对的 我倒是觉得你的文章好象也很符合以上其中几点。 具体说说,别“借力打力” |
|
返回顶楼 | |
发表时间:2005-06-17
Trustno1 写道 我看,程序员大都有欧几里得情结。接受过形式化的思维的启蒙,但是没有经过形式化思维的专业训练,从事着与形式化无关的行业,又努力的试图为自己的工作寻求形式化的解决方案。手里没有金刚钻,但满眼看出去都是瓷器活,hehe........
是说我吗?不是说我吧? 是吗? 不是吗? 是吗? 不是吗? 说出来大家研究一下嘛。 |
|
返回顶楼 | |
发表时间:2005-06-17
引用 我可不是在敲某某特定定义的OO的丧钟,而是整个OO时代的丧钟。 这个OO时代的最大特征就是将走出软件开发困境的希望,寄托在一个居然从来没有严谨定义的理论之上。 人人都以为OO能够救 我、帮我,却连OO是什么都搞不清楚!这也算得上是OO时代的罪过之一吧。 我要写的是一篇论文,但却不是标准意义上的学术论文,那东西套套太多,限制思想的表达。 从某种意义上说,我能理解在OO门口徘徊的焦虑。 我同意OO缺乏精确的定义,OO缺乏一套严谨的理论基础。 我只想指出以下事实: 1)在计算机和软件这样一门实践性、技术性很强的学科里面,完备理论的形成绝非易事。计算机领域这种实践性极强的特点引人注目。 2)许多有生命力的事物并非从一个完备的理论开始的。这点在其它学科也能找到证据。例如数学中的微积分,诞生于牛顿时代,它的威力令人震惊。对于这么一个新生事物,后面几代数学天才和大师们的努力,在缺乏理论的背景下,仍然发展着这门数学技术,没有犯下大的错误。直到19世纪20世纪初才基本建立完备的数学分析理论。成功地把这座大厦建立在几乎一条数学假设之上:“实数连续统”。 另外,并不象你想象的那样,大家都在盲目地跟从OO。没错,任何一个登上舞台的势力都有追从者,包括许多盲从者。然而能长时间生存下来的势力常常是有根基的,它的核心是有生机的力量在运作的。OO其实是被为数不少的人所理解和认同,从而OO仍然在发展。 我提一个不太恰当的建议,主要依据自身的经验。我建议若可能的话,(先)学好C++。怎么叫学好呢?你自己认为已经从上到下地掌握为止。也就是说,你能用C++进行高级OO设计,也很清楚C++的底层实现机制(它是如何实现那些面向对象的特性的?)。再加上你的思考,我想你会得到一番新的认识。 |
|
返回顶楼 | |
发表时间:2005-06-17
tomswan 写道 从某种意义上说,我能理解在OO门口徘徊的焦虑。
我同意OO缺乏精确的定义,OO缺乏一套严谨的理论基础。 如果我仅仅是在OO的门口徘徊,我不会有这么多焦虑的。 如果你长时间的在OO里打滚,竟然还觉得一切正常,倒是挺令人诧异的。 tomswan 写道 我只想指出以下事实:
1)在计算机和软件这样一门实践性、技术性很强的学科里面,完备理论的形成绝非易事。计算机领域这种实践性极强的特点引人注目。 2)许多有生命力的事物并非从一个完备的理论开始的。这点在其它学科也能找到证据。例如数学中的微积分,诞生于牛顿时代,它的威力令人震惊。对于这么一个新生事物,后面几代数学天才和大师们的努力,在缺乏理论的背景下,仍然发展着这门数学技术,没有犯下大的错误。直到19世纪20世纪初才基本建立完备的数学分析理论。成功地把这座大厦建立在几乎一条数学假设之上:“实数连续统”。 OO领域的发展,自然是有目共睹的,几乎每天都会诞生新的名词和新的技术。 但是,这么多新东西,都是进步? 我看不见得,要仔细的分析其中的正道与邪道,前进与倒退,殊非易事。 如果不深刻的认识到在OO的“基础假设”中存在的根源性问题的话,发展OO就是一句空话。 tomswan 写道 另外,并不象你想象的那样,大家都在盲目地跟从OO。没错,任何一个登上舞台的势力都有追从者,包括许多盲从者。然而能长时间生存下来的势力常常是有根基的,它的核心是有生机的力量在运作的。OO其实是被为数不少的人所理解和认同,从而OO仍然在发展。
发展?还是逐渐背离呢? tomswan 写道 我提一个不太恰当的建议,主要依据自身的经验。我建议若可能的话,(先)学好C++。怎么叫学好呢?你自己认为已经从上到下地掌握为止。也就是说,你能用C++进行高级OO设计,也很清楚C++的底层实现机制(它是如何实现那些面向对象的特性的?)。再加上你的思考,我想你会得到一番新的认识。
我java学了不少,顶用吗? |
|
返回顶楼 | |
发表时间:2005-06-17
庄表伟 写道 ajoo 写道 引用 面向对象背后的那个形而上学基础是不正确的、是不适用于软件开发的
这句话难道不隐含着你知道对什么是“面向对象”这个前提? 请问,如果你没有一个面向对象的定义,那么上面的这个"背后的形而上"是什么意思? 既然没有定义,那么怎么会存在"背后的形而上学"?以至于你需要证明它不正确? 要证明一个没有定义的东西不正确,这只能是一个玩笑。 undefined就是undefined,根本无所谓正确不正确,也谈不上背后的形而上学。 这句话并不隐含着对于“面向对象”的定义。 某种需要被明确指出的哲学作为一种推动的力量,导致OO的出现。 导致OO这个时代的到来。 要分析OO时代背后的哲学推动力量,需要某种思想史意义上的猜测,这个猜测不是以对于OO的严谨定义为前提的。 可以称之为:“复杂现象背后的哲学动力猜测”,对于这样一个OO时代中出现的复杂现象,我们需要有一个“刀刀见血”的“现象批判”!而不是“勉为其难”给OO一个定义。 这么说自然说得过去。问题是你的文章怎么读都和你这里说的不是一个味儿。你左一个OO这样那样,右一个对象如何如何,就是没提什么“现象”。能不能后面在文章里明确一下? 庄表伟 写道 姑且说一个OO的定义: OO是一种哲学:这是OO所属种的定义 OO是一种指导软件开发的哲学:这是种加属差的标准定义。 OO作为一种哲学自然包括世界观和方法论。 OO的世界观是:“软件开发面对的世界中一切皆是对象”; OO的方法论是:“将世界分解为具有类属关系的大大小小的类,是软件开发的分析、设计与编程的指导方法” OOP就是在这种哲学指导之下的开发方法 OOA就是在这种哲学指导之下的分析方法 OOD就是在这种哲学指导之下的设计方法 总结而言,这样的定义实际上毫无疑义,不过是炮弹外面的糖衣而已。无论是对于我还是我的读者,这样的定义都没有给我和他们带来任何有价值的东西! ajoo,你觉得这样的定义有意思吗? 你没明白。给出定义是你的义务,不是我的。要是给不出定义或者你觉得定义都没意思,那么后面对这个没定义的东西的批判就根本没意义。 这就象你说:“张三真他妈不是东西!” 我第一句话肯定得问:谁是张三? 你是不是要告诉我:张三是谁不重要,重要的是张三不是东西!? 当然,如果象你前面说的,批判的是一种现象,那么这个现象也需要定义(比如前面提的偶像崇拜)。只不过你得注意文章中和你宣称的需要一致,批现象,不要试图给OO或者对象这些你不屑于定义的东西下结论。 |
|
返回顶楼 | |
发表时间:2005-06-17
ajoo 写道 ozzzzzz 写道 ajoo这个家伙就是讨厌!
你让庄表为都写完了,我们再一起群殴啊。你这么着急的跳出来,他沉醉于和你的斗嘴不写了怎么办? 你没看见老庄都跑题了?他要批现象,但是笔下却针对OO和对象。 我只不过是善意地提醒一下。如此,老庄完成之后,群殴才有劲啊。 我的文章,一开始标题就已经定下来了的。目标是OO时代,而不是OO语言,OO方法。 但是要分析OO时代为什么会搞成现在这个样子,总要先从OO,甚至OO以前开始分析呀。 文章是一篇篇写出来的,很多要紧的话,在说出之前是需要铺垫的嘛。 |
|
返回顶楼 | |
发表时间:2005-06-17
我不知道面向对象的先驱们是否在当时考虑到将哲学作为其思考的基础,我对哲学感兴趣,我就来做一番事后诸葛亮,用哲学来考虑一下OO吧。形而上学思想可以讲是科学之所以诞生在西方的重大原因之一,西方人的每个毛孔中都可以闻到其味道,面向对象的方法同样也受到了形而上学思想的影响,许多西方的学者都对此早有研究。但是在庄伟表的<<敲响OO时代的丧钟>>(下简称<<丧钟>>)为什么就成为OO的罪孽之一?我们对<<丧钟>>解读来看看当中的问题。
我们可以通过“种+属差”来定义一个新的属吗?定义成立的前提是什么?先要有种的定义。然后才可能有属的定义。种的定义又是哪里来的呢?在一个种的概念之上,必然存在一个更普遍的种,一个更大的范畴。在亚里斯多德来说,在所有的种之上的种是“存在”,而存在是无法被定义的。而在面向对象的哲学里,即使是这一个最基本的哲学困境也被忽略了,无法被定义的概念,被代换为无需由程序员定义的概念(Object)。 首先在我对亚里斯多德的“存在”理解是是种的极限,你永远都不可能达到它。在现代西方科学中将研究对象与周围的环境隔离而对孤立对象进行研究是一种基本的思想方法,如果不是伽利略将这种方法引入到科学研究的话,我们可能现在还搞不清重的物体和轻的物体在从高处落体时谁先落地,我们在研究信息对象时我们也是采用的这种方法,我们并不是否认存在一个更普遍的种而是将我们所不关心的种隔离在我们的研究边界之外而已,也就是讲更普遍种中对我们不感兴趣的部分隔离在边界之外,object正是对这更普遍的种的一种抽象而不是对其忽略, OO<>形而上学! OO只是形而上学思想的一个应用而已。 而在面向对象的哲学里,种的共性就是基类所定义的“属性与方法”,而属的个性,就是对于基类的扩展。种+属差”变成了“公用代码+扩展代码”。 一个对象对应于形而上学的实体,它(本质上)是什么?这就要给一个东西下定义,也就是揭示其本质。下定义必须采取"种加属差"的方式正如亚里士多德指出定义不可过宽或过窄,既不能适用于别的对象,也不能漏掉要说明的对象;应当清晰和精确,不能有多余的东西;不应当是否定性的,也不能循环定义;定义必须是唯一的,所以这从一个侧面可以看到面向对象的分析是有相当的难度的智力活动。在面向对象的分析中,种可以认为就是class的概念,而属差就是其属性和方法,他们被用来表达属差,所以“种+属差”根本不是“公用代码+扩展代码“,无论公用代码或者是扩展代码都是属差的表述。 当概念定义这样一个“问题域的描述手段”,演变成“减少重复代码原则”之后。Class继承的概念就越发的模糊不清了。 由于通过分析可以很好地理清实体之间的关系,其必然的结果就是减少重复代码,减少重复代码应该只是面向对象分析带来的结果而并非面向对象分析的目的。 1、面向对象原本声称的描述真实世界的目标,采用的工具却是朴素的“种加属差”的方式。 面向对象的方法没有讲过它可以解决世界上所有问题,用种加属差已经可以描述我们日常遇到许多问题,而且实践证明其描述在一定的范围之内是有效正确的,这也证明了“种加属差”的工具在信息科学中还是有效的。面向对象的方法可以讲是实践走在理论之前的典范之一,他还需要做大量的理论上的完善,才能使其建筑在坚实的逻辑基础之上,就象关系数据库。 2、面向对象分析中,发现具体的对象还算是容易的,发现“种”的概念却是困难的。 这并不是面向对象的过错,是使用这种工具的人的对问题的认知所决定的,这在所有的研究领域都有的问题 3、在实际应用中,种概念的发现与定义,被偷换为公共代码的抽取。 不对,代码只是在计算机的世界当中对实体的表述语言,而不是对种的发现和定义,发现种属是分析人员的认知,描述性的工具并不能代替思考,正如我们可以用矩阵表达许多问题,但是怎么正确的表达是建立模型的人所要做的工作,其结果可能是正确的也可能是错误的。 4、由于基类的定义的随意性,导致子类不但可以扩展基类的行为与特性,还可以覆盖(改变)基类的行为与特性。 在一定的范围内对基类行为和特性的覆盖可以认为是一种扩展。一种属差的表现。 5、由于哲学概念的与开发概念的混淆,使得在OO领域IS-A、Has-A、Like-A成为最为绕人的概念。 这取决于分析人员对问题的认知程度而不是方法本身的问题,即使不用面向对象的方法,不在信息学领域,我们在研究中也常常会有一样的困惑。 我只需要证明“面向对象背后的那个形而上学基础是不正确的、是不适用于软件开发的。” 我看了全文作者没有证明"形而上学基础是不正确的、是不适用于软件开发的". 其实如果我们进一步思考一下我们会发现关系数据库,实体分析方法其实也暗合形而上学思想,只是表现的形式不同,如果有形而上学思想的东西在软件世界是死路一条的话,关系数据库我们也该为它敲响丧钟了。(鼓吹数据库过时论的人该高兴了) 至于<<丧钟>>中引用waterbird《OO, OO以后, 及其极限》的思想认为OO是以原子论为基础的我是更不同意了。在OO中没有人会认为对象是不可分解的原子,只是在我们研究的问题当中我们没有必要加以分解我们就可以完成我们对问题的描述,比如我们在考虑一个人事描述一个雇员的时候我们是否有必要分解描述这个雇员的心脏呢?完全没有必要,这又是近代研究时划定研究边界的思想的体现。如果OO和原子论没有联系,那原子论的破产又和OO的丧钟有什么联系呢?那么哲学破绽在那里呢? |
|
返回顶楼 | |