我说面向过程(以C为例)与面向对象(以Java 为例)的世界观,本质上并没有不同,因为他们都认为“世界是由事物组成的,运动改变着事物的状态”。至于“事物”是用变量表示,还是用对象表示,至于“运动”用过程调用表示,还是用消息传递表示,这只是“方法论”的不同而已。

而我说的函数式(以Lisp为例)与逻辑式(以Prolog为例)的世界观,本质上也没有不同,因为他们都是认为“世界由运动组成,事物改变运动的轨迹”。至于“事物”是用数据表示,还是用条件表示,至于“运动”是函数表示,还是用逻辑表示,这也只是“方法论”的不同而已。

------------------------------------------------------------------------------------
此说法倒与我的有相通之处,我也向来把函数式和逻辑式做同等看待,而把常说的命令式编程称为过程式(procedural)程序。

这里的观点说得感觉还是有些含糊。

函数式和逻辑式都是在围绕“是什么”的问题,而过程式围绕的是“如何做”的问题,两者之间其实并不是水火不容,而是有非常多的联系。现在由于函数式,并行编程的兴起,将副作用,共享状态视为洪水猛兽,实则是因为纯函数式和逻辑式没有找到很好的解决状态迁移的方案。

函数式风格的编程,在非常多的时候,很难照顾人的直观思维方式,这也是为什么c和java仍然拥戴者甚多的原因。逻辑式编程,就更为明显,很多时候,问题的逻辑建模不成功就没法写出代码,而如果改用过程式,尽管代码冗余难看,难以复用和维护,但只要写下去,就能一点一点的达到目标。

真正的出路,是有一个系统能够将两者以恰当的方式融合在一起,各司其职。至于面向对象,是一次不成功的尝试,类和对象的声明,实际上是一种逻辑声明,而其操作,又是过程式的。

我现在总结归纳的模式是这样:
1 世界的每个时刻都对应一组事实。
2 这一组事实构成一个事实空间。
3 事实空间在不断发生变化。
4 事实空间已经发生的变化模式称为事件。
5 事实空间可能发生的变化模式称为动作。
6 执行动作的结果就是按照动作给定的描述,改变当前的事实空间。
7 世界就在事件-动作的无限循环中向前发展。

2010年10月26日 16:54 "jdon007"的内容
万物皆数”的观点大概认为“数”为“神”,“物”为“形”,这样也解释得通。将“数”理解为“物”的一种表达,那么也可以将“象”作为“物”的一种表达,也解释得通 ...

呵呵,可能有点谈远,我以前也是这样想,后来我觉得这两种方式有些区别,当然是个人臆想,能和你谈到这个份上就不妨再深入一点,浪费大家时间了。

我把人看事物的终极方式分为两种:从外部;从内部。
这两个方式各有优缺点,身在庐山中,不识真面貌,说明从内部看事物的缺点,无法宏观。

万物皆数的方式被我认为属于“从内部”,因为数字代表量化,为什么物理和数学那么紧密,物理是探究物体是什么,实际探究物体内部是什么,物体是由什么组成的,组成部分都可以用数字或数学公式表达。牛顿发现万有引力,如果不用数学公式推导出来,就不是科学,这些都体现数表达物,万物皆数的思想。

但是,万物皆数,也就是从事物内部认识事物有一种缺点,除了上面比较难顾及全面天然缺陷外,还有跟数本身技术发展有关,也就是和数学发展有关,有些东西今天无法用数学表达,以后就可以了,但是是否无法用数表达推导,我们就认为这个东西不能为我所用呢?也就是说:是否必须研究出原理,才能应用呢?

当然,不是,这就是科学和工程技术的区别,就像以前SAAS,刚出来,大家研究不出其组成部分,是不是就能抗SAAS呢?很显然我们还是治疗了它,这就是临床和基础医学的区别。

现在回头看看,另外一种方式:从外部,从外部这种方式恰恰可以解决为我所用的问题,我们可以在无法用数推究其原理,表达是什么情况下,从外部,从其运动规律上,和周围关系上来定位它是什么。

这种方式实际就是中国象文明的特点,是中医的一个起点,实际上很多老外也一直用这种方式在软件中,四色原型,四种颜色,就是从事物外部辨识它,属于哪个种类,实体值对象也是从外部辨识,算法也被认为是用数学公式凝聚起来的一个整体,从凝聚性这个外部特征来辨识它。

当然,从外部这种认识世界方式缺点显而易见,也是我们国家落后的原因,就是无法量化,无法深入事物内容用数学表达,经络可以用数学表达吗?

但是在当前我们国际全面西化教育的同时,却丢失自己文明的特点,我们这种从事物外部,象形文字的文明的优点就是:宏观。你看到了宏观,你就得中,这就是中国的名字来历。

为什么中国古代老子 孙子被西方人乐道,老子的道德经和圣经一样是翻译最多的书籍,就是因为它宏观,为什么它那么老了,几千年前的道理今天还适用了,因为它宏观,为什么它能做到宏观,因为它从事物外部看世界的方式。

可是为什么现在我们用从外部看世界的方式看不懂这个世界呢?打个比喻:几千前的世界就象一个小树,所以,人可以从外部整体把握它,而现在这个世界已经长为茂密大树,把我们遮盖了,我们已经身在其中了,身在庐山不识真面貌,当然就无法宏观看待这个世界。

罗嗦这么多,都是我个人臆想,也包括看别人的一些思想,结合需求分析和建模一些实践,软件建模真的不能小看,不是软件技术这么简单,它取决于你的世界观,以及你的认识世界本质能力。

而寻求建模完成后,用软件技术直接实现的方式,恐怕是应用软件追求的一个终极目标,我相信,最后终会屏蔽去程序技术对建模这个宏观层面的影响,当然,首要目标我是分清What和HOW,而得到What结果有两种:从它的外部定位它是什么;另外一个用数据和算法象表达物理化学分子结构一样来表达,这两种方式都可以在软件中使用,而后者只能在科学应用。

而大量学习了物理化学数学理科生出身的人因为自身屁股坐在了数的世界内,无法宏观认识整个世界,身在庐山中,不识庐山真面貌,这也是我今天在jdon为什么反复强调“象”,去数学化的目的所在。

因为错误的教育迷失了几代人。


[该贴被banq于2010-10-26 17:59修改过]

其实还可以这样想,当软件中的OO中变为内部的时候,我们已经身在其中了,想单从推导出其外的话基本不可能,必须有一套更有高度(比OO更高)世界观来认识世界,尽管我们现在不知道。

TO uda1341
世界观的不同表现在对世界的描述不同,OO以“对象”描述世界,PO以“数据过程”描述世界,而我们一般科学的世界观(唯物)以“客观实在”,他们都是指某一样东西。每个世界观都有自己的基准,尽管他们认识的都是这个世界。你指出的“世界是由事物组成的,运动改变着事物的状态”是辩证唯物的世界观。为什么同样的唯物有辩证不辩证呢。或者说在OO世界观里没有客观存在这个词,相对的他有的是对象。(但对象存在局限性,不能很好地描述世界,具体看下面)

还是那个词——环境,为什么说OO接近人类认识呢,也为什么是接近而并非相同。因为OO不具备人类脑袋认知这种高逻辑,它有一定的局限性。所以它不能等同于我们的完整的世界观。也正因为如此才得以名为OO。OO无论怎样升华也不可能达到人类认知的高度,因为它是由PO升华而来,而且它根本不肯能完全摆脱计算机这种环境,计算机世界里面只有0和1,怎么能完整表达世界呢。其实可以反过来问用唯物辩证法可以指导软件生产吗?或者问,用辩证唯物论可以去认识软件世界(或者计算机世界)吗?(例如:相等)

还有一句话,为什么说每个人的世界观都不一样呢?因为世界观是因人而异,难道全世界都只有一个世界观吗?明显不是。唯物辩证也就在这个世界公认较为科学的,扩大世界,它是片面的,缩小世界,它多了无须有的东西,换个世界,它就变成不科学了。所以,一个环境下有一个世界观。

综上所述,“世界是由事物组成的,运动改变着事物的状态”这一句话,并不能成为OO和PO相等的原因。

而从PO到OO的升华过程,就是我们想把这种世界观与我们的世界观不断接近的过程,就是这种升华,所以说OO更接近人类认识。
[该贴被SpeedVan于2010-10-26 18:57修改过]

语言才是描述世界唯一的手段。

要想在这方面往深入的方向探讨

1 数学和物理的世界观显然有领域适用性,面对一个企业的工作流程时,这种世界观就不管用了。

2 把所谓的唯物辩证法扔到垃圾堆里去,这东西压根就不是什么公认的科学的,而是从来没成为主流,而且早已经被淘汰。读一读英美分析哲学的著作,这才是主流,这是直接从理论和师承上产生了计算机科学的哲学派别。

