看过该文大家的回复,感觉这里的讨论的气氛不错,彼此宽容,相互探讨才可以有进步。
发表一下自己的看法:
1、oo必然有其价值:要理解这个价值我个人认为(请各位tx指正),要从oo的来源理解。

一、oo从何而来一?
oo就是为了解决过程开发方法带来的软件危机。
因为既然程序是为了解决实际问题在计算机通过建立数学模型来解决实际问题,那么当人类使用计算机思考方式(例如:过程化方式)这种不是人类自然思考方式进行求解的时候自然会遇到一些问题。尤其是比较复杂的事物。那么此时大牛们会怎样去解决这个问题?换作是各位如何去解决这个问题?
自然而然的大家会想到这样一个道理:既然是建模解决问题为什么不建立一人类能够理解的更接近现实的模型?而面向对象这个概念提出的模型恰恰比较接近现实世界能够适应人类的思考方式。这样我们只需要将建立好的对象模型转换为代码就好了。于是大牛们提出了oo的概念,于是社会各界人士风涌而上,oo火了。
上边就是我认为oo引入的原因,请各位tx指正探讨。
2、oo的优势?
要想理解oo的优势我觉得因该这样去做。
首先从具体的数据模型跳出来,站在比较高的系统架构的层次看。在具体的模型中oo实现体现了建模方面的优势,让我们能够使用人类习惯的思维方式去将问题架构搞清。比如说得到通过user case得到类图。
然后再深入到一个具体的模型,比如说“亚历山大同志”举出的具体的聊天室的例子。给出从分析-〉建模-〉实现-〉复用的例子来,包括代码的具体实现。我敢说大部分oldtx(包括我)对于对象的代码实现并不是很清楚,我们更喜欢用代码来说话。所以方便的话,请亚历山大给出代码,架构部分就行。
 
二、oo从何而来二?
解决软件危机的另一个思路:软件开发维护的另一个问题在于大家都在闭门造车(码代码),从而造成大量的浪费和维护的困难。那么软件复用的思想就提了出来。
请问软件复用的关键在于那里?
一个制作好的软件(模块,函数怎么叫都可以。)能不能复用关键点在那?我认为关键在于能否应付变化。即所谓的拥抱变化。
而应付变化使用过程化的方法是?低耦合,通过建立比较规范简单的调用接口来提高复用性。
使用oo呢?从概念上讲oo由于提出了继承、重载、封装等概念在复用上确实有过程化方法的难以企及的优势。
我正在埋头苦学,要是有人能够补充出简单适用的代码实例就好了。

那么由oo由来可以看出确实是高于过程的新一代开发方法?分析建模工具?那么:

三、oo是过程的替代吗?
我觉得oo是一种高层次的分析方法和生成工具(oo的对象自动生成程序框架真是太方便了),并且由于引入的oo的概念编写测试用例也变得自然了许多。总之oo带来的新东西和好处真是太多了。
那么是不是面向过程的方式就落后了?就该被淘汰了?掌握和使用面向过程的oldtx就该被淘汰被看不起了?
也不尽然:在简单的领域,面向过程有其独到的精炼和魅力,而且我认为具体oo建模了之后具体的代码实现还是要去码代码的。
最关键的在与:什么是伟大的软件?评价一个软件好不好的最重要的唯一标准在于:是否让客户户满意!!!
然后是否维护方便。,最后才是架构是否高级是否易于复用等问题。
所以oo是客户、架构师、程序员交流建模的工具而已,建议大家掌握尤其是初学者。老手也应该抽出时间去看看.不是带着眼镜去看问题,而是思考oo的由来,优点和如何利用。这一点“金色海洋”就是一个好的例子,迷茫但不彷徨,我相信这样的tx在探索的过程中成长,最终一定会有大成。
而那些oo的拥护者也不必不oo就是发现了什么大逆不道一样,谁有谁的世界。你真愿意推广oo,大可以象“亚历山大同志”那样以理服人,大可不必动辄提出“如果你只是做做网站,如果你基本是一个人搞定一个网站,如果你没有试过多人团队开发的大型项目,那你就朝着你坚信的道路坚定的走下去吧。” 这样的话真是很伤人也没有什么营养.

