JR 精品文章 - 何必非要OOP?
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » J2EE综合 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
何必非要OOP?
lgx522 原创   更新:2007-02-12 10:47:17  版本: 1.0   

这篇文章其实是笔者多年以来的疑问感悟所成,估计各位居于不同语言阵营中的同道们也会有不少类似的疑问,愿此文抛砖引玉,与大家共同探讨。

笔者转向Java Web编程前从事的是传统的Delphi C/S编程。转过来后就觉得J2EE分层太多,每到更改,每层几乎都要涉及,相当麻烦且易出错。在Java Web之余,又涉及了一些ASP、PHP之类的东西,才发觉Web编程也可如此简单,不禁对J2EE产生了很大的疑问:本来可以简单实现的东西,何必搞得那么复杂?
近两年OO水平上涨后才逐渐领会到其中玄机。OO与分层最重要的好处其实业务逻辑及类库的复用!OOP将数据存储、业务逻辑、表示层分离,就可以适应多种数据存储方式与表示层技术的变化。比方说,你就可以选用多种数据库、XML甚至文本!也可以选择WEB、Rich Client以至于手机、PDA。当存储层与表示层变化时,业务层几乎可以保持不变。原因其实也简单:传统的过程式编程是把他们在一块写,而OO则是分开来写。而天下事总是利弊相当,OOP的高适应性也就必然为其带来高度的复杂与费时,甚至修改时的麻烦。综上所述,OOP其实是便于扩展而不适于修改。原因简单之极,写在一起的改起来只需改一处,分开写的改起来则要改每一处。
这一点上顺便提一下Sun的经典J2EE。经典J2EE其实是把OOP做到了极致,除却上述坚决的三层分离外,EJB更把数据存储层的事务与业务层的分布式特性加入其中。这对大型系统而言绝对是极大的福音。而中小型系统基本上是不需要事务与分布式的,这样一搞就让J2EE非常复杂。于是Sun的经典J2EE遭到了绝大多数中小系统应用开发者一致的口诛笔伐。可到了真正的企业级领域,J2EE的地位却难以撼动。这充分说明了OOP的极致是适应性与复杂性的综合体。这好比生物界中的生物,适应性越高的生物(如人类)必然越复杂。

是否采用OOP,OOP用到什么程度,要因软件产品的定位而论。如果考虑的是扩展性,业务逻辑相对固定,而存储层、表示层变化多的情况下,OOP当是不二之选;而存储层、表示层相对固定,业务逻辑变化大的情况下,则应选用过程式编程。如果二者变化程度均衡,则可采用MS骑墙式的方法。笔者这番大胆言论其实并非由理论推导而来,而缘于对当今软件界的实际观察。真正的企业级开发无疑J2EE是主导,这符合第一种情况;而变化迅速的互联网界则以PHP为王,小型桌面系统至今仍以VB、PB、Delphi为佳,这符合第二种情况;而中型系统,.NET发展得最好,这正是第三种情况。
所以我们搞软件的诸位同道,居于不同的阵营中,不免终日比短较长,其实是没有必要的。各种语言都有他的优势与适用范围。做好产品、服务的市场定位与技术定位,扬长避短才是明智之举。

版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     6       7
作者其它文章: 作者全部文章
评论人:Jaln 发表时间: Tue Feb 13 15:50:15 CST 2007
同意~
评论人:xyz20003 发表时间: Tue Feb 13 17:46:36 CST 2007
mvc实际上完全破坏了对象设计。
评论人:轩朗=maninred 发表时间: Wed Feb 14 16:14:51 CST 2007
对于你说的“OOP其实是便于扩展而不适于修改”,不是很同意。

你说的情况是你的设计无法封装好变化吧。OOP遵循的开闭原则要求,需要修改时,应该添加新代码,而不是修改老代码。如果一个系统的设计能较好的遵循OO的话,绝对不会说一修改就要修改很多地方,因为OO的设计会把各个子系统之间,设计和实现之间的耦合性降到最低。
评论人:Jegg 发表时间: Tue Feb 27 10:54:12 CST 2007
说的有一定的道理
评论人:javamonkey 发表时间: Wed Feb 28 02:21:12 CST 2007
>>mvc实际上完全破坏了对象设计

why?
评论人:xyz20003 发表时间: Fri Mar 02 09:52:46 CST 2007
mvn仅仅是分层,各层之间传递的to,po仅仅是携带数据的结构体,不包含对本身数据应有的操作。谈不上oo
评论人:mithrilon 发表时间: Fri May 25 12:54:47 CST 2007
如果作者是这种想法,那么只能说明作者根本没有理解和用好OOP。OOP的好处不仅仅是便于扩展,它同样会给代码修改和维护带来极大的便利。虽然可能对小型项目,用OPP更方便快捷,比如你用C写一个计算两个数字和的小程序要明显比用Java这样的OOP语言方便,但对于大型项目来说,优秀的OOP工程设计,管理,开发,重构等等方面都要优秀很多。也许用OO会多许多看起来似乎无用的代码,但这些工作如果做得好的话,会给项目带来极大的好处。如果有谁不造成的话,可以去看看GoF的Design Patterns以及其他一些OO设计方面的书,当然国内编的书除外,翻译的最好也不要看。
评论人:lgx522 发表时间: Mon Aug 27 09:52:22 CST 2007
这是大半年前的体会,当时笔者正处于OOP的进阶阶段。也就是说,一直用OOP,但没有真正领会OOP。

这半年投入了对PHP等函数式编程的实践中,这才真正认识到OOP的好处。函数式编程也可以做到部分封装与重用,但比起OOP,还是困难得多。

最近台阶终于上来了,学会写自己应用中通用的类,学会了扩展已有的Java类库,这才充分体会到OOP对代码质量提高的重大作用。当你真正学会OOP的那天起,才会发觉编程的乐趣无穷。才会发觉通过建构高质量可重用的类库,编程也可以像一棵幼苗长成大树那般轻松、自然、高效。
评论人:per2003 发表时间: Fri Sep 21 17:15:29 CST 2007
不错,好文章,希望继续努力。
评论人:junyangbai 发表时间: Mon Nov 05 16:19:14 CST 2007
支持!!

这个文章共有 10 条评论
主题: 熊猫烧香电脑病毒案告破 抓获8名疑犯 上一篇文章
返回文章列表 返回〔J2EE综合〕
下一篇文章 主题: JavaScript最流行的2种定义类的方式


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号