什么是OO思想
请各位和Banq大哥,指点我这个迷惘的羔羊!
>怎么来培养自己的OO思想呢
了解对象基本概念,对象关系,设计模式, 对象建模,
当然对象框架也必须了解,这是一个渐近过程。
OO不是靠几本书,或几个程序就能练就的,需要一个过程,如果将大学四年都用来进行培养,还是有可能,可是现在国内四年教育不是这么做的,学生毕业后,就没有自己的四年。
所以....在OO方面,大部分都是一穷二白。
你不用担心,都是在一个起跑线,现在认识到了,起步不晚。
2004年左右,OO在J道论坛还被一些人骂得狗血喷头。唉..
所以,你得问题也比较难倒我,有一个强制办法:在项目实践中强行使用GoF设计模式,以使自己了解设计模式,再和别人讨论.
为什么推荐从Gof设计模式这个高难度知识入手呢?因为OO思想是一个说了也白说得问题,过去我用禅来打比喻,OO思想是无法象1+1=2那样传授告诉别人得,必须每个人自己体会,那么体会得实践是什么?就是自己在项目中开始有意识使用设计模式.
下面一步就是使用Struts Hibernate之类正宗对象框架,特别是持久层,摆脱数据库得影响,以前我说数据库时代过去了,就是这个意思,为什么搞Swing等图形程序员容易接受OO,因为他们没有关系数据库干扰,而搞J2EE得则经常被数据库和过去数据库编程经验干扰,围绕数据库编程容易导致过程编程,这些都是与OO格格不入的.
关系数据库与OO存在天然阻抗,也就是不匹配,所以我们要使用O/R mapping如Hibernate之类框架来培养帮助我们对抗数据库的干扰,当你知道什么是OO后,再使用JDBC,这时你心目中的JDBC就是顺服于OO思想下的工具了,而不是主导你破坏你OO思想的恶魔.
数据库时代的终结
http://www.jdon.com/artichect/dbover.htm
总之,要走上OO,需要彻底摆脱过去经验对自己的干扰,因为我们国内大学的软件教育基本都是过程化编程思路,自己走上工作岗位后,又都是自觉学习,这些都其实不是OO,这些知识和经验会干扰OO思想的形成,要和他们做斗争,驱赶他们.说白了,就是与自己进行痛苦斗争,蜕变是一个痛苦过程,尤其是思想方法,所以做到的人很少.
坚持下来的人,达到OO彼岸的,唯有真正对软件热爱和有兴趣的.所以考验你是否走上OO思想,就看你的兴趣和毅力.
很多人说搞Java苦啊,其实也是反映这个艰苦历程.
其实,在这个过程中,需要经常和别人讨论,J道等论坛提供这样场所,我们经常看到很多人在论坛讨论技术秘籍问题,而很少提及设计问题,怎么设计好,如何建立一个对象,对象边界在哪里,这些讨论语言包括在J道论坛都很少看到,这只能说明一个问题.....
Evans DDD其实将对象如何建立这个基本问题进行了总结,就如GoF设计模式总结了23个模式一样,这些需要我们不断讨论....
如果我们再不抓住的,真的没有必要再做这一行了。
是的,有人说OO不是银弹,看看国外TSS网站上老外关于OO争论的一个贴子,特别是一个老程序员说:我近几十年的职业生涯的大部分时间是在挽救修改别人低劣的代码,是不是我们还要再等二十年呢?
http://www.theserverside.com/news/thread.tss?thread_id=42602
大学的四年都培养OO?OO确实是企业应用开发的利器,但没必要上升到这个高度吧。所有的大学毕业生们都一个个的java?基础的算法、数据结构才更应该是乘这四年好好学习的东西,我们更缺一些基础的东西。举个最直白的例子,OO领域打的最火的java/.net,不都是美国人鼓捣出来的吗?
中国学生就是拜倒在“基础”上了,一提到什么技术就说,把基础打扎实。要的是科学(SCIENCE),基础(fundamental)是科学的训练的第一步就是最容易的,时间应该是花得最少的,真正在research和后面的advanced环节就很少听到中国学生/教师提倡。网上资源无穷,但总是有学子在求书,求代码等等,就是没有research的能力。如果还不意识到这个问题,那就永远停留在基础上面吧。
PS:楼主,很多东西没有真正的对错的,不值得花时间考究什么是“正道”,“误入歧途”也会给你带来有价值的收获。最好的学习方法是用技术去实现自己想要的东西,如一些dream projects,没有目的的去学,就好比为学习而学习。
OO其实要解决两个重要基本问题:对象如何设计创建;对象创建后之间关系如何协调。
Domain Model解决了业务对象如何创建设计问题,也就是业务对象应该怎样从需求中提炼出来成为一个对象,如果没有这一步,我们何以面向对象?或基于对象编程呢?
当对象很多时,如何协调组织他们关系,使得更易于变化,就象中国古代阵法一样,一个阵法应对一种情况的。
这两个基本方法思想掌握了,你的系统就不同于以往传统过程化面向功能的系统了。