其实:搞it的碰到不懂的人真的是很好的机会,你要教懂他(她)才能显示你的水平,更重要是人品。

补充:
1、过程化思考方式个人认为有其独到之处,甚至学习和掌握也不是一朝一夕的事情,所以一旦掌握以后在开发的过程中会由于人类自动化的原理,自然而然的去使用他。这也不是什么丢人的事.但是掌握oo的概念并且能够去应用是一个很好也很必要的技能,各位tx努力吧。
2、关于oo入门的推荐.最近看一本书:前一阵有个tx写博克翻译了2章,可能是因为比较忙没了下文。叫做“Head First OOAD.pdf”网上有电子版,我打出来一边看一边标记,看了2章了感觉还不错,推荐给各位想了解oo的tx看看,还可以顺便复习英语。
李建忠老师有一套讲设计模式的webcast,在讲述的过程中着重介绍了设计模式与oo一些关系其中在oo的概念和起源以及应用上下了功夫,我看了5讲了,感觉也不错,推荐给大家.(看webcast比较费时间,一讲大约一个半小时,一共好像是24讲)
目前网上我还没有发现谁的博克有很好的oo入门教程,有的话,推荐给我们学习。
没有的话,我建议就看我推荐的,要不就去msdn比起在网上瞎翻一气浪费时间强,多做少说因该是优点吧?
祝各位tx进步!


 

