- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 疑惑之源 面向过程与面向对象有何异同 面向对象程序设计方法是否将取代面向过程 寻根究底 从概念上诠释 从实际问题中剖析 茅塞顿开 两者之间相辅相成 * * 面向过程与面向对象有何异同 你是否曾一直在苦苦纠结面向对象(object-oriented)与面向过程(procedure-oriented)的根本区别是什么?的确,在以前的学习过程中,我们首先接触到的是面向过程的编程语言,例如:C语言,之后我们相继开始了解面向对象的编程语言,例如:C++、JAVA。但是,我们时常会在学习了面向对象的编程语言后,而设计出面向过程的软件的局面,致使我们陷入迷茫。 面向对象程序设计方法是否将取代面向过程 * * 20世纪80年代提出面向对象的程序设计方法之后,对于程序设计的面向对象和面向过程两种方法,大部分教材偏重于讨论他们的区别,产生两种方法是对立的,互无关联的的想法大有人在,似乎有了面向对象技术,就可以不用面向过程。 实际上,面向对象的技术是在面向过程的基础上,为程序设计提供了更多的手段和方法,两种技术不是非彼即此的对立关系,不能说面向对象的技术取代了面向过程,如果用面向对象的技术就要把一个软件任务划分成两个层次,那么面向对象技术是解决第一个层次的问题,面向过程是解决第二个层次的问题,只有在两个层次上的任务都完成之后,才能说完成了整个程序设计任务。 * * 从概念上诠释 何谓面向过程的程序设计? 面向过程就是分析出解决问题所需要的步骤,然后用函数逐步调用就可以一步一步实现,即面向过程化程序设计是先确定算法,再确定数据结构。如图1所示 图1 结构化程序 * * 何谓面向对象的程序设计 面向对象程序设计是面向问题中的各种独立个体,程序的分析设计过程就是将程序分解成不同对象之间的交互的过程。将数据(成员数据)及处理这些数据的相应函数(成员函数)封装到一个类(Class)中,而使用类的数据变量则称为对象(Object) , 如图2所示 图2 类与对象 * * 相比较,面向过程的程序上一步和下一步环环相扣,设计人员只考虑实现客户的需求不考虑以后扩展,一旦客户的需求有变化,那代码量要改变非常大,耗费的时间也相当多。从本质上说,面向过程基本上是一种状态机,不利于修改,当新状态出现的时候,甚至可能需要重设每一个状态解决实现。所以说面向过程是一种直接的编程方法,它是按照编程语言的思路考虑问题。以C语言为例,它就是通过顺序执行一组语句来实现一个功能,这些语句的执行过程就是整个程序。 而面向对象的程序设计许多东西都是独立的,每个对象都可以重复使用。面向对象程序设计强调“封装”,“继承”和“多态”。数据和数据相关的操作被包装成对象(严格地说是“类”),每个对象是完全完整和独立的。对象可以有派生的类型,派生的类 * * 型可以覆盖(或重载)原有的操作。所有这些,是为了达到更好的内聚性,即一种对象做好一件事情,对象内部的细节外面世界不关心也看不到;同时不同种类的对象之间的依赖性降低,这将降低耦合性,而所有这些都有助于达成一个崇高的目标,就是可重用性。 * * 面向过程编程的程序员,习惯于建立数据结构存放数据并定义方法(函数)来操作数据;而面向对象编程的程序员则构造一个对象模型,将数据与方法组织在一起。以计算长方形的周长和面积为例 面向过程的程序设计方式思考: 1、确定长方形的周长和面积的算法; 2、编写两个方法(函数)分别计算长方形的周长和面积; 3、求周长的方法(函数)和求面积的方法(函数)需要两个参数,分别是长方形的长和宽。 C语言中源代码示例如下: * * #includeiostream.h int main() { void Perimeter(double x, double y); void Area(double x, double y); double a,b,p,s; cina; cinb; p=Perimeter(a,b); s=Area(a,b); cout“长方形的周长是:”pendl; cout“长方形的面积是:”sendl; return 0; } 调用函数 参数 * * int Perimeter(int x, int y) { return 2*(x+y); } int Area(int x, int y) { return x*y; } 被调函数的实现 * * 面向对象的程
文档评论(0)