案例分析:面向对象得失论

缘起

最近一段时间,在博客园关于面向对象的讨论比较热烈,你来我往的,好不热闹。不完全归纳一下,大约有以下几种意见比较受欢迎:

A.        面向对象需要组织、团队支持,需要一种环境;

B.        面向对象比面向过程编程要复杂,需要花很大代价才能掌握;

C.        面向对象不是必须的;

D.        面向对象存在一定的性能损失。

其实每一个意见都有的一定的依据,不过这些依据都是站在自己的背景下才能站得住脚,并不是放之四海而皆准的。

面向对象是一组思维方法、分析方法和编程方法的集合,当然不是最终的结果。前段时间有一个“在项目中摸爬多年”的看似极富经验的博友,曾经对面向对象颇有微词,把项目失败中的种种罪过归咎于对面向对象的追求。当然,面向对象并不是医治百病的良药,不当的追求会导致难以预料的恶果。面对这样的“风险”,再加上面向对象貌似曲高和寡,难怪大量的技术负责人(当然包括园子里的那些技术负责人)勿宁放弃了。其实放弃也就放弃了,原因也并不一定就在于面向对象本身,不必在这种背景下对面向对象产生诸多抱怨。

案例

前段时间某个项目中有这样一个需求:将某些Word文档生生导入到系统的数据库中。这个需要是合理的,该文档是流程中的一个重要附件。重复录入不仅意味着用户需要多输入一遍,而且还增加了录入错误的风险。所以,我很乐意支持这个需求,它将让我们的系统增加一份稳定性和正确性。

其中有一个文档是这样的:

 

我估计很多人会选择放弃,因为他们选择结构化分析方法,很难入手。我设计这个框架用了一天,实现用了一天,测试并重构它用了两天,其中有一个夜班加到半夜四点。最后做总测试的时候居然一次成功,连我都没有想到。

看看我的思路,也许你可以从中找到在业务越来越复杂的今天,让你无法摆脱面向对象思维的众多支撑点。

A.        由于需要对Word文档事先做一个描述,所以,通过一个XML来定义文档格式是必不可少的(XML真是奇妙,让你轻松地发明一种自己的“语言”可以描述你任何想描述的东西)

B.        XML文档读出到系统中成为一个你事先设计好的对象模型,用这个模型可以对每一个Word文档实例进行检验并读出其中的敏感内容。

C.        找一个性能良好的读出器,把Word文档的内容变成另一个体系的对象模型。

D.        把以上两个文档对象模型一一匹配,并由其中的某些特殊的元素完成数据读出,且放置到事先设计好的指定地方。

单独完成ABC都是容易的,完成这每个部分并确认其完全可靠以后,再完成D其实只需要很少的代码了。

XML文档设计了以下元素节点:

<types>:这是一组简单类型的定义,在一个<type>中包含多个<property>节点。<property>节点则说明其类型和意义,类型可以是string/int/float/datetime/bool这五种简单类型,也可以是已经定义的<type>,还可以是某个可重复的数组。如果你愿意,可以把整个文档的数据包含在一个单一的<type>中。

<sources>:这是一组导入源的节点。可以一次导入多个相关的Word文档来完成一次导入活动。在每个<source>元素中通过<features>节点定义一组特征。特征包括:<paragraph>是段落;<table>是表格。在段落和表格中再包含子元素。最末级的叶元素是<checkbox><key>等节点。

<arguments>:这是一组必须传入的参数,这些参数的类型必须是<types>中定义的某种类型。

<extractions>:这是需要萃取敏感内容的节点。这个节点定义一组有上下级关系的<extraction>元素,将<features>中的末级元素与<type>中的<property>连接到一起。

实现读出DOM非常简单,但校验它们稍麻烦一些。几乎每一个文档节点都需要为之设计一个对象,并确保每个对象之间的完整派生关系。

读出Word文档之前,我定义了Word的文档对象模型。并分清哪些元素是用来校验文档的、哪些元素是需要从中读出内容的。每个文档都包括在一个单一的对象中。读出Word文档,需要定义一个接口,以保证可以选择多种文档读入方式。