posted on 2007-09-20 10:14 黄金年代 阅读(2502) 评论(13)  编辑 收藏 网摘
评论
  • JerryChou      
    Posted @ 2007-09-20 10:21
    1.逻辑混乱
    2.引用:"其实:搞it的碰到不懂的人真的是很好的机会,你要教懂他(她)才能显示你的水平,更重要是人品." 唉……。这篇文章显示出您的水平来了。   回复  引用  查看    
  • #2楼 
    xiao_p      
    Posted @ 2007-09-20 10:31
    博克
    >>博客

    这样的笔误最好少点,而且这样上纲上线的文章实在没啥意思,理念到处都是,关键要看怎么应用。。。   回复  引用  查看    
  • #3楼 
    xiao_p      
    Posted @ 2007-09-20 10:51
    小陆的那几篇文章你可以看看 关于oo入门的,个人感觉非常的经典!
    http://www.cnblogs.com/lane_cn/archive/2007/01/10/617099.html   回复  引用  查看    
  • #4楼 
    aspnetx      
    Posted @ 2007-09-20 11:09
    个人觉得软件危机刺激了更合理的设计方法的诞生,所以才有了OO.
    对比下生物的进化和变异,只有有利的变异和进化才能使生物体能继续生存和繁衍下去,一成不变的或者是非有利的进化和变异,只能导致一个物种的灭绝.
    软件行业亦是如此,OO不知是否可以理解成为一种有利的进化或者是变异.   回复  引用  查看    
  • #5楼 
    金色海洋(jyk)      
    Posted @ 2007-09-20 12:10
    说得挺好的呀。
    我以前是做网站的,一个人搞定一个网站。
    现在开始做办公系统,要的是成功率。毕竟是带着几个人在做几个项目,不能有失误的地方,OO不熟,我不想冒风险。
    所以我采用了我熟悉的面向过程的方式。

    几个人共同开发一个项目和一个人独立完成还是有很大的差异的。
    我现在正在想更好的解决方案。   回复  引用  查看    
  • #6楼 
    怪怪      
    Posted @ 2007-09-20 12:33
    @aspnetx
    “对比下生物的进化和变异,只有有利的变异和进化才能使生物体能继续生存和繁衍下去,一成不变的或者是非有利的进化和变异,只能导致一个物种的灭绝.”

    其实不是的,有利和非有利的变异都发生了,但是非有利的变化被淘汰了,剩下来的是有利的,叫做进化。

    对于咱们现在看待软件科学,实际上往往只有过去十几年的经验作为样本,所以很难推断某种方法是进化还是非进化的一个分支,或者进化的一个中间过程,但是从这十几年来看,比如OO有很多优点是肯定的; 但是未来十几年以后再回过头看,也许现在某些一时有优势的方法又看着极其落后了,毕竟既然真正的突破好久没有了,也许反而说它就快要来了...   回复  引用  查看    
  • #7楼 
    aspnetx      
    Posted @ 2007-09-20 13:18
    @怪怪
    哦,是我混淆了变异和进化的差异

    其是,也正所谓进化的过程是漫长的,而对于过去也许只有十几年的参考.但从目前来看,OO应该还算是一个有利的变异的.   回复  引用  查看    
  • #8楼 [楼主]
    黄金年代      
    Posted @ 2007-09-20 13:21
    @xiao_p
    推荐的文章的确不错,可以说正是我需要的深入浅出的例子(很惭愧的说是我能看懂的例子),谢谢了。   回复  引用  查看    
  • #9楼 
    镜涛      
    Posted @ 2007-09-20 13:56
    OO的思想很重要,需要深入的理解。面向过程开发的思想也普遍存在于软件开发的整个过程中,例如代码的底层其实还是在思考怎样实现功能,写出的代码仍然是一个工作的流程或指令序列。   回复  引用  查看    
  • #10楼 
    思粮      
    Posted @ 2007-09-20 14:14
    OO是一种方法论,是一种思想,用它来思考,可以帮助我们对复杂领域理解.OO应该是为了解决问题的复杂性与我们人类的大脑的局限性的矛盾而出现的.OO是对现实世界的一种抽象,OO的思考方式更符合我们的思考习惯.
    如果大家初识计算机时都是学习SmallTalk语言,我相信就不会有这种争论了.   回复  引用  查看    
  • #11楼 
    leon1005      
    Posted @ 2007-09-20 14:22
    不见得是一篇好文章,谈的都是么有意义的东西。   回复  引用  查看    
  • #12楼 
    壁虎      
    Posted @ 2007-09-21 00:13
    -----------------------------
    我决定说的挺好。而且并不空泛,看了这个文章,倒是把我从一堆没有头绪的争论中给拉出来了。
    【oo就是为了解决过程开发方法带来的软件危机。】
    如果没有软件危机就不会出现OO。那现在只要OO能解决你就危机就是好的。而不是说写软件了就是为了OO,为了OO而OO。

    【评价一个软件好不好的最重要的唯一标准在于:是否让客户户满意!!!
    然后是否维护方便。,最后才是架构是否高级是否易于复用等问题。】
    软件开发出来就是用的,的确如此,客户不满意,啥都不要讲了。维护方便,维护指的是能跟上客户需求,而不单单是说改正某个软件中的错误,对于相同的代码于是需要可以复用,调用方便,这样才能更方便的插入新需求,这个地方就是产生OO的地方。架构是否高级,是体现架构师技术含量的地方,对于软件本身恐怕是其次了,如果我即能满足客户当前需求,又能跟上客户脚步,那这个软件本身就算架构不那么高级又有什么关系?
    毕竟软件是用的,而不是放个代码或者架构图做壁纸来看的。

    个人意见。必然有错,请指出。但不喜欢火气大的。如果你实在觉得受不了,那请你关掉网页,看看窗外的天空,把我忘了,再回到电脑前面,往下看。
      回复  引用  查看    
  • #13楼 
    BoyLee      
    Posted @ 2007-09-21 14:11
    @JerryChou
    1.逻辑混乱
    2.引用:"其实:搞it的碰到不懂的人真的是很好的机会,你要教懂他(她)才能显示你的水平,更重要是人品." 唉……。这篇文章显示出您的水平来了
    ++++++++++++
    同意   回复  引用  查看    

统计