面向对象范式需要数学思维吗?

大多数程序员都被灌输这样一个观念:一个合格的程序员数学要好.在面向对象范式成为软件开发的主流的时代,需要学好数学吗? 我更认同编程是一种艺术,尤其是现在的DDD,提供了更大的发挥空间. 数学本质上是"抽象",我们的建模也是"抽象",但这两种抽象过程是截然不同的思维过程.个人观点

数学模型主要指的是算法。如果你需要对算法进行设计就必须对数学精通。不过现在绝大多数情况下,我们考虑的多是程序结构。一般常见的算法经过多年的发展,已经很成熟了。基本上直接引用就可以了。

认同wlmouse的看法.

我们运用面向对象思维进行软件开发,主要是为更好的解决应用领域问题.应用范围不同解决思想就不同,DDD一书说到"不要试图对任何事情都进行领域驱动设计",j道有一篇文章说到了这个问题.

http://www.jdon.com/mda/oo_relation.html
数据表建模属于数学范畴思维;而OO建模属于哲学思维

我觉得面向对象的思维和数学思维并不是相互排斥的,而是相通的。数学思维说到底也是一种逻辑思维,用数学方程的方式对现实世界的领域逻辑进行建模,最后体现的也是一套概念,判断,推理所构成的理论体系,具有形式化的特点,可操作性强,输入真实性的前提,就一定能得出真实的结果。比如x+y = z ,用真实的x和y值代入方程,结果x的值是唯一的。而我们的软件系统又何尝不是一个逻辑系统呢,说到底,我们的软件就是一个符号语言逻辑系统,只是把x,y等换成了一些程序语言的标识符,把加减乘除换成一些逻辑操作符而已,面向对象也只是把这些标识符和操作符再封装了一层,给定特定的输入值,我们的软件系统所跑出来的结果也是确定的。只是我们的符号语言系统形式化水平更高而已,能准确地表示逻辑形式,还能提高我们思维的速度和效率。

所以,面向对象思维并不是和数学思维排斥的,只是提高了数学思维的层次而已,不再是纠缠于具体的公式和算法,而是把整个业务领域当做一个方程来解而已。我们通常觉得两者相互排斥,是因为所站的水平线高低不同而已。

数学思维绝对有用,有用的程度取决你个人本身对数学认识的程度。
计算机理论的很多词汇本身就源于数学。
比如每个对象都有函数,就是表面看起来没有,它也有默认构造函数。
在OO中,虽然我们用所谓哲学思维来构造对象,但最终对象如何构造的合理,那是要让对象之间行为有利于操作的,更是有利于计算的。
在OO中,你能说出行为/操作/方法/函数到底有什么区别吗?
然而他们都有潜在的实质。

函数公式大家都清楚:y = f (x) x属于定义域,y属于值域,f是function的简写.
写程序,你必然会关注输入,输出,在程序里输入输出的基本构成就是函数。x可看作输入状态数据,y当然就可看作输出状态数据。

在对象中,状态/属性/数据其实也说的是一回事。

回过头来看,对象中的属性和操作两部分,与y=f(x)有哪些相似性呢?

还有关于MVC, 多说两句,View称为视图层,视图其实就是状态数据+显示,状态数据就是x,y两部分,请求request是x, 响应respone是y.

Model称为模型层,那到底模型是什么呢?
从某种程度可以看作 y = f(x) ,再加上x,y所属的集合:定义域,值域。

control控制层起什么作用呢?就是根据客户那一边发起的输入状态以及相关信息,来指定服务那一边哪个模型去匹配,并控制模型向试图传回相应。

简单就这样讲讲。

至于数学思维具体在OO中怎么去应用,这都很难讲,因为这取决你用线性思维去思考,还是用发散思维去思考,而后者是和个人的思维特质和所能涉及的思维素材有密切关系的。
另外,数学本身这个学科的领域非常之广,所谓数学思维就可想而知了。
从一个侧面可以略窥一斑,古往今来有多少有着数学家身份的同时,还有这哲学家的身份:亚里士多德,莱布尼茨,牛顿,开普勒等等。你能区别开,这些人的思维是哲学的,还是数学的?

数学思维肯定是有用的,但它针对的问题域要小一些,面向对象的分析设计主要还是系统思维和发散思维。数学思维是在前两者的前提下针对具体问题域的解决方法。

youway用数学的思想来解释OO,这样的解释未尝不可.我们就把"最终对象如何构造的合理,那是要让对象之间行为有利于操作的,更是有利于计算的."当成y = f (x),我们所有的软件都是围绕这个公式转的. "x"如何到"y"的.这个我们已经不用去关心,可以说我们不必要去关注这个抽象,计算机已经帮我抽象好了,关键是我们要关注的是x,即"定义域",在软件中就是"问题域",好,如何抽象出"x",在软件中就是抽象出"
对象",如何构造的合理,我想这个过程恐怕是不能单纯用数学来解释的,如果可以,那么前人总结的设计原则为何叫"原则",而不叫"定理"呢,如果真能用数学来推理,那么OO就不可能像现在一样"百花齐放".


所以killer这段话值得思考一番:

->> "所以,面向对象思维并不是和数学思维排斥的,只是提高了数学思维的层次而已,不再是纠缠于具体的公式和算法,而是把整个业务领域当做一个方程来解而已。我们通常觉得两者相互排斥,是因为所站的水平线高低不同而已。"

底层开发的发展离不开数学。
oo是上层,貌似的确不用太过考虑
不过处理细节的时候不得不承认数学的思维方式还是很有用处的
[该贴被szalucard于2007-11-30 10:01修改过]

fety07 ,你好:
我想与你讨认一下支付模型, 联系我: msn:slm2000@vip.sina.com
qq:335460870

我们可以到这个板块,和大家一起讨论,效果更好.

http://www.jdon.com/jivejdon/thread/32896.html
[该贴被fety07于2007-12-04 08:59修改过]

面向对象范式需要数学思维吗?

当然。特别是你使用函数式面向对象的语言的时候