3 中国式的世界观也是如此,没有一个得到承认的科学理论是从这种世界观里产生的。

OO跟人类的认识还相差太远,所以我说这是一种错误的尝试。

如果真的要深入研究,可以学学谓词逻辑,还有后来的时态逻辑(这个领域得过图灵奖)等模态逻辑的内容,这些基础理论的发展和实用化将来会对计算机科学产生根本的影响。

erlang的发明人armstrong就发过牢骚,说谓词逻辑是一种强大的工具,但现在的程序员如果看到你用prolog查询而不使用sql查询,会觉得你疯了。

这个帖子得慢慢读了,不过我也来凑下热闹,个人愚见:

计算机是什么?起本质就是计算,计算的前提是有量化的数据。
计算机能够处理的数据是离散的,那么必须得组织成某种结构便于计算或者便于高效率计算。
计算的过程叫做算法,算法是对数的操作,必然就牵涉到数的学问,数学很复杂,那么算法也肯定复杂,结构和操作过程相互依赖出现了一个美而复杂的凝聚体,但是搞软件的都必须是数学家吗?不见得。

人类不懈追求的量化过程就是数学和物理学等学问的发展过程,那么这条路到至今解释了这个世界或者宇宙的所有玄机了吗?

程序在机器空间就是操作量化数据的过程,这个操作过程人们发明了命令式,函数式等,而命令式容易理解所以发展得相对较快。
所以 程序=数据结构+算法,这肯定是机器空间的绝对真理了。

计算机当年为战争而生,主要任务就是为了计算,密码破译,弹道计算等,可现在不是了,他要为各种领域服务,这些领域当然还有纯计算类的但很多已经不是了,那怎么办?所以才有OO,所以才有这篇帖子,人们希望用OO来让软件更好的服务于领域,更好的适应需求。

而OO是不能够用数学来证明的,它取决于程序员对事物本质,世界本质或规律的悟性,悟性高的人把很多经常用到的方案总计了出来,叫设计模式,对事物本质认识也总结了些出来了,叫DDD,四色,DCI。所以OO将不断演化,但终极目的是为了让软件如何更好的为人类服务,满足自私的人类赚更多的钱或者更贪婪的改造世界。


我酷爱看天龙八部,少林七十二绝技必须和佛法一起修才可能成为绝对高手,不然只能是自取灭亡。
是不是软件开发也一样,数据结构,算法是绝技,OO是佛法?banq说的西方文明是七十二绝技,而东方文明是佛法?
我们现在的教育都是在教你怎么练绝技,而没有教你相应提升绝技的佛法?


[该贴被oojdon于2010-10-26 20:23修改过]
[该贴被oojdon于2010-10-26 20:27修改过]
[该贴被oojdon于2010-10-26 20:29修改过]

TO uda1341
语言描述是方式,对是手段,但不是内容,没有语言,世界观一样存在。(话说你突然提出那句话想说明什么?或者反驳我什么观点?)
我没有说OO是绝对正确的,没有说以后没有新语言的诞生。这边的讨论是对OO与PO而已,而我的切入点是说两者是不同的世界观,你所说的“世界是由事物组成的,运动改变着事物的状态”作为他们两者相等的条件,我认为是有问题的,我举唯物例子是为了说明,OO与PO对立点而已,一个以对象为基准,一个以数据过程为基准,而例子中一个是辩证法,一个是非辩证法,再具个例子就是唯物唯心,一个以物为基准,一个以心为基准,这里看出他们是对立的。(其实这当中也体现了banq所说的命名方面了,至于统一方面,请阅读上文,有提到)

用通俗的话说就是,世界观中肯定会存在相同的部分,世界观是否相同是从世界观本身的切入点分析,但不是从你那句话切入的。OO切入点是对象,PO切入点与其不同,所以这是相异的世界观。OO是以对象为中心的。唯物切入点为物,唯心切入点为心,只要切入点不同,就已经是不同的世界观了。

至于你后来谈到的逻辑谓词,并不是论证的部分。prolog查询?挺不错,不过与本帖好像无关呗。而且我们现在谈论部分都是尽可能离开持久化的。若果也要讨论的话,请开技术贴吧~~~

