我们运用面向对象思维进行软件开发,主要是为更好的解决应用领域问题.应用范围不同解决思想就不同,DDD一书说到"不要试图对任何事情都进行领域驱动设计",j道有一篇文章说到了这个问题.
http://www.jdon.com/mda/oo_relation.html
数据表建模属于数学范畴思维;而OO建模属于哲学思维
所以,面向对象思维并不是和数学思维排斥的,只是提高了数学思维的层次而已,不再是纠缠于具体的公式和算法,而是把整个业务领域当做一个方程来解而已。我们通常觉得两者相互排斥,是因为所站的水平线高低不同而已。
计算机理论的很多词汇本身就源于数学。
比如每个对象都有函数,就是表面看起来没有,它也有默认构造函数。
在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中怎么去应用,这都很难讲,因为这取决你用线性思维去思考,还是用发散思维去思考,而后者是和个人的思维特质和所能涉及的思维素材有密切关系的。
另外,数学本身这个学科的领域非常之广,所谓数学思维就可想而知了。
从一个侧面可以略窥一斑,古往今来有多少有着数学家身份的同时,还有这哲学家的身份:亚里士多德,莱布尼茨,牛顿,开普勒等等。你能区别开,这些人的思维是哲学的,还是数学的?
对象",如何构造的合理,我想这个过程恐怕是不能单纯用数学来解释的,如果可以,那么前人总结的设计原则为何叫"原则",而不叫"定理"呢,如果真能用数学来推理,那么OO就不可能像现在一样"百花齐放".
所以killer这段话值得思考一番:
->> "所以,面向对象思维并不是和数学思维排斥的,只是提高了数学思维的层次而已,不再是纠缠于具体的公式和算法,而是把整个业务领域当做一个方程来解而已。我们通常觉得两者相互排斥,是因为所站的水平线高低不同而已。"
oo是上层,貌似的确不用太过考虑
不过处理细节的时候不得不承认数学的思维方式还是很有用处的
[该贴被szalucard于2007-11-30 10:01修改过]
我想与你讨认一下支付模型, 联系我: msn:slm2000@vip.sina.com
qq:335460870
http://www.jdon.com/jivejdon/thread/32896.html
[该贴被fety07于2007-12-04 08:59修改过]
当然。特别是你使用函数式面向对象的语言的时候