论坛首页 Java企业应用论坛

读raimundo《关于面向对象设计与数据模型》有感

浏览 5384 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-07-09  
OO
最近参加了Java企业应用版庄表伟的<<敲响OO时代的丧钟>>一文的讨论, 其中
庄表伟 写道

看一篇曹晓钢也极力推荐的raimundo的《关于面向对象设计与数据模型》的精彩论述。http://www.redsaga.com/mambo/content/view/31/2/

说实话raimundo这篇论述我在不同的地方看了不止5遍,现在突然有些想法,由于这些想法有悖于正统的"计算机科学"的思路,故不敢在其他版面发表,在此写下只当是科幻小品供各位在酒足饭饱之后点评。

raimundo论述的核心思想是面向对象的本质和图论联系在一起,而图论具有思考和计算的复杂性,所以面向对象的算法并不适合数据模型。我查阅了一些论文,的确有些论文将试图将面向对象的理论建立在图论之上,也取得了些成果,所以raimundo的结论应该讲在现有的计算理论之上有一定的合理性。

但是我反过来也在思考这样的一个问题, 现有的计算理论很大部分都是建立在图灵机的基础之上,所以可以归结为递归计算的东西都可以被证明是可计算的,其计算的复杂性也可得知,blablabla.... 一切都显得如此完美和科学。但是现有的计算是不是人类唯一可能的一种计算工具呢?我看不大可能,如果动物的脑子也被认为是一种计算机的话,动物在求偶时也在做某种递归运算呢?可能性好象不大。

我不知道是否别人和我一样,我觉得在分析问题的时候是运用的OO的方法更自然和更符合我的思维习惯。那么是不是有可能OO在另类的计算工具(如我的不够发达的脑子)上计算其复杂性就是低的呢?从计算机的历史上看,从面向过程的方法到关系代数数据库的应用,到面向对象的方法,是否可以认为是人类的计算模型在逐渐地在淡化图灵机?如同蒸汽机只是现在多种动力机中的一种,是否到某天图灵机就象只是多种计算机类型中的一种呢?也许在我们的有生之年就可以看到....
   发表时间:2005-07-09  
JavaCup 写道
最近参加了Java企业应用版庄表伟的<<敲响OO时代的丧钟>>一文的讨论, 其中
庄表伟 写道

看一篇曹晓钢也极力推荐的raimundo的《关于面向对象设计与数据模型》的精彩论述。http://www.redsaga.com/mambo/content/view/31/2/

说实话raimundo这篇论述我在不同的地方看了不止5遍,现在突然有些想法,由于这些想法有悖于正统的"计算机科学"的思路,故不敢在其他版面发表,在此写下只当是科幻小品供各位在酒足饭饱之后点评。

raimundo论述的核心思想是面向对象的本质和图论联系在一起,而图论具有思考和计算的复杂性,所以面向对象的算法并不适合数据模型。我查阅了一些论文,的确有些论文将试图将面向对象的理论建立在图论之上,也取得了些成果,所以raimundo的结论应该讲在现有的计算理论之上有一定的合理性。

但是我反过来也在思考这样的现有的计算理论很大部分都是建立在图灵机的基础之上,所以可以归结为递归计算的东西都可以被证明是可计算的,其计算的复杂性也可得知,blablabla.... 一切都显得如此完美和科学。但是现有的计算是不是人类唯一可能的一种计算工具呢?我看不大可能,如果动物的脑子也被认为是一种计算机的话,动物在求偶时也在做某种递归运算呢?可能性好象不大。

我不知道是否别人和我一样,我觉得在分析问题的时候是运用的OO的方法更自然和更符合我的思维习惯。那么是不是有可能OO在另类的计算工具(如我的不够发达的脑子)上就是不再有计算的复杂性呢?从计算机的历史上看,从面向过程的方法到关系代数数据库的应用,到面向对象的方法,是否可以认为是人类的计算模型在逐渐地在淡化图灵机?如同蒸汽机只是现在多种动力机中的一种,是否到某天图灵机就象只是多种计算机类型中的一种呢?也许在我们的有生之年就可以看到....