什么叫做“更”,当然是存在对比才会出现“更”,对比对象是PO,OO是否接近人类认识是相对而言的,你的对比对象是谁呢?相距多远谁也不知道呢。OO对我们软件世界有着巨大贡献,有着里程碑的意义,是否错误的尝试,哈,还真是不同见解呢。你要是能提出一套比OO更好的世界观,全世界也会感谢你的(这是事实嘛),问题这是量变与质变的问题,请问量到了未?当然OO距人类多远又是一个新问题,讨论的话请另开贴(讨论逻辑谓词也一样,这些不是本贴讨论交流主线,主线是对LZ的文章进行交流)。

-----------------------------------------------
oojdon 从需求变革和发展史的角度分析,思想很好,思路很清晰,我曾经回帖也提到过软件性质变迁,由解决问题变为设计方案,着眼点也由原来的问题变为领域。而原来PO的思维已经不够用了,所以打破了原来的切入点,出现了OO思维。可以说由原来的数学世界,变为哲学世界。我们不再依赖数学家,也可以做软件了。
[该贴被SpeedVan于2010-10-26 21:22修改过]
[该贴被SpeedVan于2010-10-26 21:25修改过]

勘误:

我说的意思不是“世界是由事物组成的,运动改变着事物的状态”,一谈到“事物”就不好办了,“事物”是什么呢?

所以维特根斯坦说:“世界并不由物的列举以及关于这些物的事实所构成(就像是一场表演的节目单一样)……世界是什么,这是由描述,而不是由对象的列举所确定”。

他说:“世界就是由事实以及这些就是一切事实这个情况决定的”

所以,我所说事实空间的含义是:一组由符号所构成的命题的集合。在逻辑编程中,由一系列原子事实和规则所衍生出来的事实所构成的。当一个动作发生时,这个命题集合会发生变化。

而后面你说的“更”,这个“更”是相对于自然语言而言的,你可以发现自然语言中即使是非常确定的描述,也无法直接对应到一段代码。这就是为什么代码没法等于文档的根本原因。

我的帖子当然也不是很切题,有跑题的嫌疑,主要我是觉得OO这种世界观,只是一小步尝试,而且是错误的尝试,这种世界观里的对象的概念,就是很成问题的,所以前面我才啰嗦这么多说“事物”没法定义,我们能够言说的,只是“事实”。

从咬文嚼字的这个劲头看,分析哲学应该挺对你的胃口的,就别被唯物辩证法的概念给误导了,这算是我的推荐吧。


[该贴被uda1341于2010-10-26 21:26修改过]
[该贴被uda1341于2010-10-26 21:28修改过]
[该贴被uda1341于2010-10-26 21:48修改过]

语言描述是方式,对是手段,但不是内容,没有语言,世界观一样存在。(话说你突然提出那句话想说明什么?或者反驳我什么观点?)

-----------------------------------------------------------------------
没看到这个,再补充

语言描述不仅仅是手段,而是根本,思维止于语言。

可以去搜索一下哲学的语言学转向,会有很多答案。这么大的一个话题,不适合在这里做跑题之用,呵呵,只能简单点说:

语言分析哲学家认为,哲学思辨转向语言分析之后,哲学便不再探求终极实在的秘密,不再提出新命题,而是澄清已有的命题,通过建立科学的、系统的形式语言,排除因语言表达式的混乱而产生的基本概念混乱,从而使哲学达到科学主义所要求的“精确”、“明晰”的标准。这样就可以消解传统哲学的形而上学困惑。

里面说的“终极实在”,就是唯物辩证法里面的“客观存在”,这个概念是没有必要的。面向对象的问题就是对“事物”的抽象,而没有回到“语言”本身。
[该贴被uda1341于2010-10-26 22:17修改过]

你说得是逻辑哲学论,时代的潮流仍然是辩证唯物,辩证逻辑也只是热潮而已。当然时代是前进的,现今辩证逻辑也引起广大关注,但没有覆盖到我们生活中。逆流而上,就让新潮思想派去发掘去钻研吧。而我们身边的人都是辩证唯物思想,你要成为所有的“异人”(不是贬义),也就是找孤立而已。而在软件世界里,众多流行语言是以唯物辩证为基础的,你硬要使用逻辑哲学,你有经济基础就算了,我们这些还得在现在的语言上,开发企业软件,目的是获取利益,而软件思想的变革,我主导不起来。(当然变得越来越科学,越来越合理,是我想看到的,要不交由你去变革软件吧)。

