java-通俗解释:什么是面向对象?与面向过程区别在哪?

问题描述

通俗解释:什么是面向对象?与面向过程区别在哪?

什么是面向对象?与面向过程区别在哪?用通俗的话语解答,不要理论性的专业术语,最好是拿生活中的熟知的事物去类比解释!!!多谢~

解决方案

面向对象和面向过程不矛盾,事实上,Java也是面向过程的编程语言。

面向过程是指,允许在程序中定义函数或者方法。也许你觉得奇怪,难道还有语言不能定义函数方法么?早期的basic就不可以,只能用跳转来实现函数调用。

面向对象更近一步,允许你将“过程”(函数、方法)以及它们的上下文相关的数据封装成对象,同时对象允许通过继承和派生以及类型限定符限制开发者对它的一部分的进行访问和修改。

我不想把面向对象和生活中的事物去联系,固然它们有些似是而非的联系,但是这对于你理解编程的本质毫无意义,甚至会误导你。面向对象的本质不是模拟现实世界的对象,而是为了开发强壮、简单和可维护的代码。

解决方案二:

将面向对象说的通俗易懂的坏处就是看上去是通俗易懂了,其实你懂的根本就是错的东西,而且这使得新手完全误入歧途。

面向对象的三大特性(封装、继承、多态),核心一条是封装,不允许你访问私有的函数和成员这个相信很多人都理解,其实还有一层,就是不允许开发者随便修改代码,因为随意修改代码和随意修改变量的值一样是灾祸之源。

在面向过程中,如果你发现程序不合适了,需要增加功能,你会怎么做?你会直接去修改某个函数的代码,但是如果这个函数不是你写的,你不完全理解,这么做会可能出问题。另一个问题是,你不知道现有的代码是怎么调用这个函数的。换一句话说,你修改了它,你这里是满意了,别的地方的调用呢?会不会有问题?

那么怎么办?你想,这不简单,我把这个函数拷贝一份,在拷贝上修改,不动原来的函数。这样问题又来了。如果原来函数的编写者发现了一个bug,他修复了,可是你拷贝的那份的bug不会自己修复,除非修改的时候要知道这代码都被拷贝了几份,一一修改。

面向对象是怎么解决这个问题的呢?开发者通过编写一个类,实现一个功能,这个类中一些方法被定义为虚拟方法。

当你需要修改这个方法适应新的需求的时候,你不是直接去修改这个类的源代码,而是派生一个类,去重写这些允许你自定义的虚拟方法,这样你就在可控的范围内自定义了原来的程序。

但是因为别的地方调用的是基类的类型,而你并没有修改基类的代码,所以不会造成原先的代码出问题。而且,基类的原作者如果发现一个非虚拟的方法有bug,他直接修改就好了。

因为你的类是继承的这些代码,而不是拷贝粘贴的,所以修改一处,就全部变过来了。

解决方案三:

至于“多态”,很多人,特别是培训班和大学里面的老师,误人子弟地将它和派生类重写方法划等号。其实多态的意思是,一个概念多种表现形式。

对于Java,函数重载、派生类型和重写、泛型都是多态的体现。多态有什么用?显而易见,简化了程序调用者学习的负担。因为掌握一个概念,他可以调用的是一系列的代码。

他知道一个函数名,那么他可以调用不同的函数重载版本。List<String>List<int>虽然是两个类型,但是相信没有人会了前者,后者还不会的。

解决方案四:

面向对象,也就是相当于抽象建模,然后将一个个的事物封装成一个共性体,然后直接使用共性体的方法过程。面向过程就是指完成功能,以功能为主线,不进行抽象,一个功能一个过程。面向对象相对来说,层次明显,架构分明,理解起来比较容易,一般面向对象中肯定会包含面向过程的。以上是个人理解。。。

解决方案五:

http://zhidao.baidu.com/link?url=Gdr2Co_o3EzF-m9oXVk1yDhbKGJkVgNq83doO2QebLnw5Yp70U6WfULQkDwVGWQf8i3fbeIWgqRw0RKKng8NWK

解决方案六:

人.吃饭(),这是面向对象
张嘴->往嘴里放东西->咀嚼->吞下去,这是面向过程
第一种注重的是“人”这个对象,第二种注重的是”吃“这个过程。
但实际上"人.吃饭()"这个方法底层也是靠“吃”这个过程实现的。

解决方案七:

面向对象是将现实中的事物对象化,比如人是一个对象,狗是一个对象,假如人牵着狗散步是一段程序,那么执行人牵着狗的内部却是顺序执行。顺序执行通俗的说就是面向过程,其实面向对象之中是包含面向过程的思想。但是假如是面向过程来实现人牵着狗散步。就必须先先创建人和狗。但是创建人和狗会顺序创建,并不会提取他们的特性对象化。所以说他的重用性很低。如果我在执行一段人牵着狗,假如这只狗不是上面那个狗,比如,上面是贵宾犬,这个是阿拉加斯。那么因为我不是面向对象编程,并没有提取狗的特性,那么在执行这个人牵着狗,就得重新在这一遍然后顺序执行。

解决方案八:

面向对象是对事物的抽象
你可以说苹果是水果,但是你不能说水果是苹果,这里水果就是抽象的,苹果就是具体的,抽象--具体,就是面向对象。
面向过程就是把一系列的操作写出来,程序是按照你写的过程执行的

解决方案九:

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

解决方案十:

给你说简单点,面向过程:我要坐车回家,那么我就需要站路边,伸手招车,上车,到家后下车,付钱,等等的这些操作都是坐车回家的过程、步骤。这个就是面向过程。而面向对象就像游戏里的回程卷轴,按一下就使用,然后直接到家了,这个卷轴就是将前面打车回家的过程的封装

时间: 2024-10-29 14:13:58

java-通俗解释:什么是面向对象?与面向过程区别在哪?的相关文章

面向对象与面向过程有什么区别

问题描述 面向对象与面向过程有什么区别 面向过程难道就是面向对象的执行过程吗?这感觉有点像按词解释新手请教 解决方案 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为. 例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1.开始游戏,2.黑子先走,3.绘制画面,4.判断输赢,5.轮到白子,6.绘制画面,7.

PHP中的面向对象和面向过程

对象|过程 简介"真正的天才具有正确评价不确定的,有风险的和矛盾的信息的能力.--邱吉尔" 使用许多编程语言时,你通常只能使用面向对象或面向过程二者之一的编程方式.而在PHP中,你可以自由选择或混用.目前绝大多数PHP程序员使用面向过程的方式,因为解析WEB页面本身就非常"过程化"(从一个标签到另一个标签).在HTML中嵌入过程处理代码是很直接自然的作法,所以PHP程序员通常使用这种方式. 如果你是刚接触PHP,用面向过程的风格来书写代码很可能是你唯一的选择.但是如

php面向对象与面向过程两种方法给图片添加文字水印_php实例

目前绝大多数PHP程序员使用面向过程的方式,因为解析WEB页面本身就非常"过程化"(从一个标签到另一个标签).在HTML中嵌入过程处理代码是很直接自然的作法,所以PHP程序员通常使用这种方式. 如果你是刚接触PHP,用面向过程的风格来书写代码很可能是你唯一的选择.但是如果你经常上PHP论坛和新闻组的话,你应该会看到有关"对象"的文章.你也可能看到过如何书写面向对象的PHP代码的教程.或者你也可能下载过一些现成的类库,并尝试着去实例化其中的对象和使用类方法--尽管你可

跪求大神解答-面向对象与面向过程的区别?

问题描述 面向对象与面向过程的区别? 什么是面向对象?什么是面向过程?两者有什么区别?有什么优缺点?两者都有什么应用? 解决方案 ? ?面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为. 例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1.开始游戏,2.黑子先走,3.绘制画面,4.判断输赢,5......

&lt;一&gt;面向对象分析之面向对象和面向过程

《面向对象的思考过程(原书第4版)》一1.3 过程式编程与面向对象编程

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第1章,第1.3节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问"华章计算机"公众号查看. 1.3 过程式编程与面向对象编程 在我们深入了解面向对象开发的优势之前,先考虑一个更基本的问题:究竟什么是对象?这既是一个复杂的问题,也是一个简单的问题.它复杂是因为学习任何一种软件开发方法论都非易事.它简单是因为人们已经在按对象的方式进行思考.例如,当你看到一个人,你会把他

算24点程序:面向过程与面向对象的C++

1.概述 给定4个整数,其中每个数字只能使用一次:任意使用 + - * / ( ) ,构造出一个表达式,使得最终结果为24,这就是常见的算24点的游戏.这方面的程序很多,一般都是穷举求解.本文介绍一种典型的算24点的程序算法,并给出两个具体的算24点的程序:一个是面向过程的C实现,一个是面向对象的java实现. 2.基本原理 基本原理是穷举4个整数所有可能的表达式,然后对表达式求值. 表达式的定义: expression = (expression|number) operator (expre

面向过程,面向对象,函数式对同一个问题的思考方式

我之所以对函数式代码感兴趣是因为函数式代码富有表现力,可以使用简短.紧凑的代码完成工作,同时能对特定的问题给出优雅的解决方案.现代的编程语言不约而同的朝着面向对象.函数式.动态.解释执行的方向发展,例如Ruby,Swift.而另一些语言则更加强调函数式编程,如F#,Scala,这种语言有着强大的类型推断系统,编写的代码洁程度则令人叹为观止. 在F#编写一个两个数相加的函数,在F# Interactive中输入: 1 let add num1 num2=num1*num2;; F# Interac

面向过程与面向对象的简单比较(个人心得)!

比较|对象|过程|心得 最近打开我以前做的一个项目,系统结构中使用了4个包含文件对登录用户的权限进行判断,属典型的面向过程写法,可能很多朋友以前都写过这样的代码.我把这些代码整理了一下,写成一个权限判断的简单类,以比较一个面各对象和面向过程之间的差异.代码如下(其中省略了部分代码). sesson1.php<?php/* * 功能:取得用户的cookie,以判断用户是否已经登录,并是否具有系统管理员权限 * 程序员:xiangli * 日期:2002-07-19 */ $UserName = $