鱼C论坛

 找回密码
 立即注册
查看: 3272|回复: 19

[小天才资讯] 面向对象和面向过程你真的懂吗?

[复制链接]
发表于 2019-1-22 15:30:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2019-1-27 16:22 编辑

giphy.gif


学过编程的人,都会听过:
面向对象和面向过程


那么请问,鱼油真的懂这两个概念吗?

如果讲不出来个所以然,也不知从何说起,只能说:“你懂啦...”

那么,推荐看一下这篇帖子。

接下来,我们通过鱼油“自学《零基础入门学习Web开发》(HTML5 & CSS3)”的例子,来讲清楚这两个概念。

giphy.gif


正式开始前,我们要达成一个共识
游客,如果您要查看本帖隐藏内容请回复





面向过程:(procedure oriented programming 即:POP)

何为面向过程?

Wiki 定义:
主要采取程序调用(procedure call)或函数调用(function call)的方式来进行流程控制。流程则由包涵一系列运算步骤的程序(Procedures),例程(routines),子程序(subroutines), 方法(methods),或函数(functions)来控制。在程序运行的任何一个时间点,都可以调用某个特定的程序。任何一个特定的程序,也能被任意一个程序或是它自己本身调用。


通俗一些:
分析出解决问题所需要的步骤,然后用函数把这些步骤依次实现,然后依次调用。


回想一下,在我们的学习和工作中,试图去实现某项功能或完成某项任务时,是否会不自觉的列出完成步骤
(如果没有,建议以后试着步骤化解决问题)

而当我们按着我们罗列的步骤去解决问题时,实质上就是按照面向过程的思想去解决问题。

我们罗列的步骤就是过程,按照步骤解决问题就是面向过程。

传统的面向过程的编程思想总结起来就八个字——自顶向下,逐步细化

实现步骤如下:
  • 将要实现的功能描述为一个从开始到结束的连续的步骤(过程);
  • 依次逐步完成这些步骤,如果某一步的难度较大,又可以将该步骤再次细化为若干个子步骤,以此类推,一直到结束得到想要的结果;
  • 程序的主体是函数,一个函数就是一个封装起来的模块,可以实现一定的功能,各个子步骤往往就是通过各个函数来完成的,从而实现代码的重用和模块化编程;


说了这么多,我们来点实际案例,通过流程图来模拟自学的步骤(不唯一):
WX20190124-170756.png


通过流程图我们依次分析好了学习的步骤,接下来就是按部就班执行了。

所以面向过程,就真的是面向过程,一旦过程设计好,代码实现就好说啦。




面向对象:(object oriented programming 即:OOP)

何为面向对象?

Wiki 定义:
具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象


通俗一些:
编程的时候尽可能的去模拟真实的现实世界,按照现实世界中的逻辑去处理一个问题,分析问题中参与其中的有哪些实体,这些实体应该有什么属性和方法,我们如何通过调用这些实体的属性和方法去解决问题。


在咱们的真实世界中,,任何一个操作或者是业务逻辑的实现都需要一个实体来完成。

也就是说,实体就是动作的支配者,没有实体,就肯定没有动作发生。

让我们看看上面流程图中有哪些动词
购买、观看、完成、提问、学习


有动词就一定有实现这个动作的实体。

所谓的模拟现实世界,就是通过计算机语言编程来解决相关业务逻辑,并且和真实的业务逻辑的保持一致。

需要使每一个动作的背后都一个完成这个动作的实体。

因为任何功能的实现都是依赖于一个具体的实体的“动作”。

这可以看作是一个又一个的实体在发挥其各自的“能力”并在内部进行协调有序的调用过程。

当采用面向对象的思想解决问题时,可分为下面几步:
  • 分析哪些动作是由哪些实体发出的;
  • 定义这些实体,为其增加相应的属性和功能;
  • 让实体去执行相应的功能或动作;


采用面向对象的思想,解决自学问题,大体上也有如下步骤。

第一步:找出实体和对应的动作。