其实从OO软件的架构的慢慢变化,也可以看出思想的变化(SOA、DCI)。但谈论软件时,必须有一个语言环境,而这里选择了Java,也就必须跟随一定的思想。要抛离就不是谈论软件了,而J道也可能不存在了。

哲学在某些时候是对我胃口的,但我仍然不能走出人流。唯物辩证困住了是实情,但无奈我不是无所依赖的人。若果想改变思潮,首先从教育干起吧,我可不想随便孤立出来。(看看哲学家后面都是些什么背景吧)

而关于接近问题,我们本来就是想靠近自然语言,却拿自然语言来对比,不是拿石头扔自己脚么。OO语言和自然语言差多少,没人能够回答,因为没人走过(远有多远,近有多近,没人知道)。但OO却是一路走过来的,所以知道它比PO更近。

而你回复的补充,大概懂你意思了,但还是那句,一个环境一个世界观。要变的时候,首先改变环境吧。因为这里是Jdon还是OO世界。
[该贴被SpeedVan于2010-10-26 22:22修改过]
[该贴被SpeedVan于2010-10-26 22:23修改过]

每个人的世界观可能不同,在我们的教育中,世界观往往分为“唯物”的还是“唯心”的,也就是说“物质”与“精神”到底谁是第一性?对于这个问题的回答,我想还是借用《非诚勿扰》中葛优的“分歧终端机”来解决比较方便,不然争吵就不会停止。我个人的做法是,等你们讨论出一个结果出来,如果我还没死,告诉我一下。具有讽刺意味的是,在这里,我却为类似的问题,说了又说,真不够洒脱,下面再一次进行重复的解释,希望是有意义的徒劳。一家之言,大家求同存异好了。

简单说,世界是事物与运动组成,那么“事物”与“运动”到底谁是第一性?面向对象给出的答案是“事物”,对象就是对“事物”的一种描述,且不管其是否接近“事物”本身;而面向过程,过程与运动几乎是同义词,很容易想当然地说是“运动”,可是事实呢,“面向过程”其实是“面向变量”的,过程是为改变“变量”而存在,而“变量”也是对“事物”的一种描述,也且不管其是否远离”事物“真相,为了预防这种误解,下面用结构化编程代替面向过程。

面向对象与结构化编程对“事物”与“运动”谁为第一性的回答是一致的:“事物”。前者将事物视为对象,通过收发一系列消息,改变对象(事物)的状态;后者将事物视为变量,通过经历一系列过程改变变量(事物)的状态。

banq所说的“象数之争”,其分歧在于对“事物”的描述,面向对象以“象”之眼看“事物”,结构化编程以“数”(变量)之眼看“事物”,你可以认为这是不同的世界观,我也可以认为这只是方法论不同。

banq认为“象”是从外部描述“事物”,而“数”是内部描述“事物”,这个我个人是完全赞同的。而SpeedVan和banq倾向于认为这是世界观层次的不同,而我则倾向于认为这只是方法论层次的不同。

至于“事物”的含义可能就是大家都觉得的那种含义,给出精确定义几乎是不可能的,“名可名,非常名”,没有办法。

而函数式、逻辑式对谁为第一性的回答是相反的,它们认为“运动”为第一性,事物不过是“过眼云烟”,可以“转瞬即逝”。“事物/运动”谁为第一性,与“唯心/唯物”之争相似,这就是“命令式”与“声明式”的水火不容之处。

再次表明,我与SpeedVan和banq的根本分歧在于,我认为面向过程与面向对象是方法论层次的区别,而SpeedVan和banq倾向于是世界观层次的区别。仅此而已。

至于oojdon提到命令式发展比较快,个人认为根本是因为现在使用的机器都是基于冯·诺伊曼机器模型,是一种“控制流计算机”,控制“计算”去改变“数据”,是一种“命令式”计算机,这也表明了软件与硬件在思想上具有的“一致性”。

在将来的“数据流计算机”中,“数据”驱动“计算”,是一种“声明式”计算机。在“数据流计算机”中“声明式”语言就可能重获新生,大展身手,因为此时软件与硬件在“思想”上也具备了“一致性”。

uda1341提到了Joe Armstrong。他发明的语言Erlang,是一种面向进程的语言,他自己也认为Erlang不是面向对象语言,甚至有点轻蔑面向对象语言,而其导师却说,Erlang是一种面向对象语言,搞得他糊里糊涂,将信将疑。

