OC学习笔记之面向过程与面向对象


一、面向过程
           就小桥所知面向过程是一种思维方式。宏观上来讲,用面向过程来看世界,事物都是有关联,存在着因果关系的,有某种规则组织着事物的运动,有起点,有终点,是一种线性的发展过程。在解决现实问题时,总是从开始解决问题(起点)到问题被解决(终点),中间是解决问题的一系列步骤,这些解决问题的步骤用面向过程来编程就是函数。我们只要严格按照函数调用的顺序来调用函数,问题最终就能被解决;代码层上来讲,面向过程的编程中数据存储和对数据的操作是独立存放的。
        在小桥看来,面向过程的编程解决问题的本质是寻找将问题解决的所有步骤,将每一步做成一个函数,依次调用每一步的函数,就是在解决问题。这样的编程小桥认为是高效的,为什么?因为其中没有任何冗余的代码,每一个函数都用到了,因为这是解决问题中的一个不可少的步骤。 

       举个例子:小桥早上要去教3教学楼的教室上课!那么小桥要看课表找到是哪个教室,然后下楼,在宿舍门口想一下要不要去吃早餐(虽然小桥经常不吃),吃早餐就走到食堂的路再转去教3教学楼,否则直接走山坡近路,到了教3找到楼层,再找到教室,OK,找个座位坐下这事儿做完了。在程序中,上面的都是函数,先调用谁后调用谁就完了。总的来说这种方式还是很有效了,但是由于函数调用间存在因果关系,后一个函数往往要用到前一个函数加工的数据,数据的安全性并不高,而且并不符合现实中人们的思维。小桥去吃饭从来不会说,师傅来份XX地方种的,早上用火车运来的XX菜。我们并不关心菜,怎么种的,怎么运来的,怎么做的,这就是下面要讨论的面向对象思维。

二、面向对象 
     面向对象是另一种比较符合人们习惯的思维方式,在面向对象看来,世界是抽象的,万事万物都是对象,都是可抽象化,可对象化的。小桥是一个对象,读者你是另一个对象,我们是相似的,所以两者的抽象就是人,我们抽象的人中的两个对象。宏观上来讲,面向对象的思维认为事物都是独立的,不以外物而改变对象本身,事物的运动是对象本身的行为(方法),对象对外界只开放一个通信的小接口,并不敞开怀抱;代码层上来说,面向对象把数据和对数据的操作都存放在一起,都是对象的组成!面向对象编程本质上是抽象,程序的好坏与抽象的好坏成正比!
     还是上面那个例子,从面向对象来看,要完成:小桥早要去教3教学楼的教室上课!找到小桥,课表,教3教学楼这三个对象,然后调用小桥的“去”的方法,要吃早餐还要调用“吃早餐”方法,教3教学楼的“教室布局”方法,在课表对象中的“教室安排”方法,就能完成了。对象间通过接口来通信,但彼此都不了解各自内部的具体情形。某天,辅导员喊小桥去教3上听讲座,她并不会关心小桥是怎么去的,她只知道小桥这个对象内部有去的方法,难道你认为辅导员会这样说:小桥,快点出宿舍,下楼,走小山坡的路,经过图书馆,走进教3教学楼 ,去XXX教室听讲座!现实中没人会这么做!
     小桥和,教3教学楼,课表都是独立的对象,平时小桥甚至不喵课表一眼,只有要去上课才看课表找出教室安排,课程安排
在小桥看来,相对来说,面向对象编程,效率没有面向过程高,因为对象内部的数据和方法有时并没有用到,但是还是为它们分配了内存,小桥这个对象很少吃早餐或者某一天不吃早餐,但是小桥的胃还在那里,吃早餐这个方法它还在那里,只是没有调用吃早餐方法,胃里是空的。尽管如此,但是面向对象中的数据比面向过程中安全得多因为它们是独立的对象,独立的操作(函数),再举个例子,小桥今天早上吃了早餐,但是对于读者来说,你的胃还在那里,还是那样,没有影响到你吧!并不会我吃了,你也就吃了,你的胃里也有食物。虽然你看到我吃可能会嘴会馋!这就是封装性,小桥胃封装在小桥的身体里。而面向过程中要完成相同功能要共享数据(共享一个胃??小桥要吃不下了0.0)
三、二者的联系
    在上面小桥分别介绍了我自己对面向过程和面向对象理解的区别,这里再介绍下联系。在小桥看来二者并不是对立的。面向过程中也有面向对象的思维(注意二者是不同的思维而不仅仅是语法上的不同),如C中的结构体可以用于面向对象思想,面向对象中也有面向过程。前面说过小桥这个对象中有“去”方法“,
 ”去“这个方法的具体实现和面向过程中的”去“本质上是一样的;还有,小桥这个对象和我的室友、同学共用一个食堂、学校,如果食堂和学校两个对象是小桥和其他人的公共数据,小桥把教3的一间教室的门弄坏了(只是假设,小桥很温柔的),小桥的室友还有其他人都看得到一个坏的门,从这个意义上讲不就是面向过程的思维吗?
 、最后
     由于水平有限,以上只是小桥本人对面向过程和面向对象的粗浅的看法,有不当之处,敬请读者您指正,不胜感激! 最后转载新浪blog上的一首有意思的诗来结束本文:

我能抽象出整个世界...

但是我不能抽象出你...

因为你在我心中是那么的具体...(小桥:对象是具体的)

所以我的世界并不完整...


我可以重载甚至覆盖这个世界里的任何一种方法...

但是我却不能重载对你的思念...                (小桥:唯一思念的是你?)            

也许命中注定了你在我的世界里永远的烙上了静态属性...(小桥:静态的话,没有实例化对象就分配了内存)

而我不慎调用了爱你这个方法...


当我义无返顾的把自己作为参数传进这个方法时...

我才发现爱上你是一个死循环...

它不停的返回对你的思念压入我心里的堆栈...(小桥:一直调用“爱你”?)

在这无尽的黑夜中...


我的内存里已经再也装不下别人...

我不停的向系统申请空间...

但却捕获一个异常---我爱的人不爱我...

为了解决这个异常...


我愿意虚拟出最后一点内存...

把所有我能实现方法地址压入堆栈...

并且在栈尾压入最后一个方法---将字符串"我爱你,你爱我吗?"传递给你...


如果返回值--我将用尽一生去爱你...

否则--我将释放掉所有系统资源...

给你更多的空间去追求幸福.......(小桥:释放了所有资源,她这个对象都不在了吧,那她不是死了么??)




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值