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

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

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

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

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

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

2.抽象

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

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

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

/* (我的理解)

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

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

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

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

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

*/

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

3.封装

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

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

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

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

4.继承

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

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

5.多态

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

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

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

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

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

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

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

时间: 2024-12-28 20:49:40

面向对象的编程和面向过程的编程有什么区别的相关文章

面向对象和面向过程的编程方式的理解

面向对象和面向过程的区别? 如果说面向对象和面向过程的具体区别,最深入的地方应该是去看设计模式,推荐大话设计模式那本书,讲的比较好.本人只不过简单叙述下,重点是如何进行面向对象和面向过程的编程,只有会编程了,才能真正懂得面向对象和面向过程的区别.否则都是纸上谈兵. 面向过程:是以计算机线性思维的方式进行编程.一步一个脚印的执行.本身也没有问题,但是如果遇到需求多变的情况,或者功能的添加和删除,将极其影响原来的程序代码,必须要重写或者修改,或者重新组织原来的代码. 面向对象:在对需求多变的时候,不

【C++系列小结】面向过程的编程风格

前言 编程语言有面向过程和面向对象之分,因此编程风格也有所谓的面向过程的编程和面向对象的编程,而且语言的性质不会限制编程的风格. 这里主要说一下面向过程的编程. "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想. C语言是面向过程的编程语言,但是依然可以写出面向对象的程序,同样C++也当然可以写出面向过程的程序咯. 如果我们把所有的程序代码都写在一个main函数里面,那么这个程序显然会显得很不和谐吧.理想一点的做法是我们把一些看起来和main函数逻辑上关

[python]两种编程思维--面向过程和面向对象

例如:eg:炒一份西红柿鸡蛋 一.面向过程 面向过程的编程思维,如下 二.面向对象 制作一台炒菜机器人,然后告诉机器人做一道西红柿炒鸡蛋.在这里,我们直接面对的是机器人,而非炒菜的过程,所以这里机器人就是我们面对的对象,这种解决问题的方法就叫做[面向对象]编程 三.总结 [面向过程]编程主要用到的是“函数”知识,将每个过程步骤打包成函数,再依次调用,看重的是解决问题的过程 [面向对象]编程主要用到的是“类和对象”知识,看重的是解决问题的方法 原文地址:https://www.cnblogs.co

python/面向过程的编程思想及举例

python基础--面向过程的编程思想及举例 面向过程的编程思想 1.面向过程的编程思想及举例 写程序时: 要先想功能,分步实现 2. os模块中walk输出目录中文件路径 os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下. Send可以传多个值,但是必须是元组类型 面向过程的编程思想 像流水线,代码简洁,体系结构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

python基础——面向过程的编程思想及举例

面向过程的编程思想 1.面向过程的编程思想及举例 写程序时: 要先想功能,分步实现 2. os模块中walk输出目录中文件路径 os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下. Send可以传多个值,但是必须是元组类型 面向过程的编程思想 像流水线,代码简洁,体系结构 实现对一个目录下面(包含子目录下面)有一行包含过滤字符串就输出其文件名的绝对路径 C:\python_fullstack_wen\day24\wen """ import ti

面向过程的编程思想

1.面向过程的编程思想 核心是'过程'二字,过程即解决问题的步骤,即先干什么,在干什么.... 基于面向过程编写程序就好比在设计一条流水线,,是一种机械式的思维方式. 2 总结优缺点: 优点:复杂的问题流程化,进而简单化 缺点:修改一个阶段,其他阶段都有可能需要作出修改,牵一发而动全身,即扩展性极差. 应用:用于扩展性要求低的场景 原文地址:https://www.cnblogs.com/lx3822/p/8684673.html

iOS runtime探究(一): 从runtime开始理解面向对象的类到面向过程的结构体

你要知道的runtime都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639205 本文主要讲解runtime相关知识,从原理到实践,由于包含内容过多分为以下五篇文章详细讲解,可自行选择需要了解的方向: 从runtime开始: 理解面向对象的类到面向过程的结构体 从runtime开始: 深入理解OC消息转发机制 从runtime开始: 理解OC的属性property 从runtime开始: 实践Category添加属

面向对象编程和面向过程的区别

面向对象和面向过程的区别,实在是难用一两句话说明白. 面向过程是一种直接的编程方法,它是按照编程语言的思路考虑问题.尤其是想C语言这种过程式语言,它就是通过顺序执行一组语句来实现一个功能,这些语句的执行过程就是整个程序.不同的语言解决同一个问题的过程是不一样的. 面向对象是一种抽象度更高的编程方法.它把眼光集中在了要解决问题本身而不是语言上.它的目标是使模块的抽象度更高,可复用性更好.面向对象的目的就是可复用. 举个例子,比如我们要写一个计算器程序.这个计算机目前只要求有加减乘除四种运算. 用面

面向对象编程与面向过程变成之间的比较

参考地址:http://mp.weixin.qq.com/s/ZZMA8mBoMvq8IRiX7deQbA 以一个例子(如打扫房间)来说明面向过程和面向对象在程序流程上的不同之处. 面向过程就是将编程当成是做一件事,要按步骤完成,每一步就是一个过程.比如某个人要打扫房间这件事,需要先取扫帚,然后仔仔细细打扫每一处,最后将扫帚放回原地. 代码实现过程: 输出结果: 面向对象就是将编程当成是一个事物(相当于一个整体的东西),对外界来说,事物是直接使用的,不用去管他内部的情况.而编程就是设置事物能够做