大体可分为:
  • 小甲鱼录制好教程
  • 鱼油自愿买教材
  • 鱼油学习视频
  • 鱼C论坛提供学习支持
  • 鱼油提问
  • 大神提供支持


于是,在整个过程中,一共有四个实体:
小甲鱼、鱼C论坛、鱼油、大神


在现实中的一个具体的实体,就是计算机编程中的一个对象。

第二步:定义这些实体,为其增加相应的属性和功能

属性性就是实体在现实世界中的一些特征表现。

例如:
猫的属性:名字、性别、品种等
手机的属性:品牌、价格、尺寸、芯片等


功能就是能完成的动作,在面向对象的术语中,动作就叫作方法或者函数。

例如:
猫的功能(动作):吃饭、睡觉、晒太阳、卖萌等
手机的功能(动作):打电话、发短信、拍照、打游戏、视频、看电影等


然后可以将属性和功能整合到一起,变为一张可视化的图片:
Snip20190125_63.png


现在我们将例子中的4个实体(小甲鱼、鱼C论坛、鱼油、大神)的属性和功能,画成上面的图。

小甲鱼:
1.png


鱼C论坛:
3.png


鱼油:
2.png


大神:
4.png


属性并不唯一,上面例子中只列出最具代表性的值。

第三步:让实体去执行相应的功能
  • 小甲鱼完成教程的录制并发布,配套教程变为实体书供有需要的鱼油食用。
  • 鱼油按照需要自学相应的教程,如有问题去论坛相应板块提问。
  • 鱼C论坛运行良好,为广大鱼油学习保驾护航。
  • 论坛上大神看到鱼油提问,进行热心解答。


所以说,面向对象主要针对功能,实质上可以理解为“面向实体”,所以经常听到老鸟们说(PS:所以程序猿永远都会有对象...):
万物皆对象。


只要理解了我们上面找实体的属性和功能的基本操作后,“抽象、封装、继承、多态”,等概念都很好理解。




简单总结

回到一开始说的,二者并没有“你死我活”的对立之分,日常开发中往往同时存在。

面向过程比较符合初学者的认知观,一步一步有顺序的抵达终点。

面向对象则不会一上来就注重细节,而是关心实体的属性和功能。

用最简单的话来解释就是:
面向过程:流水线
面向对象:模块化


流水线 = 分解问题 + 逻辑为先 = 先细节,再整体。

模块化 = 多态 + 继承 = 先抽象,后具体。

最后想说的,二者也没有高下之分,一个精深,一个博大:
精深:面向过程,思考到事物发展的每一步,细如发丝,考虑到任何一种可能发生的情况,一步步的执行,判断,直至事物的结束(深邃)。
博大:面向对象的博大,将某一类事物的共同属性进行抽象,将其所有的属性,行为按功能集合。


当然,当我们被项目经理催着上交项目时,不要再选择纠结了,哪个能让你更快的完成项目就用哪个吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-2-20 11:07:49 | 显示全部楼层
e
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-3 16:59:21 From FishC Mobile | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-10 10:20:41 | 显示全部楼层
6666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-5 14:27:59 | 显示全部楼层
学习~~~~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-18 21:04:19 | 显示全部楼层
查看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-14 08:25:18 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-22 15:31:59 From FishC Mobile | 显示全部楼层
进来学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-25 14:15:59 | 显示全部楼层
a
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-16 21:28:41 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-9 14:12:37 | 显示全部楼层
学到类和对象这有点晕了,学习学习。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-18 11:51:03 | 显示全部楼层

学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-21 13:54:51 From FishC Mobile | 显示全部楼层
面向对象和面向过程你真的懂吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-2 06:18:40 From FishC Mobile | 显示全部楼层
嘻嘻嘻
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-10 08:23:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-8 09:30:30 | 显示全部楼层
棒棒棒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-23 10:05:07 | 显示全部楼层
真想知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-29 16:55:45 | 显示全部楼层
我来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-22 12:04:46 From FishC Mobile | 显示全部楼层
蟹蟹
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-25 14:19:54 | 显示全部楼层
有共识,学习来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 18:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表