面向过程是一种直接的编程方法,它是按照编程语言的思路考虑问题。尤其是想C语言这种过程式语言,它就是通过顺序执行一组语句来实现一个功能,这些语句的执行过程就是整个程序。
面向对象是基于万物皆对象这个哲学观点. 把一个对象抽象成类,具体上就是把一个对象的静态特征和动态特征抽象成属性和方法,也就是把一类事物的算法和数据结构封装在一个类之中,程序就是多个对象和互相之间的通信组成的.
面向对象具有封装性,继承性,多态性.封装隐蔽了对象内部不需要暴露的细节,使得内部细节的变动跟外界脱离,只依靠接口进行通信.封装性降低了编程的复杂性. 通过继承,使得新建一个类变得容易,一个类从派生类那里获得其非私有的方法和公用属性的繁琐工作交给了编译器. 而继承和实现接口和运行时的类型绑定机制 所产生的多态,使得不同的类所产生的对象能够对相同的消息作出不同的反应,极大地提高了代码的通用性. 总之,面向对象的特性提高了大型程序的重用性和可维护性.
比如我们要写一个计算器程序。这个计算机目前只要求有加减乘除四种运算。
用面向过程的方法,我们可能直接就写一个main函数。然后就开始定义一些数据结构,然后就开始写add,sub,multi,div等函数,去实现功能。
用面向对象的方法,我们会先定义一个Calculator类。然后定义一些必要的数据成员,然后在定义add,sub,multi,div这四个成员函数(这四个函数的功能实现和上面四个应该是基本一样的)。
从上面的实现来看,这两种实现方法的差别不是很大,甚至第二种看上去还有些多此一举。
接下来,我们要扩展这个计算器,让它能计算指数。
用面向过程的方法,我们会将上面实现的代码全部copy过来,然后再增加一个power函数。
用面向对象的方法,我们会定义一个CalculatorEx类公有继承自Calculator,再在CalculatorEx中实现Power函数。
类是对某些具有共同特征的事物的抽象。比如说一个班级里有许多同学,这些同学都会有名字、学号、年龄等特征。这时就可以定义一classmate类,用这个类来描述一个同班同学的特征;另外还要实现几个操作,比如说更改名字,学号等等,初始化数据等。有了这些,一个类基本上就完成了。
对象就是类的实例。有了classmate类,就可以用它定义一个变量(沿用c里面说法),用这个变量具体的描述某位同学。实际上这个“变量”就是这位同学的对象。