面向对象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 ...
随机推荐
- PageOffice 6 保存数据区域数据同时保存文档
在实际应用中,例如在线签订合同的时候,合同的签订日期,合同号等等这些信息既要保存到数据库,合同签订后又要将整个合同文件保存起来.这时候就需要用到PageOffice的保存数据区域数据的同时保存整个文件 ...
- MySQL日志文件简记
日志文件 binlog binlog主要记录了MySQL数据库执行了更改的所有操作,主要用来做主从复制,数据恢复 记录模式: Statement模式:每一条回修改数据的sql都会被记录在日志中 Row ...
- 开源项目分享:ChatGPT 控制台聊天应用
开源项目分享:ChatGPT 控制台聊天应用 分享一个我最近完成的一个小应用,一个ChatGPT 的控制台聊天应用,大家都在搞AI,我也来玩一玩,顺便分享到社区,有兴趣的小伙伴可以去我的github主 ...
- 分布式缓存NewLife.Redis
NewLife.Redis 是一个Redis客户端组件,以高性能处理大数据实时计算为目标. Redis协议基础实现位于Redis/RedisClient,FullRedis为扩展实现,主要增加列表结构 ...
- 008. gitlab代码克隆与推送
推送配置 gitlab需要推送的客户端sshkey添加到gitlab服务器中 node1 推送配置 centos node1: [root@node1 ~]# cat ~/.ssh/id_rsa.pu ...
- 几个公司wiki知识库调研和感悟
@ 目录 需求背景 具体实现 经验&吐槽 小结 需求背景 公司准备做一个知识库,我这边调研了几个项目,如下 第一个是我们耳熟能详的confluence,但是好想要收费,先搁置 第二个是mind ...
- 使用nvm安装以及管理多版本node教程
安装nvm.node.npm 下载nvm安装包,推荐使用1.1.7,我个人使用1.1.8会有中文乱码的报错 点击exe文件,注意修改nvm的安装根目录以及node的安装根目录,后者是以后管理多版本no ...
- C#.NET 国密 BASE64编码的私钥提取16进制私钥 (锦州银行、建行轻应用)
C#.NET 国密 BASE64编码的私钥提取16进制私钥 (锦州银行.建行轻应用), 从BASE64编码的公钥中提取16进制字符串公钥, 从BASE64编码的私钥中提取16进制字符串私钥, 锦州银行 ...
- ubuntu server 安装慢 安装卡
无论是桌面版本ubuntu,还是server 版本,都喜欢在安装过程中联网下东西: 默认的软件包镜像地址下载非常慢,你自身的网络再差点,可能会安装好几个小时. 解决方案: 方案1: 安装前拔网线. 方 ...
- 爬虫、Selenium、webUI自动化使用PIL+pytesseract识别验证码以及识别错误解决方案
背景:大家在做爬虫或web端的UI自动化时会经常遇到的就是验证码,那怎么识别这验证码也是我们目前遇到的难题.(在这里咱们先不讨论:1.点击类的验证 2.滑动类的验证 3.中文类的验证)简单地说,计算机 ...