public interface IFacility
{
         DocEntry ReadDoc(System.IO.Stream source);
}


实现这个接口,我选择采用Syncfusion组件。其中的Syncfusion.DocIO.ReaderWriter非常高效,读出的结果也非常方便整理。实现这个方法我仅用了72行代码。

最后实现的Importer对象,只有一个构造器和两个方法需要暴露:

public class Importer
{
       
// 用XML定义文档创建导入器
        public Importer(Stream config)
       
{
           …
        }


       
// 一次性加载所有的导入源
        public CheckResult LoadDocuments(params Stream[] sources)
       
{
            …
        }


       
// 一次性将结果导入到指定的结构中
        public CheckResult Import(params object[] targets)
       
{
            …
        }

}


当然,实现这个类要麻烦一些,但最麻烦的应该还是定义和实现那些对象模型元素类型,一共有两个文档对象模型需要实现,这些对象间具有某种对应关系,并且同一个对象模型间的元素间的关系也非常微妙。无论如何,这些对象都只是解决单纯的问题,所以还是很容易的。有兴趣可以下载该项目的全部源码。[声明:syncfusion并非开源产品,提供其中的某些目标文件只是为了让测试代码可以跑起来,不要用于任何商业用途,否则后果自负。]

结论

回到头先的问题。在我实践中,我不认为面向对象有什么神秘,也不认为在项目实践中必须采用面向对象。面向对象方法是众多的开发方法中的一种,与其他方法相比,没什么特别了不起的、不可替代的地方,并且对于不同的人结果可能完全不同。不过,我真正从面向对象获得的好处是能够迅速从一堆可选的方法中选择一种有效的、擅长的方法来解决,并且兼顾到将来的扩展。例如在我的这个案例中,文档表格中的行数和列数都是固定的,如果将来需要支持行数列数不固定的情况,只需要扩展一下即可,不必推翻重来。

从结构化编程到面向对象编程,了解OO的一些特性和原则,然后再了解设计模式,到最后发现OO的一些缺陷,你会寻求通过AOP思维或者结构化思维来进行补充。这个漫长的过程中你一定会经历两次飞跃。有人归纳为第一次飞跃是“看山不是山,看水不是水”,第二次飞跃是“看山还是山,看水还是水”,我觉得有一定道理。了解如何抽象、如何多态、如何协作,属于术,此为学也;了解如何用OO去思考,去设计,此为道也。为学日益,为道日损,所以真正掌握OO是要放弃一些固有的、不全面甚至不正确的观点的,这才是OO真正的难点。

以下是我的几点总结:

结构化思维是面向对象思维的基础。幻想中的一步登入OO的天空并无可能。面向对象的很多原则与结构化思维并无矛盾。真正对OO从理论到实践都透彻的人并不一定排斥结构化思维。

不要比较面向对象与结构化思维的得失。谈到得失就必须有一杆秤。可惜这个世界上没有这样一杆公平的秤。每个人的经历不同、背景不同、思维方式不同,评估的结果就千差万别。其实没有对错,只有针对每个具体人的有效和无效。前面所述,通过面向对象可以将一个复杂问题迅速简化,当我遇到问题时候,我的方法通常是三步走:第一步解决最小的简单模型;第二步解决复合的常规模型;第三步解决扩展的推广模型。这样的确可能比结构化编程费一些事情,但基于我的智力,没有办法一次解决,所以我这样选择是基于我个人的情况。

不要讨论面向对象的性能损失。比方说,很多人都认为基于托管代码的系统比基于原生代码的系统慢,但据ACM(美国计算机协会)1999年的调查报告,采用Java或者C/C++编写的系统,性能差异很小,而不同程序员间的差异却高达30倍!既然如此,为什么不把更多精力花费在代码间,而是讨论面向对象会给系统带来多大的性能损失呢?