我个人的观点是,在并行世界中,“进程”比“对象”这一抽象,可能更接近“事物”的本来的面目,从这点看,我倾向于支持Joe Armstrong导师对Erlang的观点“现在的面向对象不是面向对象的,而Erlang是完全面向对象的”。Erlang的世界观应该是将“事物”视为第一性,用“进程”表达,然后“进程”之间通过传递“异步消息”相互协作。此外,Erlang在“进程”内部是采用“函数式编程”,可以说Erlang结合了两种世界观,在“进程”外部采用“命令式”,在“进程”内部采用“声明式”,蛮独特的。

uda1341还提到维特根斯坦,对他的书我没有阅读过,在一些程序员中似乎蛮受推崇的,只记得他的一句话“凡不可言说,应当沉默”,因为这一点上与《老子》的:智者不言,言者不智”,颇有相似之处。有时间一定拜读。
[该贴被jdon007于2010-10-26 22:52修改过]

说到Erlang,它其实开始是作为prolog的并行扩展,实验性版本也是用prolog写的,而且代码量非常少。论文里实现erlang底层机制的prolog代码我还跑过几段,接触这些原始代码还是挺有趣的,因为没有被掩盖在代码海洋里面看不到实现者的思路。

后来才独立出来,花了3年时间改成高效率的实现。到现在armstrong还说,erlang对CSP(通信序列过程)的实现是失败的,如果从头再做他们会用prolog来实现一个更好的。

我同意这个看法“我认为面向过程与面向对象是方法论层次的区别”,但我的补充是,在面向对象方法中,进行类的定义时,用到了声明式风格。

我的核心观点是,回到语言本身。解释起来就长了,嘿嘿。

维特根斯坦只是逻辑哲学的创始人之一,而如今逻辑学的发展已经深入多了,对时态逻辑的研究就产生了一个图灵奖,这些成果迟早会变成主流软件的一部分。

感谢 jdon007 的总结,这次说这次讨论使我对各个方向加深认识,而且也拜uda1341提到的逻辑哲学所赐,萌生了一些思想,但只能在某些时间整理和看看有关方面的书(有时间也不一定能看啊)。还是现实更重要,市场需要什么我就做什么,而更多的讨论在于如何做得更好,额外的看着办吧。

可能时代变迁在以后的某一代人身上了,但我感觉不是我T T。
[该贴被SpeedVan于2010-10-26 23:17修改过]

最后引用一篇文章http://blog.csdn.net/xyz98/archive/2008/04/19/2306514.aspx

这也是我最感触的一句话“编程语言的流行程度与其擅长的领域关系密切。声明式语言擅长基于数理逻辑的应用,如人工智能、符号处理、数据库、编译器等,对基于业务逻辑的、尤其是交互式或事件驱动型的应用就不那么得心应手了。而大多数软件是面向用户的,交互性强、多为事件驱动、业务逻辑千差万别,显然命令式语言在此更有用武之地。”

还有看了banq大师推荐看的子非鱼王东岳视频,也有了一种新的认识——东西方思想的区别。可能我们之间冲突,也是跟东西思想的原因。这里不作讨论了,没看过的,可以去看看。
[该贴被SpeedVan于2010-10-27 00:17修改过]

回帖中的一些不同观点之前被忽略了,下面做一点补充的解释。

banq的观点
从程序技术实现角度来看,这两个公式好像都属于你说的命令范式,是差不多的,我认为这是战术层面它们可能是一样的,但是战略层面,也就是反映需求,以及战术和战略传导方面,对象方式就有其天然的一贯性了;而且声明式范式其实就是将战略和战术进来分离,将程序技术实现封装,从这个意义上看,我也认为这是对象化思路推动的结果,也是对象思维发展的必然结果。所以,你可以在DDD中看到声明式是其一个主要推荐。

uda1341的观点
函数式和逻辑式都是在围绕“是什么”的问题,而过程式围绕的是“如何做”的问题,两者之间其实并不是水火不容,而是有非常多的联系。

jond007的观点
从字面含义上看,“命令式”的含义大概是“要怎么样去做”,侧重于过程或者说关注战术;“声明式”的含义大概是“要什么样的结果”,侧重于结果或者说关注战略。这是从操作层次或者说方法论层次来看“命令式”与“声明式”的不同,而不是站在“世界观层次”来看它们的区别。

事实上,在命令式范式的的语言中,同样可以只关心结果,而不关心过程,不管在面向对象,还是结构化编程。具体一点,比如Java中的Annotation就是一种声明式的表达。

