ITPub博客

首页 > 应用开发 > IT综合 > 引用关于OO的讨论。。

引用关于OO的讨论。。

原创 IT综合 作者:realji 时间:2007-04-22 14:50:05 0 删除 编辑

http://www.jdon.com/article/29282.html

Re: 什么是OO思想 发表: 2006年10月18日 14:18 回复
banq 发表文章: 7644/ 注册时间: 2002年08月03日 17:08
OO思想简言之,我们谈的 想的 编的 做的 都是围绕一个个对象。

>怎么来培养自己的OO思想呢
了解对象基本概念,对象关系,设计模式, 对象建模,
当然对象框架也必须了解,这是一个渐近过程。

Re: 什么是OO思想 发表: 2006年10月18日 14:36 回复
xinying_ge 发表文章: 16/ 注册时间: 2006年09月26日 17:33
如何来把握,我是不是真的理解了OO思想!我还是觉得很迷惘。
DDD这本书我读了一点,我有的地方真的理解不了!是不是没有OO思想呢?
我很喜欢这个行业,用java编程,但如何才能一步步地往高处走,真的很担心,深怕自己误入歧途,很想Banq大哥和各位指点我一下,如何往下走!

Re: 什么是OO思想 发表: 2006年10月18日 16:46 回复
banq 发表文章: 7644/ 注册时间: 2002年08月03日 17:08
>DDD这本书我读了一点,我有的地方真的理解不了
前几天在TSS上看到一个老外说了,DDD背后就是设计模式,我认为非常正确。

OO不是靠几本书,或几个程序就能练就的,需要一个过程,如果将大学四年都用来进行培养,还是有可能,可是现在国内四年教育不是这么做的,学生毕业后,就没有自己的四年。

所以....在OO方面,大部分都是一穷二白。

你不用担心,都是在一个起跑线,现在认识到了,起步不晚。

2004年左右,OO在J道论坛还被一些人骂得狗血喷头。唉..

Re: 什么是OO思想 发表: 2006年10月18日 20:10 回复
xinying_ge 发表文章: 16/ 注册时间: 2006年09月26日 17:33
Banq大哥,你说现在我认识到,起步不算晚,但如何走步!能不说指点一下?万事开头难,我觉得难就难在怎么开头!
谢谢!

Re: 什么是OO思想 发表: 2006年10月19日 09:11 回复
banq 发表文章: 7644/ 注册时间: 2002年08月03日 17:08
我走过路可能不适合你, 如何让初学者更快地掌握OO思想也是我一个研究项目,因为我也搞培训.

所以,你得问题也比较难倒我,有一个强制办法:在项目实践中强行使用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个模式一样,这些需要我们不断讨论....

Re: 什么是OO思想 发表: 2006年10月19日 09:26 回复
xinying_ge 发表文章: 16/ 注册时间: 2006年09月26日 17:33
谢谢您的回复!
我会努力往这方面走的,我也相信我有这样的恒心!
谢谢您Banq大哥,说实话我从Jdon上学到很多东西!
我会一直关注Jdon!

Re: 什么是OO思想 发表: 2006年10月19日 10:51 回复
banq 发表文章: 7644/ 注册时间: 2002年08月03日 17:08
说实话,现在学习OO的环境,无论从理论和实践方面要比我们当初好多了,现在OO在Java领域可谓是瓜熟蒂落了。

如果我们再不抓住的,真的没有必要再做这一行了。

Re: 什么是OO思想 发表: 2006年10月19日 17:12 回复
sunxuezhen 发表文章: 5/ 注册时间: 2006年10月11日 16:48
我不同你bang的想法,你把OO神化了。并不是所有的问题都需要用OO来解决的。因地制宜才是合理的选择。

Re: 什么是OO思想 发表: 2006年10月20日 13:36 回复
banq 发表文章: 7644/ 注册时间: 2002年08月03日 17:08
>我不同你bang的想法,你把OO神化了

是的,有人说OO不是银弹,看看国外TSS网站上老外关于OO争论的一个贴子,特别是一个老程序员说:我近几十年的职业生涯的大部分时间是在挽救修改别人低劣的代码,是不是我们还要再等二十年呢?

http://www.theserverside.com/news/thread.tss?thread_id=42602

Re: 什么是OO思想 发表: 2006年10月24日 20:35 回复
grrrr 发表文章: 2/ 注册时间: 2006年10月24日 20:24

> OO不是靠几本书,或几个程序就能练就的,需要一个过程,如果将大学> 四年都用来进行培养,还是有可能,可是现在国内四年教育不是这么做> 的,学生毕业后,就没有自己的四年。

大学的四年都培养OO?OO确实是企业应用开发的利器,但没必要上升到这个高度吧。所有的大学毕业生们都一个个的java?基础的算法、数据结构才更应该是乘这四年好好学习的东西,我们更缺一些基础的东西。举个最直白的例子,OO领域打的最火的java/.net,不都是美国人鼓捣出来的吗?

