您的位置:首页 > 其它

浅谈面向对象与面向过程感受

2011-01-29 21:27 176 查看
这段工作上多和同事讨论面向对象的设计问题,在和同事聊天中第一次切身地、也真正算是认识到了面向对象和面向过程一个非常明显、但是却以前没有深入体会到的区别。
在和同事讨论一个模块设计中,我们首先过了所有需要支持和处理的场景,然后尝试想从这些问题域进行面向对象的建模,但是,这个过程进展的却不是很轻松的,一下子就是很长时间了。在讨论间歇,同事就感叹说“如果用面向过程去实现的话,我的模块早就编写完了”。初我还对这个话不以为然,后来觉得体会越来越深,是啊,确实如此!在问题域明确的情况下,用面向过程的实现方式,把这些问题转化为程序是可以很快搞定,但为什么面向对象的过程就充满了艰辛呢?
在这次的体会中,首先,面向过程是直观的。面向过程直接贴近于计算机CPU的工作模式,甚至是人类大脑最初能否反映出来的解决问题方法。解决方法是比较容易理解和掌握的,但是,不一定易于维护,特别是程序发展到极为复杂的情况向。而面向对象呢?这个面向对象化的过程至少会将过程式的东西,分解为不同的对象进行写作和交互去完成,强制性地进行对象级别的模块化,需要一丁点的抽象,确实就不是很容易的了。
我觉得面向过程初看起来不需要设计,只需要按照直观的反应进行编码,而面向对象确实从起步开始,就要求了最初等的设计,将代码至少模块入对象的级别,包含了比直观更高的一点抽象,所以,面向对象就难多了。如果在这个过程中再加上可扩展性、易维护性、高效等目标,那就更难上加难了。
直观的东西有时很深刻,例如几何公理中两点确定一直线。深刻到要说清为什么如此,真的不是件很容易的事情,呵呵,因为其来源于直观,不证自明。但,往往很多时候,来源于直观的东西缺乏深刻性。在近期阅读集异壁这本奇书中,我们会发现绘画、音乐、数学、计算机等几个不相关的事物,在一定的抽象级别竟然拥有共同的结构;而也就是以这样的抽象东西是可以在一定层次概念上代表这些东西的。在我们计算机世界中,在图灵机的概念下,所有的二进制程序都可以执行,而不管你是操作系统程序、还是数据库程序,抑或是网络程序或脚本程序;在图灵机的概念下所有的程序具有共同的特质。我们可以发现抽象到一定层次的特质,也就出现了图灵机上所有的程序都可以运行,所有程序都拥有图灵机类型的抽象,这两个双手互搏是相辅相成的。
一个东西缺乏设计、缺乏抽象、缺乏模型化就少了深刻,而肤浅的东西往往是易变的。在非常讲究积极拥抱变化的软件世界中,抽象是必要的,经过抽象后的东西往往拥有一个稳定的“心”或引擎engine。

面向过程虽然初看起来不讲究设计,体现了大脑的直观反映,但是想建构一个好的面向过程程序,我觉得是一样要包括非常好的设计和抽象,只不过抽象的方式不是对象,而是面向过程中的基本技术。整体下来,初涉面向过程容易,初涉面向对象难,而最难的后面依然会回到面向过程。因为,面向对象提供了一种抽象问题域的一种思考方式和代码组织方式而已,底层东西还是面向过程的,最开始的C++编译器产生的中间代码就是C,然后再利用C的编译器再生成可执行程序。。。。,我们站在了巨人的肩膀上!欢迎抽象!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: