面向过程的编程和面向对象的编程有什么区别?

作者&投稿:常泰 (若有异议请与网页底部的电邮联系)
面向对象的编程和面向过程的编程有什么区别?~

C语言是面向过程的编程,它的最重要特点是函数,通过主函数来调用一个个子函数。程序运行的顺序都是程序员决定好了的。它是我学的第一种程序语言。

C++是面向对象的编程,类是它的主要特点,程序执行过程中,先由主函数进入,定义一些类,根据需要,执行类的成员函数,过程的概念被淡化了(实际上过程还是有的,就是主函数的那些语句),类就是对象,所以我们称之为面向对象程序设计。 不同点:1.编程模型

所有计算机均由两种元素组成:代码和数据.精确的说,有些程序是围绕着"什么正在发生"而编写,有些则是围绕"谁正在受影响"而编写的.

第一种编程方式叫做"面向过程的模型",按这种模型编写的程序以一系列的线性步骤(代码)为特征,可被理解为作用于数据的代码.如 C 等过程化语言.

第二种编程方式叫做"面向对象的模型",按这种模型编写的程序围绕着程序的数据(对象)和针对该对象而严格定义的接口来组织程序,它的特点是数据控制代码的访问.通过把控制权转移到数据上,面向对象的模型在组织方式上有:抽象,封装,继承和多态的好处.

2.抽象

面向对象程序设计的基本要素是抽象,程序员通过抽象来管理复杂性.

管理抽象的有效方法是使用层次式的分类特性,这种方法允许用户根据物理含义分解一个复杂的系统,把它划分成更容易管理的块.例如,一个计算机系统是一个独立的对象.而在计算机系统内部由几个子系统组成:显示器,键盘,硬盘驱动器,DVD-ROM,软盘,音响等,这些子系统每个又由专门的部件组成.关键是需要使用层次抽象来管理计算机系统(或其他任何复杂系统)的复杂性.

面向对象程序设计的本质:这些抽象的对象可以被看作具体的实体,这些实体对用来告诉我们作什么的消息进行响应.

/* (我的理解)

*计算机是一个实体,我要输入字符,显示器显示出来,那么

*计算机(对象).输入(键盘属性).显示(显示方法)

*使用分层来引用,操作.而不用管计算机内部如何处理.

*只要有计算机对象,它就能响应我的操作,而我敲键盘,

*计算机对象就把这个消息传给屏幕,屏幕显示.

*/

计算机对象包含了它所有的属性,以及操作,这就是面向对象程序设计的三大原则之一:封装.

3.封装

封装是一种把代码和代码所操作的数据捆绑在一起,使这两者不受外界干扰和误用的机制.封装可被理解为一种用做保护的包装器,以防止代码和数据被包装器外部所定义的其他代码任意访问.对包装器内部代码与数据的访问通过一个明确定义的接口来控制.封装代码的好处是每个人都知道怎样访问代码,进而无需考虑实现细节就能直接使用它,同时不用担心不可预料的副作用.

在JAVA中,最基本的封装单元是类,一个类定义着将由一组对象所共享的行为(数据和代码).一个类的每个对象均包含它所定义的结构与行为,这些对象就好象是一个模子铸造出来的.所以对象也叫做类的实例.

在定义一个类时,需要指定构成该类的代码与数据.特别是,类所定义的对象叫做成员变量或实例变量.操作数据的代码叫做成员方法.方法定义怎样使用成员变量,这意味着类的行为和接口要由操作实例数据的方法来定义.

由于类的用途是封装复杂性,所以类的内部有隐藏实现复杂性的机制.所以JAVA中提供了私有和公有的访问模式,类的公有接口代表外部的用户应该知道或可以知道的每件东西.私有的方法数据只能通过该类的成员代码来访问.这就可以确保不会发生不希望的事情.

4.继承

继承是指一个对象从另一个对象中获得属性的过程.是面向对象程序设计的三大原则之二,它支持按层次分类的概念.例如,波斯猫是猫的一种,猫又是哺乳动物的一种,哺乳动物又是动物的一种.如果不使用层次的概念,每个对象需要明确定义各自的全部特征.通过层次分类方式,一个对象只需要在它的类中定义是它成为唯一的 各个属性,然后从父类中继承它的通用属性.因此,正是由于继承机制,才使得一个对象可以成为一个通用类的一个特定实例.一个深度继承的子类将继承它在类层次中的每个祖先的所有属性.

继承与封装可以互相作用.如果一个给定的类封装了某些属性,它的任何子类将会含有同样得属性,另加各个子类所有得属性.这是面向对象程序在复杂性上呈线性而非几何增长的一个重要概念.新的子类继承其所有祖先的所有属性.子类和系统中的其他代码不会产生无法预料的交互作用.

5.多态

