原创 面向对象和面向过程区别

2015-7-28 15:57 1937 20 21 分类: 软件与OS 文集: Linux
转自 http://blog.sina.com.cn/s/blog_4dd5955301000a2m.html
 
 
面向对象和面向过程的区别,实在是难用一两句话说明白。
 

面向过程是一种直接的编程方法,它是按照编程语言的思路考虑问题。尤其是想C语言这种过程式语言,它就是通过顺序执行一组语句来实现一个功能,这些语句的执行过程就是整个程序。不同的语言解决同一个问题的过程是不一样的。
 
面向对象是一种抽象度更高的编程方法。它把眼光集中在了要解决问题本身而不是语言上。它的目标是使模块的抽象度更高,可复用性更好。面向对象的目的就是可复用。
 
举个例子,比如我们要写一个计算器程序。这个计算机目前只要求有加减乘除四种运算。
 
用面向过程的方法,我们可能直接就写一个main函数。然后就开始定义一些数据结构,然后就开始写add,sub,multi,div等函数,去实现功能。
 
用面向对象的方法,我们会先定义一个Calculator类。然后定义一些必要的数据成员,然后在定义add,sub,multi,div这四个成员函数(这四个函数的功能实现和上面四个应该是基本一样的)。
 
从上面的实现来看,这两种实现方法的差别不是很大,甚至第二种看上去还有些多此一举。
 
接下来,我们要扩展这个计算器,让它能计算指数。
 
用面向过程的方法,我们会将上面实现的代码全部copy过来,然后再增加一个power函数。
用面向对象的方法,我们会定义一个CalculatorEx类公有继承自Calculator,再在CalculatorEx中实现Power函数。
 
上面只是一个简单的扩展,二者的区别就明显起来。面向过程是纯代码级的复用。面向对象的复用方式更为优雅,它可以是代码级的,也可以是类级的,也可以是接 口级的,也可以是组件级的,甚至是服务级的。抛下这些复用概念不说。我们假设第一次实现的并不是简单的四个功能,而是一个复杂的库,第二次增加的也不是一 个功能而是一个扩展库。这时候面向对象的优势就会比较明显的体现出来。面向过程是松散部件,而面向对象是一个体系。
 
我说的这些都是自己的理解,可能并不完全正确。对于面向对象有一个官方的定义,但是不同人有不同的理解。所以里面的很多东西都需要在学习的过程中去理解体会。但是,如果不动手做点东西,对这些概念很难理解到位。
 
还有就是,C,C++,Java这些都是语言,他们之间并没有是不是面向对象的区别。用C同样可以写面向对象的程序,看看Linux的内核代码就知道了。 C++,Java一样可以写面向过程的程序,他们之所以叫面向对象的编程语言是因为他们提供的语言特性更易于实现面向对象的编程方法,并不是说他们只能做 面向对象编程。
 
还有就是并不是说面向对象一定优于面向过程。在很多领域是无法实施面向对象的方法,如硬件编程和嵌入式编程这种实时性和效率要求高的领域就无法用到面向对象。面向对象的主要领域还是用在大型,复杂型的软件系统中。

文章评论1条评论)

登录后参与讨论

用户402158 2015-7-28 16:17

谢谢分享
相关推荐阅读
pengchengcheng082_593158939 2015-08-21 16:26
Linux 下 的 vi 编辑器
一、按ESC键 跳到命令模式,然后: :w 保存文件但不退出vi :q 不保存文件,退出vi :wq 保存文件并退出vi :q! 不保存文件,强制退出vi :w! 强制保存,不推出...
pengchengcheng082_593158939 2015-05-23 10:39
后仿真能否被形式验证(Formal Verification)和静态时序分析(Static Timing Analysis)所取代
转自 http://www.cnblogs.com/jyaray/archive/2011/04/26/2029856.html 验证的主要目的:就是检查时间模型是否满足时间要求,是否实现了时...
pengchengcheng082_593158939 2015-05-19 11:18
两种代码方式
下面的两段程序等价,RTL图以及综合后的结果 完全一样。看似简单,其实是两种不同的思维方式。在复杂电路中能体现出两种方式各自的特点,第一种容易理解,第二种则结构更清晰,更接近综合后的结果。以前习惯用上...
pengchengcheng082_593158939 2015-05-14 16:28
Linux 下 的 cc 和 gcc
转自 http://www.cnblogs.com/zhouyinhui/archive/2010/02/01/1661078.html   在Linux下一会看到cc,另一会又看到gcc...
pengchengcheng082_593158939 2015-05-13 17:19
mips 编译器
1、linux 系统下编程的编译器 GNU toolchain(GNU工具链)是一个包含了由GNU项目所产生的各种编程工具的集合。这些工具形成了一条工具链,用于开发应用程序和操作系统。  ...
我要评论
1
20
关闭 站长推荐上一条 /2 下一条