Re: 什么是OO思想 发表: 2006年10月24日 20:48 回复
grrrr 发表文章: 2/ 注册时间: 2006年10月24日 20:24
当然如果想做应用开发的话掌握好java以及其中设计模式的思想很重要,学java最好的体验是在具体的项目中,比较代码的优劣,总结成败的得失。现在国内也很缺优秀的java开发人员。
但让国内的大学都四年教授java和OO,就觉得过了。

Re: 什么是OO思想 发表: 2006年10月25日 07:00 回复
chinsoft 发表文章: 1/ 注册时间: 2006年10月25日 06:34
我们不是在讨论OO吗,为什么一定就要把JAVA拉近来。掌握了OO的概念后可以应用在不同的语言上,JAVA只是比较成熟的一个罢了。4年学一个语言当然是crap,一个学期OOP,一个学期00D(用的是JAVA),足以,往后的就靠自己去研究了,当然还有其他高级的OO应用的科目。BANQ提倡了 OO,没有限制在JAVA。Data Structure和procedure programming应该是放在OOP/D之后的,这样对OO的概念会有更深的认识,和对DSPP本身更容易理解和掌握。

中国学生就是拜倒在“基础”上了,一提到什么技术就说,把基础打扎实。要的是科学(SCIENCE),基础(fundamental)是科学的训练的第一步就是最容易的,时间应该是花得最少的,真正在research和后面的advanced环节就很少听到中国学生/教师提倡。网上资源无穷,但总是有学子在求书,求代码等等,就是没有research的能力。如果还不意识到这个问题,那就永远停留在基础上面吧。

PS:楼主,很多东西没有真正的对错的,不值得花时间考究什么是“正道”,“误入歧途”也会给你带来有价值的收获。最好的学习方法是用技术去实现自己想要的东西,如一些dream projects,没有目的的去学,就好比为学习而学习。

Re: 什么是OO思想 发表: 2006年10月27日 12:46 回复
banq 发表文章: 7644/ 注册时间: 2002年08月03日 17:08
Evans DDD和GOF 设计模式可以说是OO思想实战的左右手。

OO其实要解决两个重要基本问题:对象如何设计创建;对象创建后之间关系如何协调。

Domain Model解决了业务对象如何创建设计问题,也就是业务对象应该怎样从需求中提炼出来成为一个对象,如果没有这一步,我们何以面向对象?或基于对象编程呢?

当对象很多时,如何协调组织他们关系,使得更易于变化,就象中国古代阵法一样,一个阵法应对一种情况的。

这两个基本方法思想掌握了,你的系统就不同于以往传统过程化面向功能的系统了。

Re: 什么是OO思想 发表: 2006年12月06日 09:15 回复
chuxuezhe 发表文章: 5/ 注册时间: 2006年11月28日 10:07
我来说几句吧,其实所有的design pattern,还有OOD,都讨论同一个问题,那就是当你做一个系统的时候,如果新的需求来了怎么办?你的系统是不是能够不用修改代码或者做最小的修改来满足新需求,(OCP原则),所以围绕这个问题,OO语言,有了他们的解决知道,其实所有的其他过程语言例如c也都可以解决,只不过写出来的代码没有 OO语言来的优雅和漂亮,因为是compiler已经支持了那些encap., inherit, poly.特性,所以说白了,也无所谓的是否一定要OO,只要你的解决之道能够,解决OO所优雅解决的问题,也就够了。多想想这个,自然明白了什么是 OO。 以上是个人观点。仅供参考 。

re:什么是OO思想 发表: 2007年01月15日 18:02 回复
chinalu 发表文章: 1/ 注册时间: 2007年01月15日 18:02
OO 不难,难就难在如何掌握好粒度的粗细程度,是需要经验的,你说对吗。
msn: bill_lyp@hotmail.com(欢迎交流)

re:什么是OO思想 发表: 2007年03月08日 10:59 回复
abiandbel 发表文章: 16/ 注册时间: 2007年03月08日 10:13
用OO的开发方式去分析,设计一个系统,
掌握OO还是需要掌握许多的,我认为有以下几点必须掌握:
1. UML 这是OO的工具,OO 开发人员交流思想的工具.
2. 了解RUP. 掌握好的软件开发过程才能开发出好的软件,RUP其实就是指导我们OO分析与设计的一个开发过程.我一直认为RUP是正宗,虽然他烦琐.
3. 理解建立领域模型的重要性.Evan的DDD的确是这样的好书.这个到现在也说不出什么道道.
4. GOF 23 DP DP其实就是OO思想的最好的体现,是牛人OO思想的结晶.学习DP的时候不光要理解怎么用,更重要的要理解从重构到模式的思想.这个过程其实就是理解 OO设计原则的过程. OCP,SRP等等这些.学习设计模式是方法,而最根本的还是要掌握最根本的OO 设计原则.
5. 编码的过程中,要彻底理解"针对接口编程"这句话.这个其实就是建立在好的设计基础上的.我当时理解这句话的时候有所体会的时候,在看李建忠设计模式视频的时候.
6. 学习IOC.OO设计原则OCP是实现程序易扩展的一个理论保证,IOC 我觉得就是实现的一个良好手段.这也正是构件化编程的基础.我在.NET里面学习的是Castle, Java里面当然是Spring了.
7. O/R Mapping.当了解了O/R Mapping以后,数据库真变的不是那么重要了.的确是不能太关注数据库,我的实践已经证明过度关注数据库的后果肯定是面向过程.

