面向对象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 ...
随机推荐
- 5G MEC 之本地分流实现方式
目录 文章目录 目录 前言 LADN ULCL IPv6 Multi-homing(BP) 典型应用场景 前言 最近同事发表了一片非常棒的文章,笔者在此之上进行了补充,转发至此与大家分享. 本地分流作 ...
- saltstack web 平台开发
运维平台参考: https://wrapbootstrap.com/
- 零代码零硬件玩转华为云IoT,基于设备联动实时监控设备
本文分享自华为云社区<一键守护,实时洞察:华为云IoT设备联动,智能感知设备状态变化,精准触发告警通知[零代码零硬件玩转华为云IoT]>,作者:周周的奇妙编程. 前言 在前面我们已经体验过 ...
- JavaScript 中 toString 的奇妙使用
JavaScript 中的toString()方法,我们通常会一些其他类型的变量,转为字符串类型.但这里还有一些其他奇妙的用法. 不同的类型调用 toString() 会得到不同的结果.我们来一一分析 ...
- go encoding/json 替代者
https://github.com/json-iterator/go 可以替代官方包encoding/json 提升json编码和解码效率
- 【分享】FFmpeg桌面神器,集多种功能于一身,超级好用,不用命令行!
在媒体处理上,市面上有很多软件可以选择,在众多软件里面 FFmpeg 是比较独特的一款,直接选择 FFmpeg 硬核命令行工具的朋友相对较少,大多时候只是被集成在各样的软件里,如果单独拿出来使用,不少 ...
- WPF 设置第二次打开程序直接弹出第一次打开的程序
激活已经打开窗口函数[DllImport("user32.dll")]private static extern bool SetForegroundWindow(IntPtr h ...
- 8.24考试总结(NOIP模拟47)[Prime·Sequence·Omeed]
时间带着明显的恶意,缓缓在我的头顶流逝. T1 Prime 解题思路 成功没有签上到... 一看数据范围 \(R-L+1\le 10^7,R\le 10^{14}\) ,这肯定是判断范围内的数字是否可 ...
- C#.NET HTTP Request 跳过自签名证书校验。
public static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain ...
- 使用 OpenTelemetry 构建可观测性 01 - 介绍
毫无疑问,在过去几年里,你可能已经多次听到过可观测性这个词.对于很多人来说,很难理解这个词的真正含义.对许多人来说,他们错误地将其等同于"监控".虽然可观测性的根本定义以及它所包含 ...