所以我之前说过在表达世界观时,不太喜欢“命令式”与“声明式”这种说法。原因就是“命令式”与“声明式”事实上是从“方法论”层次对编程范式的一种分类,我用它们来对“世界观”进行分类多多少少有点不妥,可是再造一套术语可能引入新的混乱,更非我所愿。

在方法论层次上,“面向对象”与“面向过程”的分类标准是用“对象”还是用“变量”来描述事物;“函数式”与“逻辑式”的分类标准是用“函数”还是用“逻辑”来描述运动。前者根据事物的描述不同进行划分,后者根据运动的描述不同进行划分。而“命令式”与“声明式”的,其分类标准关注的是过程或结果,这是从方法论层次另一种角度的划分。

“分类的层次,分类的角度”,没有达成共识,就会可能出现混乱。

在讨论中如果感觉混乱,我的建议是:认为“事物是第一性”的观点,不妨不叫“命令式”,而称为“事物世界观”;认为“运动是第一性”的观点,不妨不叫“声明式”,而称为“运动世界观”。

费了这么多口舌,就是为了避免在我们思考、讨论时分类标准可能出现的无意识的混乱,而导致困惑不解。
[该贴被jdon007于2010-10-27 16:17修改过]

(下面萌发的思想有问题的,原因在下一个帖子,留下这贴只是为了让和我有相同思想的人也来引导思考而已)

其实就是这里有点出入,个人认为在区分世界观的时候可以参考一下唯物和唯心、辩证和形而上的区分来划分。在区分物心时,我们考虑的是出发点;而在区分辩证和形而上时,我们考虑的是是否多角度,是否全面,是否发展地看问题。从这里可以看出,前者可以看成是“切入点”,后者可以看成“是否运动”。

所以我从这里大概有个重新的认知,OO与PO是对切入点的划分(这就是我认为OO是世界观的原因),而命令式与声明式的划分有点像对“是否运动”(有点而已)。其实我们从现在可以看出了,为什么OO软件设计时,感觉到声明式,也许可能某一天会出现声明式的OO——辩证唯物论(不断加入声明特征),而单纯的命令式OO可能就是形而上学。所以为什么命令式与声明式你们会觉得应该是方法论的划分原因。OO强调宏观,声明式强调逻辑,而这正是东西思想的区别,也正是我觉得Jdon切入点好的地方。西方思想思考OO,也就是逻辑思考OO,就会慢慢带来声明特征的原因吧,而慢慢以逻辑为主的西方思想,也会加入到OO中。(类似中西思想文化的结晶?)

我们企业软件是以研究领域为核心的,可以说是一个小世界,所以会感到加入声明特征后的OO会很舒服。若在这类OO软件方面,只用命令或只用声明的话,都是不适应的。我上一个回复就说到一句感触的话“对基于业务逻辑的……显然命令式语言在此更有用武之地”,现在也感到不怎么准确了,可能是OO是命令式语言带来的影响吧。若果重新认识的话,可能应该是“声明式OO更有用武之地”。若果不习惯的人,可以叫“具有声明特征的OO”可能更舒服。估计是因为Java也不知道,自己把OO和声明特征同时纯在吧。

所以我觉得这里不把OO作为方法论来划分会可能更好理解。

可能跟OO跟具体编程拉上了关系,从而觉得他是命令式,本人觉得那叫做OO语言(这叫法可能本来就不准确),而不是OO。OO可能本来就不包含动与静的,它没说,就觉得静一样,跟单单唯物论的时候一样。

以OO为主体加入声明式类似Java这样,以声明式为主体加入OO就可能像前面几位所讲到的语言。因为纯声明式解决领域问题不好办。

个人觉得是时候把OO定义给端正一下了。(如果以上成立的话,对于命令式OO是否符合我国国情,又是另外一个值得探讨问题)

OO指明了世界是什么的问题——是对象。Java对类的定义,可能恰恰符合辩证唯物论的定义。

以上是个人新理解。


[该贴被SpeedVan于2010-10-27 17:29修改过]
[该贴被SpeedVan于2010-10-27 17:31修改过]
[该贴被SpeedVan于2010-10-27 17:32修改过]
[该贴被SpeedVan于2010-10-27 17:33修改过]
[该贴被SpeedVan于2010-10-27 17:48修改过]
[该贴被SpeedVan于2010-10-27 18:58修改过]