简说面向过程与面向对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简说面向过程与面向对象相关的知识,希望对你有一定的参考价值。

昨天白天,因为在室外活动,无事可做,所以我思考了一天,在想怎么才能比较清晰的向人解释这两个概念.所以我对这两个概念的字面意思做了一下详细的解释.没想到,这可能真的会帮助我们非常简单的理解这两个概念.

 
面向:从字面上理解面向,就是我们的脸对着的地方,引申为我们能看到.
过程: 过程是事物从开始,到发展,到结束的整个经历 
 
那么面向过程就是:我们能看到, 一个事物从 开始->发展->结束.
 
这对于我们写程序的人来说,可能会有感触,因为一开始我们写程序时.都是按照事件的发展.去安排计算机,一步一步的做,一直到有了最终结果.
 
所以面对过程的程序:让我们  "看到" 的就是一个事件从开始.到发展,到结束的整个经过.
面向过程”是一种是事件为中心的编程思想。就是分析出解决问题所需的步骤,然后用函数把这写步骤实现,并按顺序调用。
 
 
 
对象:指行动或思考时作为"目标"的"事物"(对象)。
 
面向对象:我们看到, 一个对象. 
 
 
从字面上,我们可能会感到迷茫.但是,我们把具体对象代入这句话,我们会立刻清晰起来.
 
例如, 我们看到,一个LED.
 我们竟然看到的是一个具体的事物. 一个具体的LED.
 
这个LED有我们"关注"的属性: 如它连接在哪个io上.它此时是亮还是灭..等等一切,我们想"关注"的属性与我们所希望的行为:如,它可以灭,它可以亮,它可以闪烁等等..
 
我们对待这个事物的态度,是"使用"它.
 
我们对待很多这样的"对象"时的态度,就是"使用" 它们构造出我们需要的.
 
视野的转换.让我们编程的思维也发生了变化.比如,面对过程编程方法,我们看到的是一步步的操作.一直达到目标
 
而面对对象思考过程,我们看到的是对象(或零件),我们用这些对象或零件去组合,去构造目标.
 
 
对象,指行动或思考时作为"目标"的"事物",那么,我们对目标观察,就会看到"目标事物"(对象)的一些特性.我们会使用我们所"关注"特性来描述这个对象,我们会把所有具有相同数据与行为的对象,称为同类(对象),类的概念便由此而生.
 
"类"是用来描述,某些对象,具有的相同特性.
 
比如我们看到这样 一个事物:
数据部分:
身高约140-200厘米左右,一个脑袋,两只眼睛,有四肢,
 
行为部分
会两腿行走,会使用火.会思考
 
当听到这些东西时候,我们头脑里一下跳出一个概念那就是 "人"
 
"人",就是这些事物的抽象
 
而当我们谈论"人"这个概念时,我们也可以清晰的知道这是一种 一个脑袋,两条腿,会说话会思考的动物.

 在人类中,有一个对象叫"五号智能".那么,"五号智能"就是人类的一个实例(对象),
 
现在来拿我们熟悉的东西来比喻
 
有一种数据,32位处理器时.它只占四字节空间,它只保存整数.它可以表示负数与正数还有0.
 
这种类,我们称它为int 类.
 
int a; 便定义了一个名字是a的实例(对象)
 
OK,现在我们已经会使用数据与行为去描述一个对象了,那么现在我们谈谈面向对象的好处.
 
我们还是拿LED来举例,现在我要写出一个LED闪烁的程序.用面对对象的思想方式.
首先我们要做的就是描述这个LED的特性.
我们这样描述:
LED灯.它会把自己点亮,也会把自己关闭.
OK,LED灯的描述就这么多.我们用C语言把LED闪烁写出来
 
 
void ledopen();
void ledclose();
 
就这么简单的两句.LED我们已经描述完成.现在开始写闪烁.
 
 
int i=500;
while(1){
ledopen();
while(i--);
ledclose();
}
完成了,这就写完了闪烁.
好处呢..好处是,就算51的led我不知道怎么写,但是,只要有一个会写51单片机的人,把ledopen这个函数实现出来.这个程序一点也不用修改,就可以直接使用了.就算移植到arm上也是一样的
 
面向对象编程,第一个好处,让我们不必去了解具体实现,只"针对抽象"(面向对象)编程.这样使的我们代码的可移植性大大提高.
 
这里唯一要注意的是,我们用我们所"关注的特性"去描述对象,所以LED的数据部分,没有在我的关注之下,我只关注了它的行为.
 
虽然对象的描述包括数据与行为.但我们不需要它的所有特性.我们只需要我们所"关注"的.

 

以上是关于简说面向过程与面向对象的主要内容,如果未能解决你的问题,请参考以下文章

面向对象与面向过程

面向过程与面向对象

面向过程与面向对象的本质区别-对面向过程与面向对象的一点感悟

JavaSE——面向对象与面向过程类与对象(属性方法构造器)等

面向对象与面向过程区别

面向过程编程与面向对象编程