对象已死?彭老师是怎么看的?

在InfoQ上看到这篇文章http://www.infoq.com/cn/articles/object-have-dead,
想听听大家的看法,一起思考学习一下:)

文中一句:“我们实际上是在讨论其背后的计算模型——也就是lambda演算和冯结构装置操作——在执行效率和抽象层次上的优劣。而面向对象技术则比较尴尬了,其背后没有一个对应的计算模型”

面向对象本身就不是起源于计算机,而是起源于现实,如果就计算机世界边界内谈的话,面向对象根本不属于,所以,你无法用计算机世界的标准来衡量面向对象,这篇文章就范了基本上逻辑错误。

无论面向函数,还是面向对象,最终是为需求分析服务的,我总结如下:
从大部分应用系统高度来看,基本可以分为三种偏重:
1.偏重类图,这样的系统有复杂多变的类关系,我们使用DDD/以静态类为特征语言如Java等来破解。

2.偏重用例图:这样的系统有复杂多变的行为事件,我们使用DCI/面向函数类语言如Scala等来实现。

3.偏重状态图:这样的系统有复杂多变的流程和状态,我们使用状态存储数据库如MySQL来实现。

这里再打一个比喻:
Windows是最好的面向对象操作系统,所有的计算机用语都使用窗口来表达,微软最大共享是让计算机用人的思维和人打交道,所以,我们都选择了Windows;而Linux则是命令行,你必须学会计算机懂的用语才能和它打交道。

linux和windows的区别:前者你在用计算机语言(命令行)和它交互;后者是计算机在用你的语言(窗口)和你交互。微软赚的是近人化的钱,而对于软件开发者什么时候用近人化语言开发?

如果软件是为人服务的,我们是希望所有软件都以人方式和人交道?还是让人学计算机等鸟语,再和它打交道呢?我想发展趋势肯定是前者啰。

如果所有软件语言平台都能智能化到非计算机专业的人都能操作,这不是一个非常简单的发展目标吗?难道有疑问吗?


我对面向函数的编程方式并不熟悉。但是在原文中也没有看到过程与对象间的争执。

我将OO理解为一种理论和思考方法,他本身没有提供太多的实践指导。再实际应用中感受到了大大的好处,同时在维护对象状态和过程处理方面也存在着导致实现复杂和分析界定模糊的问题。

我倾向OO用于分析世界的组成和关系,过程用于执行世界中的某些行为和操作,几乎在所有的实际应用中我们都自觉或者不自觉的将他们结合了,但现在通常遇到的问题式他们的结合点在哪里?这基本上依靠实践者个人的功力了。

另外我认为现有的每一种编程和分析方式都存在着先天的能力界限,比如Java可以被广泛的应用于业务处理过程,而在计算密集行的应用领域它则有着先天的不足,执行效率,软件模型,并发模式=====

在今后很长的一段时间内还是需要“协作”的方式,各种理论和实践方式结合,并根据具体的应用环境裁剪取舍。就如NOSql如此有效和发展的情况下,银行的核心数据系统也也未见转型。总之围绕着“取舍”两个字。

OO可能在未来的某一天死掉,但至少不是今天。

谢谢两位前辈的指导!

2011年06月22日 13:27 "@IceQi"的内容
OO可能在未来的某一天死掉,但至少不是今天 ...

我觉得OO不会死掉,因为它不是有形之物,而是无形的方法论和思维。

什么叫对象?就是你对着象就可以,如果你把类当作对象,那么就是面向类的OO,如Java/C++/C#;如果你把方法函数当作对象,那么就是面向函数的OO,如Scala;如果你把状态当作对象,那么就是面向状态的OO(如果说数据库是存储状态,那么面向数据库是OO的最低级形式)

现在,面向函数的Scala等否定的是Java他们面向类的OO,先有类Class,才有对象,其实面向对象应该都是在谈内存中正在运行的业务对象,不管它是从类创建过来的(new方式),还是从函数创建过来的(var o=function(){})。

还有,关于面向对象,很多死读书的同学脑筋转不过弯来,觉得OO很高级,对于OO上面我们通常有一个误解,觉得OO是一门比数学算法数据结构还要高深的知识。

其实完全相反,OO小学生只要有形象思维就已经具备,是一种天然的认识观,因此是无需要学习的,国外为什么大学不学OO,因为他们觉得在大学学他们小学都知道的方法论很可笑;

我们中国的计算机教育是参考国外大学,所以我们也没有教OO,可是关键我们的小学就开始灌输孩子所谓数学数理思维,而音乐绘画等孩子喜欢的象形等类似OO思维就没有培养(罪魁祸首是教育体制 全民选科学家 高考)。

最后,当我们再使用国外发明的软件系统时,包括架构和语言,会发现我们非常不适应,甚至都不会使用孩提时代的形象思维了。


[该贴被banq于2011-06-22 14:04修改过]

我的观点是:只要这个世界还有名字,对象就死不了。

可以将那个函数理解为运算对象,比如+直接用一个加运算函数,不断的用这个运算对象来求值以组成计算机器。
我们说的OO,应该是将对象视为一个生命,用他们(各种对象)去为老板赚钱,对象在履行职责的时候自封装,是高级的抽象数据类型,对象有形,有多态,有家族,有变异,可能圆滑和智能,映射到计算机器,对象的真实行为里面是各种函数在求值,各种函数在玩数学过程,逻辑过程,命令过程。