您的位置:首页 > 其它

我看面向对象与面向过程

2012-07-30 05:09 141 查看
有人说,没有大型软件项目的经验,就很难理解面向对象。我不知道,但是我认为凡事都有一个过程,这个过程就是悟吧。这这个循序渐进的每一个阶段,对同一事物的理解会不一样。因此,我想记录下自己对于面向对象与面向过程的思考。

对于面向对象与面向过程的基本概念百度百科与维基里的解释无非是这样:面向是一种编程范式啦,将对象作为程序的基本单元,将数据和程序封闭其中,以提高重用性。

面向过程呢,为达到预定的状态而执行指定的步骤。这些解释在我看来,至少说明了一个问题,无论是面向对象还是面向过程,它都是指编程的思想,一种方式,至少是抽象的,跟语言没有太大关系。

有一位大牛说面向对象与面向过程就好比盖饭(大家应该都吃过吧)与蛋炒饭的关系,一个呢,菜与饭是分开的的,如果不喜欢菜或饭的话,可以很方便地更换,一个呢,蛋与饭是混一块儿的,不喜欢吃蛋或是蛋疼的人,可能会把蛋一点一点地择出来。我觉得这个比喻蛮有意思的。

我觉得面向过程的编程方式跟我们做事的方式挺相似的,有顺序,一步一步来,有条不紊地。什么事先做,什么事后做怎么事先都要考虑清楚,亲力亲为。不然,一着不慎,那可就满盘皆输啊。比如说C语言中的宏定义,我认为是一种面向对象的思想。我记得书上是举的是这么个例子#define PI 3.14,试想如果没有这个宏定义,程序中又有很多地方用到了3.14,那改起来岂不是很麻烦(当然,可以用查找替换,但这不是以程序的方式考虑问题)。所以这小小的宏定义,是不是把程序中的相同的3.14抽象出来用PI来代替,抽象不就是这么定义的吗(抽象:从共同的事物中抽象共同的,本质的特征,而舍弃其非本质的东西)。

面向对象里最重要的应该是抽象,这东西太神奇,最近我在学习django(用python语言写的开源的web框架)的过程中体会了它的神奇与伟大。大家看这个例子。

urlpatterns = patterns('',

('^time/$', current_datetime),

('^time/plus/1/$', one_hour_ahead),

('^time/plus/2/$', two_hours_ahead),

('^time/plus/3/$', three_hours_ahead),

('^time/plus/4/$', four_hours_ahead),

)

我想在一个页面中显示时间当前时间,当前时间+1/2/3/4/个小时的话,就得写成这样,得其实它们有一个共同点,就是与当前时间有关,我想很多人已经想到了解决了方法,那就是用正则表达式,可以写成这样

(r'^time/plus/\d+/$', hours_ahead),

问题解决了,而且省时省力,

,通用性也好。

还有一个挺傻的例子。比如说想求一百个整数之和(当然不是用1加到一百,至少不是用这个数学公式能解决的),以面向过程的思想,那就写个整数求和的函数呗,用一个for或while就能解决。那如果我下次求和的对象是浮点数、复数呢,又得重写了?大家都知道我们应该用面向思想来解决这个问题,写一个类,或者用模板。对这种小问题似乎不是很必要,但如果是大型程序呢?难怪,只有写过大型程序的人才能深刻理解面向对象的思想,像我这种一次写程序不会超过300行的来说,还有好长一段路,呵呵。

跟师兄讨论过面向对象与面向过程的问题,他提到因为指针的缘故,面向才能如此高效。我其实不太明白,或许有关系吧。下一阶段再好好考虑这个点吧。

以上是我对面向对象与面向过程的一点拙见,是以我当前的知识水平为基础的,肯定有很多理解的不对不够深刻的地方,我想以后会慢慢悟到吧。继续努力。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: