多谢楼上,能够看懂我的象数之争论述,其实他的哲学和人生思想以及个人能力已经上到一个很高层次了。

看了banq的关于“象数之争”的论述,感觉受益匪浅。

个人愚见:面向对象是一个从整体把握问题的方法,从整体来看待问题,从而找到解决问题的方法,而面向过程指的是实现你所找到的方法。

就像面对一个问题,根据面向对象的方法来分析这个问题,设计出了很多类,但是类中的方法还要用面向过程的思想来实现。

所以,我认为面向过程和面向过程都要学的,如果只学习面向对象的思想,那不是眼高手低嘛。

以上只是个人愚见。

1 面向对象和面向数据库都是设计层面,都需要考虑。
2 其实在这之上是系统的结构层面,虽然也有面向对象的影子,但其实又非常不一样
3 在需要的地方使用合适的技术,设计非常重要,但是不要什么地方都设计,设计主要针对于结构
4 也许在大多数地方,明确的规范,严谨的开发流程控制更重要
5 构建一个系统,设计思路开始的地方肯定不应该是数据表


个人愚见:

面向对象与面向过程是有必然联系的!

过程是量,OO是质,过程的量变必定达到OO的质变,最终将是软件业的发展。只是时间的问题。

曾经是用 过程(语言)的 表达方式 做 过程的 事情。

当发现这种东东满足不了现实社会的发展时,发生了飞跃。

而今是 用 OO (语言)的 表达方式 做 过程的 事情。

( 个人愚见)会有那么一天,你会发现你同样无法自如的满足现实社会的发展,而将产生飞跃。

而,这种飞跃的很可能的一种方向是:
用 OO (语言)的 表达方式 做 OO 的事情。
(只待这么一种方向变得 成熟 高效)
同样,会存在其他的 方向(这种方向的探索者)。


(个人愚见)搞软开的,大部分人是安于现状的,随波逐流的。

而,只有少部分人是 探索的,也只有这少部分人将带领软件行业向前发展。banq 则算是 (一种方向的) 探索中的大师。

我是这条路上的孩子,渴望进步!


从哲学上来说,任何物象都各个力量的一个平衡,随着物象的不同变化,其作用力也随之变化,核心不是不变的,数据与对象是相互依赖互为作用的存在.对象化最初只是对数据的一种管理手段,给量分名别类而已。一个简单的例子来说,对象就像文件夹,数据就象是文件,文件夹跟文件矛盾吗?
数据+算法=程序。只能说是广义的、最基本的程序设计思想,不能说错,但这个定义它太混沌、不够精细。数据要怎么来管理,算法要怎么来管理,程序要怎么来适应变化,给数据、算法、程序一个什么样的"文件夹"才是体现程序员的水准。
抽象是什么就是将事物的特征用数据来表达,以利于运算.得精言其"性"。
管理是什么就是明事理使之平,规范行为,以利于管.得广言其"命"。
"性命"之本在于明察秋毫。
以自己的观点来说,简单来说对象化就用以class来体现事物的精度、class与class之间的关系来表达事物的广度。
事物经过无限的未来后里总会变得面目全非的。所以我们才会有做不完的事情,才会有吃不完的饭。规律与知识同样存在时空性,连续性。男人、女人是不同的吧,但是当他要跟其实不是人的东西区别的时候他就成了相同的事物,仅此而已,很简单也很玄妙,不是笼统的一个命题就能判定是谁非的,"一花一世界 一叶一如来"。
用有限的知识来表达无限的可能,太难。
[该贴被bookview于2009-05-19 18:29修改过]

数据+算法=程序,说白了这个问题还是层次的问题。站在机器的角度来看,这个公式没问题。而BanQ大哥"数据+算法<=程序",显然是程序员的思维。你的面条式的?还是结构化的?还是面向对象?这是你程序员编程的方法而已。机器把你的一行行代码编译后就只剩下"数据+算法"了。机器才不管你是结构式还是OO.

>>>机器把你的一行行代码编译后就只剩下"数据+算法"了。
没有数据,也没有算法,只有一大堆0和1。

我认为面向对象本身就是算法,它是大脑的算法。计算机冲其量只是大脑的部分镜象模拟。所以我觉得程序不应该把大脑排除在外,那公式是不是应该写成:程序=数据+大脑

谁能替我解惑,什么是算法?

现在的“算法”和当初提出时的“算法”还一致么?

任何概念都有一个上下文,都有一个环境,概念也要与时俱进。

数据+算法=程序 是真理?没有听说过

如果你说算法包含了程序中除了数据以外的“所有”东西,或许我还可以认为这个“等式”成立。

如果我们写一个排序程序,只要写一个算法就足够了,你可以简单的认为“它”是真理。

在企业应用中,大家都知道,一个程序包含了很多东西,不是一个“算法”就可以概括的,除非“算法”真的是与时俱进了。

有意思。
来学软件,还学到了哲学思想。
综合各位大师的观点,我得出了自己的看法:面向数据和面向对像,是对同一个事物的两种不同看法。我选择后者。
我是新人,大家看看有没有误导了新人O(∩_∩)O