不要讨论什么充血模型或者贫血模型。解决问题才是最高目标,何必在乎形式呢?既然连结构化思维都可以接受,为什么要排斥所谓的贫血模型呢?(实话说我个人非常排斥老马的某些观点,为什么要把一个灵活开放的东西搞得那么死板教条呢?)譬如,面向对象有一个原则是尽量采用chatty接口,创建许多简单方法。而在分布式编程中这个原则就成了灾难(你不得不多次连接调用),所以分布式编程的原则是尽量采用chunky接口,把方法留给本地,这是典型的结构化思维。所以原则并不是一成不变的。

不要把责任推给你的上司、团队或者组织。不论你是一般程序员,还是团队负责人,每个人都是团队的重要成员,每个人都会对你正参与开发的系统、对团队产生同样的影响。如果你一直希望改变你目前的方式,那就需要产生额外的效果,令你的上司和团队成员支持你。如果他们不支持你,不是因为他本身的素质,而是因为你没有让他看到效果。除了你自己是可以控制的,团队中的任何人你都只能影响,而不能控制。要改变他们,不是靠说教,而是靠实实在在的绩效。检讨一下你自己,是不是自己在某一方面做得不够好?或者根本你的出发点或者目标就值得怀疑?我相信很多人在对项目质量的考评中,进度会放在比质量更优先的位置。事实上进度与质量并不矛盾。如果组织更注重进度指标或者甚至根本不注重质量指标,你可以在不影响进度的前提下,提升质量指标,一定会获得组织的肯定。然后你就会慢慢发现,其实进度和质量可以相互促进而不是相互冲突。

posted on 2007-11-04 16:22 双鱼座 阅读(6796) 评论(32)  编辑 收藏 网摘

评论

#1楼 2007-11-04 17:11 deerchao      

了解如何抽象、如何多态、如何协作,属于术,此为学也;了解如何用OO去思考,去设计,此为道也。为学日益,为道日损.
-------------
怪不得那么热烈,你来我往,好不热闹, 原来还是没损到家.
但是却没人能验证有没人能损到家,因为损到家的人无为了,羽化成仙了,"有大美而不言了".
  回复  引用  查看    

#2楼 2007-11-04 17:12 Nathan2008      

什么是充血,贫血?
  回复  引用  查看    

#3楼 2007-11-04 17:39 Klesh Wong      

@Nathan2008
纯粹作为数据载体的实体模型为贫血模型,充血就不好说了,根据老马的提法,他是认为实体应该带有业务逻辑,这个他称之为Rich Domain Object,充血模型照理说应该是指这个Rich Domain Object吧.
  回复  引用  查看    

#4楼 2007-11-04 17:56 金色海洋(jyk)      

你用到了XML的看懂了。   回复  引用  查看    

#5楼 2007-11-04 18:20 蛙蛙池塘      

先去吃饭,回来再看双鱼叔叔的帖子   回复  引用  查看    

#6楼 2007-11-04 18:52 蛙蛙池塘      

回来了,双鱼说的不错,举的这个例子也很好,有时候遇到问题的时候就去靠经验去想解决方案,根本没在意这个解决方案是面向过程还是面向对象的还是面向服务还是面向方面的,最终解决了就好了。   回复  引用  查看    

#7楼 2007-11-04 19:06 蛙蛙池塘      

双鱼,我下载了源码,单元测试过不去呀,报下面的错误,我已经把测试文档的路径改了呀
测试方法 Zxh.Cpb.ImportsTest.DocReaderTest.TestEnumerateDocElement 引发异常: System.Runtime.InteropServices.ExternalException: Cannot open storage. File Name is: H:\study\down\Zxh.Cpb.Imports\Zxh.Cpb.ImportsTest\广东省建设项目环境保护审批登记表.doc。
还有如下
测试方法 Zxh.Cpb.ImportsTest.DocReaderTest.TestWordDocReader 引发异常: System.IO.IOException: 文件“H:\study\down\Zxh.Cpb.Imports\Zxh.Cpb.ImportsTest\广东省建设项目环境保护审批登记表.doc”正由另一进程使用,因此该进程无法访问该文件。。
  回复  引用  查看    

#8楼 2007-11-04 23:10 怪怪      

LZ这个例子我觉得是正确应用OO的经典例子.., 顺理成章, 很流畅.

"所以真正掌握OO是要放弃一些固有的、不全面甚至不正确的观点的,这才是OO真正的难点".

这个从某一角度看没错, 另一角度看, 一些观点正不正确, 不是那么好衡量的. 你说罪不在OO, 这个我觉得确实没法评判, 但是OO确实也不咋地, 人掌握不了, 你说不能怪OO, 我觉得恰恰相反, 不能怪人. 东西是帮助人的, 眼镜不清楚你可以说眼镜质量不好, OO掌握困难, 却是人水平不足, 这个有点说不过去.

比如你能掌握, 那是你在OO的道路上走得比较远了; 但不能单方面的想, 既然我能掌握为什么他们掌握不了? 我觉得OO作为一个方法论产品, 确实质量比较糙, 只是由于其它方法论质量也都差不多, 所以暂时显不出OO差劲来. 更好的方法论产品没被生产出来, 我们这些使用者, 就只能灵活应变了.
  回复  引用  查看    

#9楼[楼主] 2007-11-05 08:26 双鱼座      

@deerchao
@怪怪
一家之言而已,欢迎批评指正。
@蛙蛙池塘
感谢你的关注。非常抱歉你说的问题,回办公室立即查对。
  回复  引用  查看    

#10楼 2007-11-05 08:56 henry      

好久没看老兄发文:)
看这文章受益了,我一直也在想OO真的是不是这么神秘?
不过自己还是一直坚信只要代码简洁就应该足够了(其实我们应该花更多的时间问一下自己完成功能的代码真的是够简洁的吗?).
  回复  引用  查看    

#11楼 2007-11-05 09:41 阿多斯      

还是相当同意博主的观点。
我的一个前部门经理就一直说,我一直主张,设计要面向对象,但开发一定要面向过程。
另外,“第一步解决最小的简单模型;第二步解决复合的常规模型;第三步解决扩展的推广模型”,也是和我相同的思维。当然主要原因是咱没法一下子直接、正面地搞定复杂问题。
  回复  引用  查看    

#12楼[楼主] 2007-11-05 10:07 双鱼座      

@蛙蛙池塘
已修改,的确是路径有问题。我估计你修改的绝对路径可能不对,现在我采用相当路径了。
@henry
哈哈,一直瞎忙。
@阿多斯
谢谢关注。
  回复  引用  查看    

#13楼 2007-11-05 10:48 啊东      

mark一下,好久没看到双鱼兄的文章了.   回复  引用  查看    

#14楼 2007-11-05 12:21 蛙蛙池塘      

@双鱼座
谢谢双鱼,我再下载看看,对了,你那里有emit的入门帖子吗?给推荐一下.
  回复  引用  查看    

#15楼 2007-11-05 12:25 蛙蛙池塘      

测试已通过   回复  引用  查看    

#16楼 2007-11-05 12:37       

不是什么时候都面向对象。

也不是什么时候都要ORM。

我觉得一些明显是表单操作就对象关系。
  回复  引用  查看    

#17楼 2007-11-05 13:33 小宇哥哥      



经历了很多公司,都是这样,以至于让我思考:

小项目用面向对象是不是累赘;

面向对象是不是带来的成本与日后的维护性相比不够;
  回复  引用  查看    

#18楼 2007-11-05 13:52 大傻      

看了文章,觉的不错,在不同环境下,oo和过程并没有冲突的地方,适合的地方就用,不适合的地方就不用.看楼主的例子,我觉得并不是一个值得推崇的例子,因为你的程序只是一个大程序的部分.你的大程序用了oo,所以这部分也用了,要是纯粹为了导数据,按照楼主这个word我用过程的化,一天的时间足够了.因为我以前做过类似的导入,比楼主的还复杂,因为那些是工厂以前没有数据库,都用word和excel来纪录所有的数据.但是就是没有楼主代码的通用性.呵呵   回复  引用  查看    

#19楼 2007-11-05 13:58 东风31      

OO真的这么神秘吗?曾经以为OO其实不复杂,现在看了讨论文章,越看越迷糊!   回复  引用  查看    

#20楼[楼主] 2007-11-05 15:01 双鱼座      

@蛙蛙池塘
没有,其实MSDN就不错。
@辰
@小宇哥哥
很难苟同。个人觉得没有面向过程就面向对象或者面向对象就面向过程的说法。只有没有吃透面向对象的说法。面向对象不需要额外的成本。当然,学习的成本不能算。
@大傻
可能不是你想象的这样。“大程序”采用什么架构与“小程序”采用什么架构没有必须联系。如果你看了代码你可能会抱怨,为什么要引入那个名叫Global的贫血对象。其实这个对象仅仅只是一个参数传递器而已,用来适配不知道什么架构的“大程序”。
对于你来说一个Word文件也许一天时间足够,但对于我肯定不够(看出来了我要比你笨),即便是完成了我也不能保证代码质量。我文章里讲了,我的方案的确可能比你花时间,但是我能保证代码质量,并且可以重用和扩展。这还不够本么?
@东风31
心急吃不得热豆腐,耐住性子比OO本身更重要。据我所知,抱怨OO的人绝大部分都有点心浮气燥。“抱怨”就是他们最典型的特征,所以别被他们的抱怨所影响。相信很快有一天你终会水到渠成、瓜熟蒂落,然后你再来评判我今天的结论,相信你会同意我。
  回复  引用  查看    

#21楼 2007-11-05 20:02 蛙蛙池塘      

@双鱼座
双鱼,你的kanas.net有.net 2.0版本吗?能否学习一下。
  回复  引用  查看    

#22楼 2007-11-05 20:20 蛙蛙池塘      

看到你另一个帖子的回复了,谢谢   回复  引用  查看    

#23楼 2007-11-05 21:29 怪怪      

@双鱼座
"心急吃不得热豆腐,耐住性子比OO本身更重要。据我所知,抱怨OO的人绝大部分都有点心浮气燥。“抱怨”就是他们最典型的特征,所以别被他们的抱怨所影响。相信很快有一天你终会水到渠成、瓜熟蒂落,然后你再来评判我今天的结论,相信你会同意我。"

你这段话可有点太随意了..., 你看看园子里多少人搞不清楚MVP是什么MVC是什么, 设计模式怎么用的恰到好处; 多少人较真于贫血充血, 这个够不够OO那个够不够OO; 怎么样建模才合理也是吵来吵去. 这些不是抱怨, 不是心浮气躁, 恰恰是耐着性子去钻研后, 有了想法才出来讨论. 大家都说OO是前期投入大, 后期回报高, 无论是对项目还是对个人水平. 对项目, 如果已经有一批比较稳定不容易流动, 且水平不错的程序员, 我觉得这个说法有道理; 对于学习, 我觉很多人忽略了两个问题:

1. 自己或者某人适不适合当程序员. 很多人当程序员只是当一阵子, 未来无论是提升还是换行, 都不会一直做下去, 而自己未来如何, 他们自己都不知道; 而有些人呢, 毕竟二三十了, 思维方式已经固定了, 也不具备很好的消化知识的习惯和能力. 当个普通的Coder, 甚至未来升级成为某类项目的高级管理, 都很正常, 但是学习OO之类, 除了反而迷糊起来, 降低生产效率, 影响自己的职业发展, 没有任何好处.

2. 自己或某人当前水平下是不适合学习OO. OO的各种理论在一些人眼里归根结底就是那么几行话, 但对很多人来说是一个迷阵. 过早学习OO, 对这样的人来说不但不合理, 反而会因为错误的理解, 未来承担更大的代价.其实不光OO, 关于命令式编程中通过赋值保持状态, 这种看似最简单最基础的知识, 在谭浩强C这种书里可以说作为学习其它很多知识的前提条件的常识, 在国外计算机教学中, 是先学习还是后学习, 都有争论(见SICP).

你这种说法里面包括一个假设, 即学习OO一定是有益的, 然后自然而然得出结论, 如循序渐进将来一定能得到好结果. 教育和学习, 包括计算机教育和学习, 本身就是一门学问, 所以我觉得对于咱们这种不是搞计算机教育的, 回答新手问题的时候, 还是谨慎点好, 毕竟对可能造成影响的行为, 比如鼓励学习XX, 还是得有个责任感. 即使咱们是过来人, 毕竟具有一定水平不代表就一定能指导别人的学习路径.

其它的好坏不敢说, OO学习对人的已有基础要求比较高, 这就是它最失败的地方.
  回复  引用  查看    

#24楼 2007-11-05 23:21 彭成刚      


就项目的开发来说分两种,一种是用对象,对象做好了已经,调用一下,或配置一下。。ok。。

还有就是开发这些对象。。

前者是不需要什么技术而言,只要有对象的配置文件说明就可以使用了。。
而后者需要大量的程序经验,并且不参加项目开发。

前者的效率快,速度快。。可以说是操作工。。
而后者是开发团队,速度慢,但是延展好。。

可是我们国内还是属于前者。。
你说你一个操作工想去学什么面向对象,可是看看你的工作是什么。。是操作工好不好。。
可是我们国内有开发团队的公司实在是太少了。。

就我个人想,就是一个很就经验的开发队员,如果每天都在2天一个项目的公司里呆着。估计也做不出什么好的“对象”吧。。

不知大家对我的意见有什么看法。。在下只是说出了自己的看法。。
用对象的人,只是去用而已,是不用去学的。。就像是你用windows,你会开发windows吗?我想你不会吧。
  回复  引用  查看    

#25楼 2007-11-06 09:01 1-2-3      

非常有启发。
有效的设计是通过恰当的抽象提高内聚度,以及达到松耦合。OO只是达成这一设计目标的一个有效的武器而已,所以更重要的是进行设计的人的水平。像楼主这样把对word文件中的敏感数据位置的描述抽取出来放进一个XML文件中的作法就是具有良好编程思想的体现。相信楼主即使使用不支持OO的语言(例如C语言)也一样可以编写出高内聚度的程序。那么反过来我不禁要问,那些抵制OO的人,是否一直在追求使用面向过程的方法提高内聚度呢?我不否认有这样的人存在(他们应该是在信仰着什么),但我相信更多的人认为只要程序能跑起来就行了,只要这样就好了,反正不管用什么方法不都是每天工作8小时,而且1年后自己是不是还在这家公司还维不维护这个程序都说不定的。
  回复  引用  查看    

#26楼[楼主] 2007-11-06 09:55 双鱼座      

@怪怪
可能是我的表达不够准确。不过你所谓的“耐着性子钻研”是有歧义的,有一种“耐着性子钻研”其实只是表面上的,实质是动机不纯、出发点不对。OO与否并不是教条,但一定会经历一些教条的过程,然后才能抛开教条。所以,我极其赞赏你提出的两个问题,很多人都在自己不恰当的程序下参与一些不恰当的讨论。这只是我说的“浮燥”的表征之一。
我想提醒大家的是:够不够OO,用了什么设计模式并不重要。OO说到底仅仅只是一种境界,靠悟而不是靠钻研。既然是靠悟,偶尔有几个一辈子未能得悟也是正常啊。我MSN上的签名是“恰恰用心时,恰恰无心用,无心恰恰用,常用恰恰无”(引自唐代一位禅师的偈语)。其实那些一辈子潜心于修禅之人,目标决不是为了悟,悟只是副产品而已。为悟而悟,终无所悟。此为真耐心也。
OO的精髓是一种思想,然后在此基础上一代代大师在挖掘、传播的过程中建立了一套理论,一套原则。要驭之,必先知之,后悟之。任何原则必须先掌握,认同,然后才有可能发现这些原则的局限。但是很多人却不是这样。一种情况是有人总是在掌握这些理论之前就被这些理论所困住,以教条来约束自己,引导大众。另一种情况是有人总是高估自己对这些理论掌握的程度,摇摇晃晃,成效不彰,只能无端生出些许抱怨来。
其实什么人什么时候适合尝试OO并没有一个统一的标准。我是5岁学会游泳,14岁才学会骑单车,至今还不会驾车。OO和游泳、骑单车、驾车一样,其研修的过程并没有统一的准则。所不同的是:如果有一点传播作为基础,悟的过程会快许多;而游泳、骑单车和驾车则纯粹靠悟。
以上浅见,与君共讨。
  回复  引用  查看    

#27楼[楼主] 2007-11-06 10:02 双鱼座      

@彭成刚
或许你又把OO赶到了“适用场景”的死胡同?
@双鱼座
多谢谬赞!
  回复  引用  查看    

#28楼 2007-11-06 11:10 henry      

现在很多人似乎对模式的理解得错误了,模式只是一种做事的方法,而并不是评价做好一件事情的标准。我们做事情很多时候只是相似而不是对等,所以模式也必须根据当前情况进行调整和选用。同理OO是好但其本身只是一个指导思想,但对于其使用方式来源于自己的不断实践和积累而不是单一的理论指导。开发人员更注重的是代码重构而不只是关注模式的应用。   回复  引用  查看    

#29楼 2007-11-06 12:56 Ftuo      

我看这篇文章有些深奥。正好是个学习机会。
你的源码,没有看到共享的地方,能否给我发一份,研究一下。
谢谢。
  回复  引用  查看    

#30楼 2007-11-06 23:00 Reeezak      

终于又看到双鱼大哥的文章了,哈哈

----------------感慨完毕,发表意见-------------------
OO是什么?我不敢说我就什么都明白了,但我敢说这东西绝对不是教条!“要OO,你必须这样这样这样”,实际上自己就错了;为什么不说,“有了OO,你可以这样这样这样”,“要做到OO,你可以这样这样这样”?

我一直认为OO不是技术,而是一种方法论;它是一种“可以”帮助你更有效率的工作的方法,而不是工作制度……

就像很多人BS数据库,我听过这样一句话“哎哟~~你们还在写SQL啊,我们早不用了”,我彻底无语,这好比“哎哟,你们还在说中国话啊,我们早不说了”一样的无聊……为了完成工作,我们有很多方法,不是只有一种,究竟选那种是需要具体问题具体分析的,“某中方法就是比其他的好”这样的观点是站不住脚的
  回复  引用  查看    

#31楼 2007-11-13 22:52 怪怪      

@双鱼座
心里想看看你的看法, 结果碰见点事, 一直没上网, 今天才看见. 其实就是你要说的这些 :). 另外我觉得敢想也很重要, 因为每个人达到同一境界的修炼道路往往是不同的, 而我们参看的大师的经验往往是有其具体的成长环境, 他们是对的, 但是我们就是悟不了. 相反, 一些看似和大师的"教条"不同的道路, 也许反而在精髓上更接近正确的原则.

不过学习这个事, 真的是很难, 不是一句两句能说清的. 但是也很简单, 就象你说, 耐得住性子, 能够坚持下去, 找到自己的路, 一下子就快很多了. 这样, 借鉴别人经验时也需有一个比较, 他的路和我的路是否一样, 如果不一样, 路变了, 具体的方法应该如何调整, 才能更接近真意, 这都是需要考虑的.

说实话, 做实事也好, 做学问也好, 我真正感觉迷茫的, 还是那些最没有意义的问题: 我到底是干嘛地的? 想明白这个问题, 聪慧点也好, 像我一样愚鲁点也好, 困难与否, 或者在具体问题上比如OO到底是不是一个提高生产力的有效方法, 其实都是无所谓的事了, 反正都要实践, 反正都要学习, 其它都是旁枝末节了
  回复  引用  查看    

#32楼 2008-02-11 15:24 coderlee      

http://www.cnblogs.com/coderlee/archive/2008/02/11/1066915.html

我写了一篇对多态和范型的感悟 可以来看看。。
  回复  引用  查看    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 948968 OaA/dHfGKj0=



相关文章:

相关链接:

导航

<2007年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

统计

与我联系

搜索

 

常用链接

留言簿

我参与的团队

我的标签

随笔档案

文章分类

相册

芸芸众生

最新评论

阅读排行榜

评论排行榜