多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用"一个接口,多个方法"来描述.可以通过方法的参数和类型引用.

6.封装,继承,多态的组合使用

在由封装,继承,多态所组成的环境中,程序员可以编写出比面向过程模型更健壮,更具扩展性的程序.经过仔细设计的类层次结构是重用代码的基础.封装能让程序员不必修改公有接口的代码即可实现程序的移植.多态能使程序员开发出简洁,易懂,易修改的代码.例如:汽车

从继承的角度看,驾驶员都依靠继承性来驾驶不同类型(子类)的汽车,无论这辆车是轿车还是卡车,是奔驰牌还是菲亚特牌,驾驶员都能找到方向盘,手刹,换档器.经过一段时间驾驶后,都能知道手动档与自动档之间的差别,因为他们实际上都知道这两者的共同超类:传动装置.

从封装的角度看,驾驶员总是看到封装好的特性.刹车隐藏了许多复杂性,其外观如此简单,用脚就能操作它.发动机,手刹,轮胎大小的实现对与刹车类的定义没有影响.

从多态的角度看,刹车系统有正锁反锁之分,驾驶员只用脚踩刹车停车,同样的接口可以用来控制若干种不同的实现(正锁或反锁).

这样各个独立的构件才被转换为汽车这个对象的.同样,通过使用面向对象的设计原则,程序员可以把一个复杂程序的各个构件组合在一起,形成一个一致,健壮,可维护的程序

面向对象和面向过程的区别:
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。
而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

面向对象 一、面向过程与面向对象的区别: 前者是一种谓语和宾语的关系;后者是一种主语和谓语的关系 。 二、面向对象的三个特征: ??封装 ??继承 ??多态 三、类与对象: 对象又称作实例,是实际存在的该类事物的每个个体。类是对某一类事物的描述,是抽象的、概念上的 定义。 *面向对象的设计的重点是类的设计。 四、对象的比较: 1“= =”运算符与equals()方法的区别: 前者辨别实质是否相等;后者辨别长相是否相等。 五、 实现类的封装性: 1不能让外面的类随意修改一个类的成员变量;2在定义一个类的成员(包括变量和方法),使用private关键字说明这个成员的访问权限,只能被这个类的其他成员方法 调用,而不能被其他的类中的方法所调用; 3为实现封装性,常将类的成员变量 声明为private,再通过public的方法来对这个变量进行访问。对一个变量的操作,一般都有 读取和赋值操作,我们一般定义两个方法来实现这两种操作,即:getXxx()与setXxx(); 4一个类就是一个模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其他的一切内容。再进行程序设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面干预),弱耦合(提供给外部尽量少的方法调用)。 六、构造函数的定义与作用: 1、 特征:??名称与类相同;??不含返回值;??不能在方法中用return返回一个值注意:构造方法里不含返回值的概念是不同与void的,在定义构造方法时加了void,结果这个方法就不再被自动调用了。 2作用:当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用, 我们可以在这个方法中加入要完成初始化工作的代码。 七、若类中已定义了一个构造方法,编译器就不再自动产生类似public Person(){ }的构造方法。 八、this引用句柄的应用: 1、 类的成员名和对其进行赋值的成员方法的形参变量同名时,使用this便于理解; 2、 假设我们有一个容器类和一个部件类,在容器类的某个方法中要创建部件类的实例对象,而部件类的构造方法要接收一个代表其所在容器的参数。 3、 构造方法是在产生对象时被java系统自动调用的,我们不能在程序中象调用其他方法一样去调用构造方法。不是用构造方法名,而是用this的形式,根据其中的参数列表,选择相应的构造方法。 九、 垃圾回收过程分析:java中的finalize()方法;System.gc的作用。 Finalize()的调用是在无用对象被回收前发生的。 一○、 static 静态方法:1、 在静态方法中只能直接调用同类中其他的静态成员,而不能直接访问类中的非静态成员。原因是对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象;2、 静态方法不能以任何方式引用this和super关键字;3、 main()方法是静态的,因此,JVM在执行main方法时不创建main方法所在的类的实例对象,因此在main()方法中,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员。 一一、 JVM在程序执行时,只有在调用其他类的时候,才加载这个类并将其初始化(即将构造方法及静态变量进行加载并初始化。 一二、 单态设计模式:采取一定的方法保证在整个的软件系统中,对某个 类只能存在一个对象实例,并且该类只能产生严格取得其对象实例的方法。若我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造方法的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类的内部仍可以产生该类的对象。 一三、 内部类: 1、在类中直接定义的内部类??*嵌套类可直接访问嵌套他的类的成员,包括private成员,但嵌套类的成员却不能被嵌套它的类直接访问; * 在内部类对象保存了一个对外部类对象的引用,当内部类的成员方法中访问某一变量时,若在该方法和内部类中都没有定义过这个变量,内部类中对this 的引用会被传递给那个外部类对象的引用; * 若用 static 修饰一个外部类,这个类就相当于是一个外部定义的类,所以 static 的内部类中可声明static 成员,但非static 的内部类中的成员是不能声明为 static 的,static 的内部类不能再使用外层封装类的非 static 的成员变量。 例:若函数的局部变量,内部类的成员变量,外部类的成员变量重名,则应该按下面的程序代码所使用的方式来明确指出我们真正要访问的变量。 public class Outer { private int size; public class inner { private int size; public void doStuff(int size) { size++; //应用doStuff函数的形参 this.size++; //引用Inner类的成员变量 Outer.this.size++; // 引用Outer类的成员变量 } } } 2、在方法中定义的内部类:在方法中定义的内部类只能访问方法中的final 类型的局部变量,用final 定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期。3、在内部类中的方法可以访问外部类的成员变量,而外部类的方法不能直接访问内部类的成员变量,若要访问,除非在内部类中再定义一个构造方法,这个构造方法的参数是外部类。 一四、在一个类中定义的局部变量,编译器可以对他初始化,但在一个方法中定义的局部变量,编译器不对它初始化。 现在用的最多的是ASP.Net(C#)与JSP(Java)

举个例子,比如开车、加速、减速、刹车。
用面向过程来说就是你要先有一个车,然后这四个分别是4件事,也就是说你要写4个函数,分别是开车、加速、减速、刹车,这分别是四个事件,如果使用的话要调用4个函数。
但是对于面向对象的编程来说,我们关心的是车这个类,而不是开车、加速、减速和刹车这四个过程。这4个过程是车这个类的一部分,只是其中的一种行为,而且对于行为的顺序没有强制要求。
两种思想的对比:
面向过程是具体的东西,而且面向过程是面向对象的基础。面向对象可以说是面向过程的抽象,比如汽车有开车,加减速和刹车,关于汽车的操作有好多,每一个都需要一个具体的过程来实现,把这些过程抽象的总结起来就可以形成一个类,这个类包括的汽车所有的东西,所有的操作。
总结来说就是,面向过程是一种基础的方法,它考虑的是实际的实现,一般情况下,面向过程是自顶向下逐步求精,其最重要的是模块化的思想方法。因此在模块化编程的时候才会有“低耦合,高内聚”的思想来提高效率。面向对象的方法主要是把事物给对象化,包括其属性和行为。当程序较小的时候,面向过程就会体现出一种优势,其程序流程十分清楚。但是,面向对象编程更贴近实际生活的思想。


面向过程和面向对象编程语言的区别
面向过程是授人以鱼。面向对象是授人以渔。

面向对象的编程和面向过程的编程有什么区别?
C语言是面向过程的编程,它的最重要特点是函数,通过主函数来调用一个个子函数。程序运行的顺序都是程序员决定好了的。它是我学的第一种程序语言。C++是面向对象的编程,类是它的主要特点,程序执行过程中,先由主函数进入,定义一些类,根据需要,执行类的成员函数,过程的概念被淡化了(实际上过程...

面向对象和面向过程有什么不同?麻烦请形象一点说明...
这种方式更关注事物的特性和行为,而非实现这些特性和行为的步骤。面向对象编程强调的是模块化、复用性、扩展性,把问题看作一组独立实体及其之间相互作用的问题域模型,让程序设计变得更加直观和易于理解。面向过程编程:它是按照解决问题的步骤来设计和编写程序的。面向过程的编程关注的是实现某个功能或结果...

面向对象和面向过程的区别是什么?
面向对象和面向过程的区别是:一,编程思想不同。面向过程思想顾名思义其实就是面向解决问题的步骤进行编程。面向过程的编程思想总结起来就八个字——自顶向下,逐步细化!面向对象思想就是分析参与问题的有哪些实体,这些实体应该有的属性和方法,通过调用这些实体的属性和方法解决问题。二,编程过程不同。...

编程思想基础:面向对象和面向过程的区别
2、面向过程:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。三、功能不同 1、面向对象:向对象开发是一种根本不同于传统的功能分解的设计方法。面向对象的软件分解更接近人对客观事务的理解,而功能分解只通过问题空间的转换来获得。2、面向过程...

什么是面向过程编程?
面向过程 面向过程”是一种以事件为中心的编程思想。“面向对象”是一种以事务为中心的编程思想。比如以公共汽车而言。“面向过程”就是汽车启动是一个事件,汽车到站是另一个事件。在编程序的时候我们不关心的是某一个事件。而不是汽车本身。我们分别对启动和到站编写程序。类似的还有修理等等。到了编程...

什么是面向过程的程序设计?
“面向过程”是一种以过程为中心的编程思想。 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。过程 面向过程其实是最为实际的一种思考方式,就是算面向对象的方法也是含有面向过程的思想.可以说面向过程是一种基础的方法.它考虑的是实际的实现...

面向对象编程相对于面向过程编程有什么优点?二者有什么区别?
比如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没...

如何更好地理解面向对象编程与面向过程编程的本质区别
面向过程编程:代码和数据一般是分离的。面向对象编程:代码和数据是密不可分的整体。

面向csdn编程是什么意思
其运用三种基本结构:(顺序结构,循环结构,选择结构)运用面向过程编程思想的语言有:C语言。这种语言的优点是符合人的基本思维,编写起来比较简单。但是它的缺点也显而易见,它的可维护性和可扩展性比较差,不利于现在工业化软件开发。面向对象编程: 面向对象编程是站在真实世界的角度下考虑问题的解决...

成武县19258112047: 面向对象的编程和面向过程的编程有什么区别? -
翟匡酒石: C语言是面向过程的编程,它的最重要特点是函数,通过主函数来调用一个个子函数.程序运行的顺序都是程序员决定好了的.它是我学的第一种程序语言.C++是面向对象的编程,类是它的主要特点,程序执行过程中,先由主函数进入,定义...

成武县19258112047: 面向过程的编程和面向对象的编程有什么区别? -
翟匡酒石: 面向对象 一、面向过程与面向对象的区别: 前者是一种谓语和宾语的关系;后者是一种主语和谓语的关系 . 二、面向对象的三个特征: ??封装 ??继承 ??多态 三、类与对象: 对象又称作实例,是实际存在的该类事物的每个个体.类是对...

成武县19258112047: 面向对象编程和面向过程编程有什么区别???
翟匡酒石: 简单的说,“面向过程”是一种以事件为中心的编程思想,而“面向对象”是一种以事物为中心的编程思想. 比如“面向过程”就是汽车启动是一个事件,汽车到站是另一个事件.在编程序的时候我们关心的是某一个事件,而不是汽车本身,我们分别对启动和到站编写程序;而“面向对象”需要建立一个汽车的实体,由实体引发事件.我们关心的是一个汽车而不是汽车的某个事件.

成武县19258112047: 面向对象程序设计和面向过程程序设计有什么区别 -
翟匡酒石: 面向过程比面向对象要出现的早,面向过程的象c语言主要对程序的执行过程的编写,面向对象象java语言主要是对类的编写和应用两者是有本质的区别的.

成武县19258112047: 面向对象编程和面向过程有什么不同 -
翟匡酒石: 面向过程与面向对象编程的区别 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,...

成武县19258112047: 面向对象编程和面向过程编程分别有什么优点和缺点 -
翟匡酒石: 面向对象三大特点:封装、多态、继承.这三个特性可2113以让我们在写比较大的项目时更5261好的复用代码,比如一个User对象作为用户存在,里面封装了我们所需要的4102id、name等需要的信息.在我们需要的地方获取这个User对象,拿到对应的值就行了1653.面向过程突出一个直接,没那么多弯弯绕,因此回不适合全用面向过程做一个大项目.不过现在讲究是面向过程和面向对象结答合,各有各的优点.

成武县19258112047: 面向对象编程相对于面向过程编程有什么优点?二者有什么区别? -
翟匡酒石: 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解...

成武县19258112047: 面向过程和面向对象的编程有什么区别?
翟匡酒石: 面向过和的编程是把数据和程序分开,这样会造成很多不必要的麻烦.甚至因为某些方面考虑不当而牵一发而动全身.缺点相对于面向对象来说很多. 面向对象是以对象为基础,例如小狗是一个对象,人是一个对象. 对象可以用一个类来表达,在类中可以有很多的事情,来表示对象特点. 例如:人会走是一个特点,电脑可以上网也是一个特点等等. 总之,面向对象的编程更加优越,也是未来的发展方向.

成武县19258112047: 面向过程和面向对象的编程有什么区别? -
翟匡酒石: 如果一个软件的需求被定死了,绝不会改动.那么面向对象或者面向过程,都可以实现. 而现在的软件通常是面临着升级或需求变更.那么面向过程的语言编写的软件通常要重写代码,这无疑带来了巨大的工作量和未知风险,软件常常会因此作废.而面向对象特有的继承、封装等特性,为软件工程提供了更好的适应复杂情况下不同需求. 如果说有什么区别,那就是编程的方式、设计的方式全变了.

成武县19258112047: 面向过程和面向对象程序开发的区别 -
翟匡酒石: 本质都是为了解决问题. 相对来说,面向过程会关注解决问题的一系列步骤.面向对象就显得方便些,只需要调用某个类或者接口的方法即可. 当然,这个类或者接口最终要解决这个问题,还是会实现“面向过程”的功能的,区别在于思维方式不同. 最终都面向过程和面向对象程序开发的区别

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网