"间接"与“面向对象”

来源:互联网 发布:apache 文件访问权限 编辑:程序博客网 时间:2024/05/05 15:52

               学习OC,偶有收获,写一些体会,我是编程新手,如果文中有哪里不准确,跪求指正。

         先说“间接”,我接触编程4个月来,已经接触了各种“间接”的过程,大家经验丰富,想必感受比我要深得多。编程的过程中,增加间接层,可以得到许多便利,Android做界面,把所有的尺寸、颜色、样式、图片,分别放在固定的文件或文件夹中,然后在布局中通过name去引用过来,这就是一种间接。同样的,编程过程中,通过变量去操作一些值,这是一种间接;通过文件去记录数据,然后在代码中引入文件,而不是直接把数据敲在代码里,这是一种间接;方法通过参数去获取要处理的数据,这是一种间接。“间接”思想在编程中的应用真的很广,今天看到一句话“只要再多添加一层间接,计算机科学中就没有解决不了的问题”,我读书少,还体会不到间接有这么大的作用。。

         在看到《Objective-C基础教程》第3章之前,我从来没想过“间接”和“面向对象”之间有什么关系,书中竟赫然写着“间接是OOP的核心”。因为我接触编程比较晚,可能这是常识,大家不要笑话我,不过看到这句话确实对我震撼很大,尤其是后面,“OOP不只用间接来获取数据,OOP真正的革命性在于它使用间接来调用代码。不是直接调用某个函数,而是间接调用,这是OOP的内涵,其他一切都是通过间接产生的引申效果。”可能对OOP的理解有多种角度,但是这种角度确实很有深度。

         下面我尽量用自己的话来讲一下书中的内容,这样把书中的知识输入大脑,再用自己的话表达出来,对学习的帮助很大,但是对于读者可能不太友好,如果哪里没说清,欢迎讨论。

         首先讨论一下面向过程和面向对象,面向过程的编程思路是“函数第一,数据第二”,你决定做什么事情就要写什么函数,然后调用它,传给它所需的数据,数据为函数服务。比如你想画一个圆,你就要写个画圆的函数,然后传给它圆心、半径、颜色等等数据,这种程序扩展和维护起来非常困难,每增加一个功能,很多情况下你不得不修改很多的代码。面向对象的编程思路是“数据第一,函数第二”,数据可以通过间接的方式引用代码去修改自己,同样是画一个圆,在面向对象这里,就是新建一个圆,让它去“画自己”,圆这个对象是一个数据集,包含各种成员变量的值,比如圆心、半径、颜色等等,还包含一个指向其所属类的指针(OC语言里)。OC中“[circle draw];”,Java中circle.draw(),语句里circle都代表一个对象,draw都代表你写的那个画自己的方法,这里讨论OC中语句执行的原理,“draw”这个信息传给对象circle,然后根据circle里的指针找到其所属类,执行类中的draw方法,并给该方法传入一个代表对象自身的self隐形参量,就是这样,数据通过间接的方式找到并执行了代码,对自己做了相关的操作,数据第一,函数(方法)为数据服务。这种思路强大在,你想增加一个功能,只需拓展和继承,很少去修改那些原来的执行起来没有任何问题的代码。这也很好地遵守了Bertrand Meyer的开放/关闭原则(Open/Closed Principle),即软件实体对扩展开放,对修改关闭。

0 0
原创粉丝点击