面向对象VS面向过程
什么是面向对象呢?

对于接触或者熟悉一些编程知识的同学来讲,“面向对象”这个词儿一点儿也不陌生。经常听说XX语言是完全面向对象的编程语言,比如C#、Java这些便是完全面向对象的编程语言,又比如C++既是面向过程的编程语言,也是面向对象的编程语言。那么到底二者有什么区别呢,哪个会更好呢?接下来,我结合一个简单的例子来试着阐释我个人的理解。
首先,面向过程与面向对象的概念是解决问题的两种不同思路,一般来讲,面向过程的解决问题思路,比较容易理解,它的理念便是,遇到了一个问题,那么我们要去解决它,我首先做什么,再做什么,接着做什么,最后做什么,所有都完成,那么这个问题就解决了。而面向对象的思路则相对抽象得多,它的理念便是万事万物,都是一个个的对象(也可以说是示例),同样,当我们遇到了一个问题,那么我们采用面向对象的思路来解决问题的话,我们就会抽象和归纳出解决这个问题需要的哪几种事-物;这里的事就是物的动作,特点,数据等描述它和它的行为的抽象。再编程领域,这个事-物的结合体便是类的概念。
下面我用2中不同的思路来解决“把大象放进冰箱的问题”。
(一)面向过程:
便是把要解决的这个问题按照逻辑顺序一步步的完成即可,如下图:

(二)面向对象:
提到面向对象,它的重要标志便是,类的概念。

那么,看到这里,不少同学问题来了,一个件简单的问题,明显面向对象的解决问题思路复杂太多,那么为什么还要用这样的思路来解决问题呢?
我来尝试着回答这个问题:
- 1、从面向对象的概念诞生时间也在面向过程之后,也可能看出来,面向对象是通过面向过程进化和抽象提炼出来的。
- 2、从上第二图可以看出,在面向对象的解题思路中,最后仍然用的面向过程,一步步处理。所以某种意义上说,面向过程是面向对象的祖先,面向过程是面向对象的基础;
- 3、我们所在的世界以及宇宙是非常复杂的,你所碰到的问题也是无限的,而且很多类似,很多重复的部分;那么我们能不能把一份重复的事-物归纳在一起,给他画一个蓝图,以后遇到一样的问题,需要出来,我照着不同的蓝图来拼凑解决问题呢?这便是面向对象的一大重要特征——封装;
- 4、我们进一步还会发现,不同的蓝图之间,不是完全没有关系的,而是相互包含和支撑的;比如,岩土、水和空气的蓝图组成了地球,而地球,月球、太阳和8大行星便组成了太阳系,而太阳不过是银河系无数恒星中的其中一颗;那么地球上的岩土、水和空气的特征是不是便是地球的特其中一部分;太阳是不是与银河系内其他的恒星具有类似的特点,同时,恒星的特征是不是银河系的特征其中一部分;这些个概念便是面向对象的第二大特征——继承;
- 5、上面的把大象放进冰箱的问题,你看哈,冰箱具有“把东西放进去的”这样一个特质,那么今天能放大象进去,明天我能不能放头牛进去,后天我放一只鸡进去,对吧,至于放什么进去冰箱并不关心,可以说,万物都能放哈。 这便是面向对象的第三大特征——多态;
综上,是不是突然发现,用面向对象的思路来理解这个世界,是不是更贴切。我们是人类,你我只是这个人类中的一个个体,这个个体是按照人类这个蓝图(模板)来创造的。这边是对我们真实世界的最接近的描述。
所以,其实我们认识世界一开始便是面向对象的,我们通过人脑不断地自然的抽象各种模版出来,从而认识了这个纷繁复杂的世界。这让我想起了小学二年级的一遍课文——《小蝌蚪找妈妈》,几十年了,依然在小学的课本上。小蝌蚪是怎么认识世界的,一开始遇到的鲤鱼妈妈告诉它,四条腿的宽嘴巴的便是你的妈妈。 好了,小蝌蚪便在内心归纳总结,谁有四条腿和一个宽嘴巴便是青蛙妈妈。接下来,它依据这个特征错误地误认为乌龟是青蛙妈妈。乌龟高速它,头顶2个大眼睛,绿色的皮肤便是你的妈妈。最后小蝌蚪加上这两个特征,总共4个特征就找到了青蛙妈妈。 这不就是一个面相对象中一个类的定义过程吗?而类便是面向对象的承载和具体体现。
所以说面向对象和面向过程二者缺一不可,而人类在解决探索世界的时候总是需要不断地抽象、归纳、总结,这个也就是“建模”,某种意义上讲,面相对象似乎更能很好地描述咱们这个复杂的世界。
为了更好的理解我们的时间,为了更好的解决复杂的问题,为了真正的学会一门编程语言,我们一定要要好好地,深入的理解面向对象的思想。

面向对象VS面向过程的更多相关文章
- 大话JS面向对象之扩展篇 面向对象与面向过程之间的博弈论(OO Vs 过程)------(一个简单的实例引发的沉思)
一,总体概要 1,笔者浅谈 我是从学习Java编程开始接触OOP(面向对象编程),刚开始使用Java编写程序的时候感觉很别扭(面向对象式编程因为引入了类.对象.实例等概念,非常贴合人类对于世间万物的认 ...
- 面向对象与面向过程 $this的注意事项和魔术方法set和get
一.面向对象与面向过程的区别: 二者都是一种思想,面向对象是相对于面向过程而言的.面向过程,强调的是功能行为.面向对象,将功能封装进对象,强调具备了功能的对象.面向对象更加强调运用人类在日常的思维逻辑 ...
- JavaSE——面向对象与面向过程、类与对象、(属性、方法、构造器)等
一:面向对象与面向过程 二者都是一种思想,面向对象是相对于面向过程而言的. 面向过程: 1.面向过程思想强调的是过程(动作). 2.在面向过程的开发中,其实就是面向着具体的每一个步骤和过程,把每一个步 ...
- Java基础知识强化20:面向对象和面向过程的思想对比
面向对象与面向过程的区别 1. 与面向对象编程思想相比较的,往往是面向过程的编程思想,其实在我来理解,两者并不冲突,原因是面向对象的编程也必须使用面向过程的思维来实现具体的功能,所以我认为,两者的区 ...
- python的面向对象和面向过程
一.面向对象和面向过程的区别: a.面向过程: 1)根据业务逻辑从上到下写代码 2)开发思路是将数据和函数按照执行的逻辑顺序组织在一起 3)分开考虑数据与函数 定义性文字: 面向对象编程(Object ...
- 面向对象和面向过程,python中的类class,python中程序的入口——main方法,
1.程序入口,让main显现出来: print(__name__)#__name___是模块中的隐藏字段,当前模块运行的函数名 if __name__ == __main__ __main__() # ...
- PHP面向对象和面向过程
编程界不论是PHP.Python都有这么两种编程思想,oop面向对象.pop面向过程,这两种在功能上没有多大区别,但是在代码编写上却有很大区别.今天就记录一下面向对象和面向过程的优点.缺点.定义.实现 ...
- Day5-1 面向对象和面向过程
摘要: 类的定义 类的增删改查 对象的增删改查 对象的查找和绑定 面向对象和面向过程的区别: 1.面向过程就像是工厂的流水线,按部就班的有序的工作. 优点:把复杂的问题简单化 缺点:可扩展性差.一个步 ...
- python面向对象和面向过程介绍与区别
一.面向对象和面向过程的区别: a.面向过程: 1)根据业务逻辑从上到下写代码 2)开发思路是将数据和函数按照执行的逻辑顺序组织在一起 3)分开考虑数据与函数 定义性文字: 面向对象编程(Object ...
- Python 面向对象和面向过程对比
# 大象装冰箱 # 脚本, 此时代码是最简单的. 不需要构思整个程序的概况 print("开门") print("装大象") print("关门&qu ...
随机推荐
- 智能勘探 | AIRIOT智慧油田管理解决方案
石油勘探和开采地处偏远地区,涉及面广且生产规模大.特殊的作业环境下,使得工作人员作业条件艰苦,仅靠人工值守难度很大,不可避免的遇到一系列硬核挑战: 1.设备维护难度较高: 2.采油厂分布地域广.分 ...
- PHP做api开发时,签名验证你是怎么设计的
开发过程中,我们经常会与接口打交道,有的时候是调取别人网站的接口,有的时候是为他人提供自己网站的接口,但是在这调取的过程中都离不开签名验证. 我们在设计签名验证的时候,请注意要满足以下几点: 可变性: ...
- [NOIP2000 提高组] 单词接龙
传送锚点:https://www.luogu.com.cn/problem/P1019 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以 ...
- HTML——input之复选框
在 HTML 中,把 <input> 标签中的 type 属性设置为 checkbox 可以实现多选框的效果.具体语法格式如下: <input type="checkbox ...
- webview2 示例 Samples Selenium
https://github.com/MicrosoftEdge/WebView2Samples https://learn.microsoft.com/zh-cn/microsoft-edge/we ...
- linux ssh key 登录
vim /etc/ssh/sshd_config #禁用root账户登录,非必要,但为了安全性,请配置 PermitRootLogin no # 是否让 sshd 去检查用户家目录或相关档案的权限数据 ...
- 《剑指offer - 题目1》
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- NOIP模拟65
T1 网格图 解题思路 60pts 就是个zz做法..(我考场上造了一个 \(500\times 500\) 的 X,一看挺快,就以为 \(n^4\) 可以切,然而..) 正解有一点难度,对于每一个节 ...
- js 生成pdf
最简洁的代码 <script src="js/html2canvas.min.js" type="text/javascript" charset=&qu ...
- 深入解读Prometheus Adapter:云原生监控的核心组件
本文详述了Prometheus Adapter的部署与配置,通过三个实践案例展示其在Kubernetes环境中的应用,帮助用户实现基于自定义指标的自动扩展和跨集群统一监控. 关注作者,分享AI全维度知 ...