说的很神秘,其实问题的本质本没有这么晦涩难懂。 只不过我们把它想得太过复杂。问题的根源在于我们要做一种彻底的转换,殊不知他们之间是一种相互依赖和相互利用的关系。做这种严格对比有何意义?  发现问题--〉正视问题 ,而不是发现问题--〉纠缠问题


对象模型因为其更贴近描述世界以及更符合OO实现的优势而被广泛采用。然而,在如今,对象模型的实现仍然脱离不了底层数据库的支持,这就使得对象模型到数据库模型之间的转换成了如今的大热门。

从ORM之间的角度来看,仅仅从模型的转换,这并不是多大的难题,难题在于操纵数据的转换。基于路径的访问和基于关系的访问的转换似乎也不是难题,然而当模型非常复杂,考虑到对比于直接访问数据模型的效率,这种转换的难度是非常大甚至很难得以实现。
同样,基于内存的考虑,这些转换也需要提供额为的考虑。
这是操纵对象模型和操纵数据模型之间存在的一个实际问题,然而,当大家意识到并争论这个问题的时候,似乎以一种取舍的心态来选择对象模型或者数据模型。现在也流行这样的说法:“ORM可以让你不再考虑SQL,可以不再考虑数据库底层的实现!” ,这种说法是十分荒谬的,这种错误的说法源于对ORM理解的错误。
在如今,对象模型依赖于具体数据库的实现。这种依赖使得我们在具体应用开发的时候不得不时刻提醒自己,你是在操纵底层数据库而不是一个虚拟的底层数据
模型。不具备一定数据库基础的程序员不可能成为专业企业应用开发人员。
如果当你善于利用对象模型和善于理解什么时候该考虑底层数据库数据操纵效率以及什么时候该作出一种决折时,你就发现对象模型和数据模型本来就是互结合相互利用的关系。他们之间本什么冲突。如果硬要在他们之间做一个对比的话,那不如说:对象模型可以大大提高开发效率,
数据模型提供对象模型的底层实现。 如果硬要在这一句话之后加一个注释的话,
我会说:请时刻提醒自己,你操纵的是底层数据模型。
0 请登录后投票
   发表时间:2005-07-12  
OO是一种认知论、方法论。它适合于对付复杂事物。不管背后的原因是什么,我们这个世界恰恰是复杂的(这种复杂性到底意味着什么,怎么描述,却有着众所周知的难度)。人类的思维是高级的,因为它有抓住复杂事物或现象的"质"的趋向,实际上体现了一种把复杂的东西简单化的能力,而OO体现了相似的特点。

OO并不是要把事情搞得不必要的复杂。OO恰恰有一种趋势,它要把事情变得简单。经过良好设计的OO系统中包含的复杂性往往反映了事物本身的复杂性。“抽象”是OO看待事物的核心要点。这种“抽象”能力要在复杂中抓住简单性。人们往往容易被表观的复杂性所迷惑,包括各种具体的OO技术、语言自身所带有一些复杂性。有可能把一些人引入迷途。

所以对于rainundo的关于复杂性和简单性的见解,我保留自己的看法。文中rainundo对于OO为什么成功,看得或解释得过于简单了,它只能在高层来解释。

纯粹的数据模型,在一些场合将丢失了众多的含义,比如事物的行为,之间的作用关系,无法充分表达复杂事物本身。数据模型只是一个视角,只能在它的适应面中存在。在OO以前,我们经常采用“PO+数据模型“来做事,实际上把复杂性相当程度转移到了PO之中。我认为从理论上来说,对象模型不好与数据模型对比,它们可能并不属于一个层面的。不过我基本同意firebody的看法,对象模型和数据模型可以是一种依赖和利用的关系。我倾向于认为对象模型可以在下层与数据模型汇聚。

至于JavaCup兄提到的多种计算模型,老实说我不太理解。无论计算机的底层是什么,往上的各个层面都可能有它各自发展的世界,并不一定离不开底层。当然你的猜想可能也是有意义的。你提到动物的脑是否是一种计算机,相当于在问有没有其它形式的不同基础的计算机?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics