应对复杂性的能力不同。??
我们知道现在存在着两种不同的编程方式-1) 面向过程编程(POP)以及2)面向对象编程。我们可以任意选择一种方式来编写程序,但是我们得知道这两种编程方式的区别。这两种编程方式是软件开发历经几十年发展的结果。从计算机被发明起,人们尝试了很多方法来编写程序,例如a)自顶向下编程;b)自底向上编程;c)模块化编程;d)结构化编程等等。这些方法的根本目的只有一个-“使编程更加高效”-即让编写一个复杂的程序变得简单、自由、bug少、易于理解、易于扩展、易于修改等等。
??简单来说,POP与OOP之间的区别可以这样解释:-一个程序员可以用POP编写一个困难程度一般的复杂程序,但是当程序变得更加复杂的时候,此时用POP将比较低效率,整个编程过程将更加艰难,花费更多时间,有更多的bug,花更多的时间debug等等。而在同样复杂度下,OOP比POP高效得多。在软件开发中,业界都遵循OOP原则,因为OOP使团队协作编程变得简单。同时,OOP具有较高的代码重用性。
面向过程编程
??这里“过程”一次值得特别注意。过程可以理解为子程序的集合或者函数的集合。我们都知道C语言中的函数。C是一个典型的面向过程语言。在面向过程编程中,强调的是函数或者子程序。函数是指令的集合,用于执行某个特定的任务。在程序中,函数被重复调用来执行任务。例如,一个程序可能包括收集用户数据(读),对用户数据进行计算(计算),呈现计算结果(打印)。这三个读、计算、打印能通过3个不同的函数来实现。
面向过程编程示意图
??面向过程编程最大的问题在于数据处理。面向过程完全不重视数据。这里的数据指从用户收集到的信息、程序的计算结果等等。如果你熟悉C语言,你可能会想起C语言中的存储类别。在C语言中,为了一个或者多个函数可以访问变量, 这个变量必须被声明为全局变量。如果这个程序有10个函数,每个函数都可以访问这个变量,那么其中一个函数就有可能不小心修改了这个变量,如果这个变量是程序的一个重要变量,那么任意一个不小心的操作就有可能毁了整个程雪。而且,当程序很庞大时,这种bug很难定位到是哪个函数出了问题。
面向过程编程中的数据以及函数示意
?? 结构体是C语言的一个重要特性。结构体提供了一种把不同数据类型打包成一个新类型的方式。程序员可以用结构体把整数、浮点数、数组等类型打包成一个新的类型。结构体一引入C语言就收到了广泛的好评和认可。这是因为结构体很好地把现实世界的需求映射到程序当中。结构体的问题在于它只处理数据。 结构体不允许打包与数据相关联的函数,所有相关联的函数必须写在结构体之外。因此,C程序过度依赖于函数。
?? 总的来说,在面向过程编程中,问题被看成过程的有序组合,例如读、计算、展示结果等等过程。以面向过程来思考为时,首先把问题分解成一系列过程,每个过程可以对应一个或者多个函数,实现所有的函数,问题就被解决了。
面向对象编程
?? 面向对象编程与面向过程编程有本质的不同。面向对象编程保留每结构化编程的所有优点,并且引入了许多促提高编程效率的新特性。这些新特性使我们可以以一种全新的方式去编程。下面介绍这些新特性。
?? 1) 面向对象编程的第一个特性是数据隐藏。面向对象编程很重视数据。采用面向对象编程,程序员可以避免核心数据暴露在外。类(class)是面向对象编程的基本概念,类类似于面向过程编程中的结构体。类用于打包不同的数据类型以及对这些数据的操作函数。类中的数据成员可以是私有的(private)或者公有的(public)。为了避免数据暴露在外,程序员可以把数据声明为私有的。类与C语言中的结构体很相似,都是打包不同的数据类型。它们之间的主要区别在于函数。结构体不允许一起打包数据以及相应的处理函数而类允许。并且结构体并不支持数据隐藏,结构体中的数据成员可以任意访问。面向对象编程中的数据隐藏称为数据封装。面向过程编程的主要缺陷(忽视数据)在面向对象编程中得到了解决。面向对象编程把数据绑定到类以及类的对象上去,因此也就不再需要全局数据类型,因此避免了全局变量的偶然修改导致的严重错误。
面向对象编程中的对象示意图
?? 2)面向对象编程的另一个特点是代码重用。面向对象编程的继承特性使代码重用变得可能。通过继承,一个类能够获得另一个类的特性。除此以外,面向对象编程的新特性还有多态,动态绑定等等,这些都提高了代码的重用性。
?? 以上翻译自http://www.circuitstoday.com/difference-between-procedure-oriented-and-object-oriented-programming
面向过程编程与面向对象编程的区别(个人理解)
1)从思维方式上来讲,是对现实问题的建模方式不同。面向过程编程把问题分解成一个个过程,一步步实现这些过程,问题就得到了解决。而面向对象编程把问题看成一系列对象之间的交互,设计出这些对象以及对象之间的交互,问题就得到了解决。
2)从程序的本质上来讲,是对算法以及数据的重视程度的不同。程序的本质是算法和数据。面向过程编程重视算法,忽视数据。面向对象编程侧重点在数据,对算法的重视程度不如面向过程编程。对数据的重视,使面向对象编程具有继承,封装,多态等特性,在各方面提高了编程的效率。
http://blog.csdn.net/u012069890/article/details/56497186
原文地址:https://www.cnblogs.com/feng9exe/p/8277511.html