最后在提一点:OO设计很重要,但我觉得更重要的还是OO分析,即建立领域模型.
面向对象的最独特之处,在于他分析需求的方式,不要过分的纠缠于程序的画面、操作的过程,数据的流程,而是要更加深入的探索需求中的一些重要概念。

re:什么是OO思想 发表: 2007年04月05日 17:33 回复
zhaoping_yu 发表文章: 6/ 注册时间: 2005年09月20日 08:41
唉,大家为了讨论“什么是OO思想”,又把什么UML、RUP、某某框架之类的东西摆出来,这些对解释“什么是OO思想”真的很不重要,尤其对初学者来说。

大家编程序是为了让编出来的程序帮我们做事情、解决问题的。简单地说,在目前的计算机体系下,所有程序最终的形式都是一大堆机器指令对数据的操作,操作的结果就是我们想让计算机帮我们做的事情。所以我们写程序从根上来说就是写一条一条的机器指令教计算机怎么一步一步地操作,最终实现我们要做的事情。这也是计算机刚开始出现时人们就采用的编程序的方法,目前大家称这种方法为“面向过程”的编程方法。

“面向过程”的编程方法基本的编程方式如下:
一切以“我”为中心考虑问题:要做某件事情,第一步要做A、A做完后要做B事情、如果B不成功那么我做C,否则我做D......等等。在这个过程中,把重复出现的一些步骤(完成了更高层概念的事情)包装在一起当作一个整体使用,称之为“函数”(这是一个层层包装递归的东西,直至最底层的机器指令);把逻辑上相关的一下数据(代表了更高层概念的事物)包装在一起当作一个整体使用,称之为“结构”(这也是一个层层包装递归的东西,直至最底层的存储器)。

这种编程方法其实是人们很自然的做事的方法,大家考虑做事的时候一般都是这么考虑的。

而“面向对象”的编程方法(即OO思想)打破了以“我”为中心考虑问题的习惯:要做某件事情,首先考虑应该由“谁”来做,或者说做这件事情是“谁”的责任(“谁”来负责这件事情),接着考虑“谁”应该和“谁”协作来完成更高层概念的事情。指定由“谁”来做这件事情的时候不必考虑他是如何做的(即如何实现的),只知道他负责这件事情能得到需要的结果就行了。而这个“谁”就称之为“对象”,所谓的“对象”就是负有责任的东西。而“对象”在实现自己负责的事情时也可以做同样的考虑(应该由“谁”来做;“谁”应该和“谁”协作来完成),这个过程也是一个层层递归的过程,直到最后总是由逃脱不了责任的对象简单地亲自操作一下:)。

“面向对象”编出来的程序与“面向过程”编出来的程序在代码的组织上一个明显的特点是决没有一个主控对象来统一指挥,而是一些相互协作的平等对象组成的一个协作网络;决没有一个主控对象到处搜集信息来完成某件事情,而是把事情交给知道这些信息的对象来完成。

(至于为什么会提出“面向对象”编程和“面向对象”编程的好处,在这里我就不说了)

但是光有“面向对象”的思想并不能保证写出来的程序一定好的,而是要遵循“面向对象”的一些编程原则才有可能写出好程序,比如:封装原则、隐藏原则......等等,介绍这些编程原则的书籍很多。总的来说:每种对象负责的责任越单一越好,不要让一类对象负太多的责任尤其是不相关的责任;对象在完成自己负责的事情的时候,最好不要让外面知道或者说这方面信息外面知道的越少越好。尤其要注意的是:一定要把握多态性这个概念。
GoF的设计模式更是提炼了优秀的“面向对象”编程原则和思想,例如:
封装变化点;
面向接口编程;等等,把“面向对象”的思想提到了一个新的高度,真是绝了!


我的以上这些思想不是以专家的身份来说的,我只是一个普通的程序员、一个编了十几年程序员;我也不是计算机科班出身,也没受到过系统的计算机教育。这只是我的一点悟出来的体会,并从一些书上得到认可的思想,不当之处请大家拍砖;希望有机会和大家分享一下我更多的悟出来的一些思想。

题外:
有人讨论说“use case 和场景”引入UML(或者说RUP)不是面向对象的,哈哈,真是笑死人了,那是他们不了解面向对象思想的真谛罢了,关键是你以什么样的眼光来看待它。照他们这么说,对象方法的实现里最终不都是过程语句吗?在我眼里,1+2这样的语句都是面向对象的。

有人说“对象”就是把相关的数据和相关的操作方法封装在一起。这是彻底的垃圾思想,千万不要这样看待对象。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7425608/viewspace-911917/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: apache 与jboss连接
请登录后发表评论 登录
全部评论

注册时间:2008-01-09

  • 博文量
    55
  • 访问量
    161930