我们之前提到,C语言是面向过程语言,OC语言是面相对象的编程语言。那么,这句话到底在表达什么意思呢?我们一起来了解一下。
面相过程编程主要是说C语言在编程过程中主要使用顺序(代码一句句的顺序执行)、选择(if else)和循环(for while循环)三种基本结构来编写程序。它注重的是完成实际实现功能的过程,向做什么,再做什么,最后做什么。举个例子,每天早上起床,如果用面向过程的思想为:1、起床 2、收拾屋子 3、洗脸刷牙 4、工作。这些需要按照顺序一步步的执行。
面向对象编程思想主要是把事物给对象化,意思就是把要研究的事物当成是一个对象,这个对象可以有它自己的属性和行为(可以简单的理解,这个对象有它自己的变量和函数)。用面向对象的思想说说早上起床,首先我把从事这项活动的人看作一个对象(这个对象的变量可以存储这个人的名字或者年龄等等,一个对象可以有多个变量),这个人有四个行为,分别是:1、起床 2、收拾屋子 3、洗脸刷牙 4、工作。但是这四个步骤没有固定的顺序。
在面向过程编程的时候,完成一个功能,往往是按照程序员思考的步骤直接进行编写代码,先做完哪一步,再做完哪一步,最后做完那一步就做完了。
而在面向对象编程时,先是考虑怎么把问题整合成对象,然后在对这个对象进行编写代码,最后通过使用自己造出来的对象完成相应的功能。
从上边的讲解我们应该可以感觉到,面向过程的思想注重的是把功能模块化(先做一个模块,再做一个模块,最后完成一个模块,环环相接实现一个功能),相对于面向对象更加直观,而且它直接贴近于计算机CPU的工作模式。所以,面向过程和面相对象在完成同一功能时,往往面相过程的编程运行速度更快。
那么面向对象编程有什么好处呢?最大的好处就是面相对象编程的代码可重用性强,也可以说可维护性强。面向过程的代码环环相扣,如果想添加一个功能,就需要考虑在什么位置添加代码,在此位置之后的代码就要重新改正,代码可维护性差。
而面向对象编程如果想添加功能,只需要在这个对象中添加实现这个功能的变量和函数,然后调用这个函数就完成了。
由于OC和C完全兼容,所以对于在开发过程中使用哪种编程思想,要试问题而定。可能刚开始的时候,对于使用哪种编程模式拿捏不准,随着不断的积累开发经验,这个问题自然迎刃而解,这也可以间接的说明实践的重要性。
提到面向对象,就不得不提它的三大特性:封装、继承、多态
封装:又叫隐藏实现,就是只公开代码单元的对外接口,隐藏具体实现。举个简单的例子:你用电脑玩游戏,你只需要知道按键盘的那个键,游戏中的人物会走,会跑,会攻击等等就可以了,不需要知道它是怎么做到的。
继承:是说子类自动共享父类属性和方法的机制。这是类之间的一种关系。简单的来说,你自己的写的类只要是确定了哪个类作为父类,那么你写的这个类就具备了那个类的属性和方法。当然,你也可以在你的类中将父类的方法改写成你自己的方法。你可以在现在基础上再增加一些属性和方法。所以,可以说继承这种机制大大的缩简了程序员的编写代码量。
多态:用一句经典的话解释它就是:父类的指针指向子类的对象。你可以先有这样一个印象,再OC实际开发过程中,多态一般用于工厂模式中,我们以后会慢慢讲解。