计算机(computer),是一种用来模拟解决现实问题的工具。
计算机所有模拟解决问题的动作,都称之为“计算”(computing),而不仅仅是加减乘除。
开发者想出来让计算机如何去模拟解决问题的方法,叫做算法,而不仅仅是大学里教的排序、归并、回溯等。
既然,在计算机里,所有“动作”都是计算,也就说明了,在计算机里,算法是无所不在的。
算法确定后,就要开始编写代码,就得考虑这代码的编写方式或代码的结构形式,是基本没有章法?还是结构化?还是面向对象?还是OX、OY、OZ等等?
这就是说,OO是在算法之后的东西。
不仅如此,在OOD、OOP中,也有算法的身影。你的OO比我合理有效,说明你做OO的算法比我聪明。
有些场合,譬如设置一些参数,如何设置得好,也有个算法问题。但是,后面无须编码,也就不可能有OO。因此,算法涉及的面,比OO广得多。前面说了,在计算机里,算法是无所不在的,这里再加一句:OO只存在于编程的某个环节。
空谈OO之伟大,没意义。OO是好东西,地球人全知道。还是多具体说说,如何做好OOD,如何做好OOP吧。

境界决定对事物的看法 文化这东西在什么地方都适合 任何行业都适合哲学应用 哲学是科学的科学

象数之争,在讨论下去没有必要。其实大家更应该关注“象”,“数”的融通之道。即寻找出面向对象和面向数据库的调和之道,对象是由属性和方法构成,持久化后就只有属性,属性可以用key-value表示。数据库表中也是存key-value。所以key-value是“象”与“数”的调和之道。具体可见智能领域对象设计之演绎

>>>看了这么多讨论面向对象和面向数据库设计的讨论,这里也发表一些自己的理解。
这两个并列,就很滑稽。
1)首先,应该弄清楚,现代软件是分层的(譬如J2EE架构)。
2)其次,得弄清楚,在哪里发挥你的OO?
不要再拿这两个说事了,你总不能让秦叔宝和关老爷去打一仗吧?

2009年04月08日 16:04 "beepbug"的内容
这设计思想,这OO,能不能去否定算法?在公式“数据+算法=程序”里,OO能挤进去嘛? ...

OO挤在上面了,可能banq还没有指出关键所在,OO面向的是软件,软件是由程序所组合而成的,说得不形象一点就是OO在管理程序(其实这样说是不怎么正确的,但有那么一点意思,这里就别较真),OO里基本上不用算法,但还是可以用(你一定要用我没办法,我写的类没写过算法)。

>>你可以用高屋建瓴的思维去考虑,但是不要掩盖了事务的本质。

<<业务逻辑类的本质是需求,需求的本质是公司的业务,怎么样也不见算法啊?你想说明什么?建筑思维,对,设计思维,我要水泥(算法,数据库等具体技术),但我从来不会去考虑水泥是如何产生的;我要电,我就引用过来,但我不会去考虑电的产生。

banq没有否定算法,请用逻辑去读banq的话,banq只是说明算法已经不能支撑起软件了,也就是用算法的思想去想软件已经不能了,必须跳出算法、数据结构等东西,只能把他们作为材料,真正主导软件设计的是OO中的设计思想(具体一下就是设计模式这类东西,当然不止设计模式)。

banq一直是用设计思想来和我们谈软件,当然在某些人看来是在否定算法,但只要想深一层,就知道banq没有在大局上否定算法,只是单单从软件的设计实现,否定以算法为开端的面向过程设计思想而已。(因为已经过时,或者说已经不能满足需求了,带着这样的想法,再去读读banq的话吧)

OO需要由技术(算法等)所支持,但,注意这个但,但是OO只会去引用算法,也就是说算法对于OO来说只是一个黑盒子,OO的方式就是对那个黑盒子说“帮我排序”帮我“八皇后”,它根本不需要知道什么算法,甚至什么是算法,只需要知道我给他什么,他就能给我什么,或者说,他能做什么,具体怎么做,不管。(类似API)

以前的小软件,对,一个小软件才包含几个程序(或者说功能),直接面向过程,甚至算法直接搞定。但现在的软件,可能么,复杂度这么高(业务啊业务啊),单靠算法能支撑得起么?所以OO出来了,但OO时还要考虑算法的话,和之前有什么不同——就是因为算法搞不定才想去OO啊。但OO只是一个思维过程,做软件光靠OO也不够用,于是大家都把自己的经验总结和升华,最后得到了设计模式。

OO真的不用再考虑算法了,你知道算法是因为你也走过另外一条路而已,但不表明这两者是同一条路。这两者明显是两条不一样的路,而且把架构忽略掉的话,这两者就基本上没有交集了。

现在的软件,基础已经不是算法,是设计模式了,原因是软件需求已经不同于以前了,或者说软件的定义不同了(以前软件是由功能所构成,现在都是业务了,还能从算法开始考虑?)软件的需求已经不同以前了,请各位把这个记在心里吧,功能还是业务,心里清楚吧?

没接触过OO的,可以接触OO,OO有说过算法么?

可能你用JAVA写过算法,但我告诉你,JAVA只是一种语言,它是为面向对象而生,虽然能写算法,也只能算是一种活用而已(或者说恰好而已),当然你可能说JAVA的API中不是有算法么,但API是用来支持软件的,它的目的可以由动态链接库等东西来实现,毕竟在对象之间搞算法是不科学的,试想想,+ - * / 等这些符号全部消失了,所有都替换为方法,所有的基本类型(int)消失了,取而代之的是对象(Integer),算法,从何谈起呢?因为立足点已经不同了,也正因为这样,JAVA不是一个完全的面向对象语言。

JAVA只是一种表现形式,OO还是OO,与算法没有任何关系,而且OO(面向对象)对应的是面向过程,其产物设计模式才是对应算法和数据结构这些。