面向过程 vs 面向对象

从网上摘录了一些面向过程vs.面向对象的分析,先简单记录如下,稍后会继续整理。

 

为什么会出现面向对象分析方法?

因为现实世界太复杂多变,面向过程的分析方法无法实现。

 

面向过程

采用面向过程必须了解整个过程。每个步骤都有因果关系,每个因果关系都称成了一个步骤,多个步骤就构成了一个系统。因为存在因果关系,每个步骤很难分离,非常紧密,当任何一步骤出现问题,将会影响到所有的系统。

 

 

面向对象

面向对象会将现实世界分割为不同的单元(对象),实现各个对象,如果完成某个功能,只需要将各个对象协作起来就可以。

 

蛋炒饭 vs 盖浇饭

 

电脑

组装

3D打印

 

主板

集成显卡

独立显卡

 

面向对象  可扩展性强

面向过程  步骤 因果关系 可扩展性不高

 

050_动力节点_简单阐述面向对象和面向过程的区别

http://v.ku6.com/show/Uz2eRSfyMfbElfBY-LVxGA...html?st=1_9_4_1&nr=1

 

2_面向对象与面向过程

http://v.ku6.com/show/Y0xo2Iax8ifZ2dF1jLD67w...html

 

 

面向过程 vs 面向对象之我见

http://www.xuebuyuan.com/1210039.html 

我曾经思考过这个问题,究竟人类的思维方式是面向对象的还是面向过程的?面向过程的思想就像是:我们接到一个问题后先将其划分为几个解决步骤,其中有共性的抽象出来作为函数可以重复使用,然后按步骤执行。面向对象的思想就像是:我们接到一个问题先分析其场景和场景中的要素,将其抽象为类,然后思考为解决这个问题场景中的各个要素分别应该承担那些任务或者说具备哪些功能,然后程序员所需要做的就是将这些要素组织起来、协调好工作关系,最后启动这一工作即可。总的来说,在面向过程的思想中,编程者像是一个独裁者,一个执行者,他对一起都说的算,周围的一起都像是它的工具——自动化很低的工具,他一一拿起来完成自己心中的计划;而面向对象的思想中,编程者更像一个组织者,一部电影的导演,他组织剧组里的成员,交代分工和工作时的互相配合,然后在启动拍摄后退居到幕后,具体工作由手下按照他早已做好的安排来完成。

 

那么究竟人类的思维方式是怎样的呢?面向过程还是面向对象?人们解决问题是更愿意扮演操控者还是组织者?这就是因人而异的问题了,说的玄乎点就是思想境界的问题了。人天生的思维方式肯定是面向过程的,就像“把大象放冰箱分三步”一样是分step one two three的,但是随着面对的问题越来越复杂凭借一己之力越来越难以掌控,人就得学着放权,学着合作,学着组织,这就很自然地过渡到了面向对象的思想。所以说,我认为人的原始思维方式是面向过程的,面向对象思想是人对问题复杂性的一种妥协。

 

什么是面向过程,什么是面向对象?

http://www.cnblogs.com/xuyinghui/p/4908815.html 

五子棋、悔棋等功能

 

面向过程 VS 面向对象

http://qiusuoge.com/7951.html 

2.1 蛋炒饭和盖浇饭

面向过程(OP)和面向对象(OO)本质的区别在于分析方式的不同,最终导致了编码方式的不同。

 

过程式编程vs.面向对象编程

http://www.csdn.net/article/2012-07-16/2807372-oop-vs-procedural-programming 

 

面向对象编程 vs 面向过程编程

http://www.tuicool.com/articles/RbYvqi 

 

OOP vs 过程式编程

http://www.oschina.net/question/213217_61704?utm_source=tuicool&utm_medium=referral 

过程式编程:整个系统高度耦合,按照流程,一步一步运行。

OOP:整个系统由多个个体组成,个体之间相互进行通信、协商而运行。

 

我觉得过程式与OOP并非两个对立或对等的概念,不存在非此即彼的逻辑

反倒是“过程式/过程驱动”和“事件式/事件驱动”是对立的概念

但不论是面向过程还是面向事件的,都既可以用OOP,也可以不用OOP

 

过程式编程:先干这,后干那,亲力亲为,什么都搞。一线员工。

面向对象编程:分配这个对象干这事儿,那个干其他的,划分权责。管理布局。

 

过程式编程->领导:这个项目两周必须完成,然后一堆程序员每人分配两个功能开始埋头完成任务。

面向对象编程->没有领导紧逼。架构师完成基础设计并实现一些interface,一线员工按照严格的规范去完成各自的任务。

 

差异,在思想。一个以过程为思考路线。一个以事物为思考路线。

总是有殊途同归的感觉。

 

把大象装进冰箱需要几步?

面向过程:1打开冰箱 2 把大象装入 3关闭冰箱

面向对象:冰箱、大象、装载工

 

面向过程 vs 面向对象

连载:面向对象葵花宝典:思想、技巧与实践(3- 面向过程 vs 面向对象

http://www.kancloud.cn/yunhua_lee/oobaodian/110882 

与面向过程的方法相比,面向对象不再局限于计算机的机器本质,而更加侧重于对现实世界的模拟。面向过程的方法中,有一套设计严格的操作顺序,有一个类似中央控制器的角色来进行统一调度;而面向对象的方法中,并没有明确的中央控制的角色,也不需要指定严格的操作顺序,而是设计了很多对象,并且指定了这些对象需要完成的任务,以及这些对象如何对外界的刺激做出反应。

 

如果说面向过程像一条流水生产线,那么面向对象就像是一个足球队。没有哪个人能够在一场比赛开始的时候,就精确指定每个队员的每一次跑动,每一次出脚,每一次传球。。。。。。而只能指定队员的角色(前锋、中场、后卫、门将),然后由队员门自己根据情况做出反应。所以世界上有两个一样的生产线,但绝对不会存在两场一模一样的比赛。

 

面向过程 vs. 面向对象

http://blog.csdn.net/zqixiao_09/article/details/50548316 

 

面向过程VS面向对象

http://www.xuebuyuan.com/2233080.html

汽车例子、五子棋例子

面向过程的编程思想,就是“流程”式思想,就好比我们一个游戏,我们先输入卡号——输入密码——选择角色——进入游戏——结束!换句话说就是:首先分析解决问题所需的步骤(就是有多少个功能块),然后编写一个个函数来实现,当我们用的时候,就一个个的调用即可!专业一点的说法是:先确定算法再确定数据结构。

 

面向对象是面向问题中各种独立的实体的,程序设计思想是将程序分解成不同对象之间的交互过程,这就像对于上面的那个游戏程序一样,我们首先不考虑这个游戏室怎么玩的,工作是怎么做的,而是先去找游戏中有哪些人或物(一般选择用户 角色 玩家等等)参与其中,然后再去看他们都有什么作用,都做了什么,然后在针对不同的人设计方法!最后在通过分门别类的把他们联系在一起!专业一点的说法是:先确定数据结构在确定算法。

 

面向过程vs面向对象

http://liusapp.sinaapp.com/web/Topic/index/6

举个例子,把大象放进冰箱需要几步。

面向对象的思路是三部:1.打开冰箱门,2.把大象塞进去,3.关上冰箱门。

面向过程的思维可能首先考虑到的是去哪里找一个这么大的冰箱,以及怎么把大象放进去。。

 

 

面向对象编程 VS 面向过程编程

http://blog.csdn.net/realxie/article/details/41787465 

这里我举一个编译原理课程上我曾做过的一个project:设计一个具有+-*/的简单计算器,下面来看一下这两种编程思想之间的区别。

    1> 面向过程:这是一个最为简单的编程方法,或许也是我们看到这个问题时第一反应的解决方法,四种操作嘛,if else判断一下不就搞定了,如果嫌if else不好用,还有switch case嘛(其实没区别呀^^),或许我们写出的代码应该是这样的

    float calc(char symbol, float a, float b) {

         switch(symbol) {

         case '+':   return a + b;

         case '/':   return a / b;

     }}

哈哈,很简单吧,一个switch搞定了这个简单的计算器

对于 (a + b - c * d)/e,这个表达式怎么计算呢,我想还是很容易使用calc这个函数进行处理的吧,自己写一下吧。

 

    2> 面向对象:面向对象最重要的就是对象,在学习C++时我们一直强调所有的东西都是对象,那么针对这个问题什么才是对象呢?操作符,操作数?不错,他们都是对象。回想一个类的三个重要特性:封装性,继承性,多态性。其中封装和继承很容易理解,多态的概念相对复杂一些,如果不理解请猛戳这里。既然理解了三个概念,那么我们就开始着手解决计算器这个问题,我们将操作符抽象成对象,类或许应该这样设计:

class Operator {

 virtual Type calc(Type a, Type b) = 0;

}

class Add : public Operator {

 virtual Type calc(Type a, Type b) {return a + b; }

}

.. ...

class Div : public Operator {

 virtual Type calc(Type a, Type b) {return a / b; }

}

定义了这些操作符之后,我们还需要一个方法来生成这些对象,这个时候我们一般会使用一个Factory(工厂模式)来生成这些操作符对象,那么计算器是如何利用这些对象呢? 对于(a + b - c * d) / e,解释器(interpretor)使用Factory将这句话转换成:

   op4.calc(op3.calc((op1.calc(a, b), op2.calc(c, d)), e)

其中opN是操作符的对象(类型都是Operator),由Factory生成,计算器不关心每个操作符里面进行了哪些操作。

 

分析:

    这个时候我们或许已经看到了面向过程和面向对象之间的一些区别,到目前为止你或许会说,面向对象就是在扯淡,将一个本来几行代码就完成的事情搞行这么复杂,代码还多写了那么多,并且面向对象的代码读起来还比较晦涩,何必呢!

    是的,当一个问题非常非常简单的时候,使用简单的if else确认会省很多事情,并且很直白,但是当问题开始变得复杂起来,我需要增加更多的运算符,怎么办呢? 第一种写法就是在switch中添加更多的分支,当然可以,但是当问题本身开始变得复杂,例如增加对复数运算的支持,那么我想这时的calc函数会变得异常庞大,以至于将来的维护非常困难,或许将case下的操作都搬运到不同的函数中去处理可以解决一些问题,不过一旦问题复杂到这种需要拆分函数的时候,我想一个后来的维护者可能更愿意在已有的代码上去添加自认为简单的case分支或者修改已有的逻辑,而不是首先想着去对代码重构(我们这种心态大家都曾有过,试问谁不想规避一下风险呢^^),以致于后来代码越来越臃肿。

    而在面向对象的处理方法中,每添加一个新的操作,你要做的是添加一个新的类型(class)和在Factory中添加一行代码,这种修改不会对已有的逻辑产生影响,即使修改已有的一个操作,也不会对其它操作产生影响。

 

OO vs Functional

http://c2.com/cgi/wiki?OoVsFunctional 

 

面向过程

http://baike.baidu.com/view/560583.htm 

为什么会出现面向对象分析方法?

因为现实世界太复杂多变,面向过程的分析方法无法实现。

 

面向过程

采用面向过程必须了解整个过程。每个步骤都有因果关系,每个因果关系都称成了一个步骤,多个步骤就构成了一个系统。因为存在因果关系,每个步骤很难分离,非常紧密,当任何一步骤出现问题,将会影响到所有的系统。

 

 

面向对象

面向对象会将现实世界分割为不同的单元(对象),实现各个对象,如果完成某个功能,只需要将各个对象协作起来就可以。

 

蛋炒饭 vs 盖浇饭

 

电脑

组装

3D打印

 

主板

集成显卡

独立显卡

 

面向对象  可扩展性强

面向过程  步骤 因果关系 可扩展性不高

 

050_动力节点_简单阐述面向对象和面向过程的区别

http://v.ku6.com/show/Uz2eRSfyMfbElfBY-LVxGA...html?st=1_9_4_1&nr=1

 

2_面向对象与面向过程

http://v.ku6.com/show/Y0xo2Iax8ifZ2dF1jLD67w...html

 

 

面向过程 vs 面向对象之我见

http://www.xuebuyuan.com/1210039.html 

我曾经思考过这个问题,究竟人类的思维方式是面向对象的还是面向过程的?面向过程的思想就像是:我们接到一个问题后先将其划分为几个解决步骤,其中有共性的抽象出来作为函数可以重复使用,然后按步骤执行。面向对象的思想就像是:我们接到一个问题先分析其场景和场景中的要素,将其抽象为类,然后思考为解决这个问题场景中的各个要素分别应该承担那些任务或者说具备哪些功能,然后程序员所需要做的就是将这些要素组织起来、协调好工作关系,最后启动这一工作即可。总的来说,在面向过程的思想中,编程者像是一个独裁者,一个执行者,他对一起都说的算,周围的一起都像是它的工具——自动化很低的工具,他一一拿起来完成自己心中的计划;而面向对象的思想中,编程者更像一个组织者,一部电影的导演,他组织剧组里的成员,交代分工和工作时的互相配合,然后在启动拍摄后退居到幕后,具体工作由手下按照他早已做好的安排来完成。

 

那么究竟人类的思维方式是怎样的呢?面向过程还是面向对象?人们解决问题是更愿意扮演操控者还是组织者?这就是因人而异的问题了,说的玄乎点就是思想境界的问题了。人天生的思维方式肯定是面向过程的,就像“把大象放冰箱分三步”一样是分step one two three的,但是随着面对的问题越来越复杂凭借一己之力越来越难以掌控,人就得学着放权,学着合作,学着组织,这就很自然地过渡到了面向对象的思想。所以说,我认为人的原始思维方式是面向过程的,面向对象思想是人对问题复杂性的一种妥协。

 

什么是面向过程,什么是面向对象?

http://www.cnblogs.com/xuyinghui/p/4908815.html 

五子棋、悔棋等功能

 

面向过程 VS 面向对象

http://qiusuoge.com/7951.html 

2.1 蛋炒饭和盖浇饭

面向过程(OP)和面向对象(OO)本质的区别在于分析方式的不同,最终导致了编码方式的不同。

 

过程式编程vs.面向对象编程

http://www.csdn.net/article/2012-07-16/2807372-oop-vs-procedural-programming 

 

面向对象编程 vs 面向过程编程

http://www.tuicool.com/articles/RbYvqi 

 

OOP vs 过程式编程

http://www.oschina.net/question/213217_61704?utm_source=tuicool&utm_medium=referral 

过程式编程:整个系统高度耦合,按照流程,一步一步运行。

OOP:整个系统由多个个体组成,个体之间相互进行通信、协商而运行。

 

我觉得过程式与OOP并非两个对立或对等的概念,不存在非此即彼的逻辑

反倒是“过程式/过程驱动”和“事件式/事件驱动”是对立的概念

但不论是面向过程还是面向事件的,都既可以用OOP,也可以不用OOP

 

过程式编程:先干这,后干那,亲力亲为,什么都搞。一线员工。

面向对象编程:分配这个对象干这事儿,那个干其他的,划分权责。管理布局。

 

过程式编程->领导:这个项目两周必须完成,然后一堆程序员每人分配两个功能开始埋头完成任务。

面向对象编程->没有领导紧逼。架构师完成基础设计并实现一些interface,一线员工按照严格的规范去完成各自的任务。

 

差异,在思想。一个以过程为思考路线。一个以事物为思考路线。

总是有殊途同归的感觉。

 

把大象装进冰箱需要几步?

面向过程:1打开冰箱 2 把大象装入 3关闭冰箱

面向对象:冰箱、大象、装载工

 

面向过程 vs 面向对象

连载:面向对象葵花宝典:思想、技巧与实践(3- 面向过程 vs 面向对象

http://www.kancloud.cn/yunhua_lee/oobaodian/110882 

与面向过程的方法相比,面向对象不再局限于计算机的机器本质,而更加侧重于对现实世界的模拟。面向过程的方法中,有一套设计严格的操作顺序,有一个类似中央控制器的角色来进行统一调度;而面向对象的方法中,并没有明确的中央控制的角色,也不需要指定严格的操作顺序,而是设计了很多对象,并且指定了这些对象需要完成的任务,以及这些对象如何对外界的刺激做出反应。

 

如果说面向过程像一条流水生产线,那么面向对象就像是一个足球队。没有哪个人能够在一场比赛开始的时候,就精确指定每个队员的每一次跑动,每一次出脚,每一次传球。。。。。。而只能指定队员的角色(前锋、中场、后卫、门将),然后由队员门自己根据情况做出反应。所以世界上有两个一样的生产线,但绝对不会存在两场一模一样的比赛。

 

面向过程 vs. 面向对象

http://blog.csdn.net/zqixiao_09/article/details/50548316 

 

面向过程VS面向对象

http://www.xuebuyuan.com/2233080.html

汽车例子、五子棋例子

面向过程的编程思想,就是“流程”式思想,就好比我们一个游戏,我们先输入卡号——输入密码——选择角色——进入游戏——结束!换句话说就是:首先分析解决问题所需的步骤(就是有多少个功能块),然后编写一个个函数来实现,当我们用的时候,就一个个的调用即可!专业一点的说法是:先确定算法再确定数据结构。

 

面向对象是面向问题中各种独立的实体的,程序设计思想是将程序分解成不同对象之间的交互过程,这就像对于上面的那个游戏程序一样,我们首先不考虑这个游戏室怎么玩的,工作是怎么做的,而是先去找游戏中有哪些人或物(一般选择用户 角色 玩家等等)参与其中,然后再去看他们都有什么作用,都做了什么,然后在针对不同的人设计方法!最后在通过分门别类的把他们联系在一起!专业一点的说法是:先确定数据结构在确定算法。

 

面向过程vs面向对象

http://liusapp.sinaapp.com/web/Topic/index/6

举个例子,把大象放进冰箱需要几步。

面向对象的思路是三部:1.打开冰箱门,2.把大象塞进去,3.关上冰箱门。

面向过程的思维可能首先考虑到的是去哪里找一个这么大的冰箱,以及怎么把大象放进去。。

 

 

面向对象编程 VS 面向过程编程

http://blog.csdn.net/realxie/article/details/41787465 

这里我举一个编译原理课程上我曾做过的一个project:设计一个具有+-*/的简单计算器,下面来看一下这两种编程思想之间的区别。

    1> 面向过程:这是一个最为简单的编程方法,或许也是我们看到这个问题时第一反应的解决方法,四种操作嘛,if else判断一下不就搞定了,如果嫌if else不好用,还有switch case嘛(其实没区别呀^^),或许我们写出的代码应该是这样的

    float calc(char symbol, float a, float b) {

         switch(symbol) {

         case '+':   return a + b;

         case '/':   return a / b;

     }}

哈哈,很简单吧,一个switch搞定了这个简单的计算器

对于 (a + b - c * d)/e,这个表达式怎么计算呢,我想还是很容易使用calc这个函数进行处理的吧,自己写一下吧。

 

    2> 面向对象:面向对象最重要的就是对象,在学习C++时我们一直强调所有的东西都是对象,那么针对这个问题什么才是对象呢?操作符,操作数?不错,他们都是对象。回想一个类的三个重要特性:封装性,继承性,多态性。其中封装和继承很容易理解,多态的概念相对复杂一些,如果不理解请猛戳这里。既然理解了三个概念,那么我们就开始着手解决计算器这个问题,我们将操作符抽象成对象,类或许应该这样设计:

class Operator {

 virtual Type calc(Type a, Type b) = 0;

}

class Add : public Operator {

 virtual Type calc(Type a, Type b) {return a + b; }

}

.. ...

class Div : public Operator {

 virtual Type calc(Type a, Type b) {return a / b; }

}

定义了这些操作符之后,我们还需要一个方法来生成这些对象,这个时候我们一般会使用一个Factory(工厂模式)来生成这些操作符对象,那么计算器是如何利用这些对象呢? 对于(a + b - c * d) / e,解释器(interpretor)使用Factory将这句话转换成:

   op4.calc(op3.calc((op1.calc(a, b), op2.calc(c, d)), e)

其中opN是操作符的对象(类型都是Operator),由Factory生成,计算器不关心每个操作符里面进行了哪些操作。

 

 

OO vs Functional

http://c2.com/cgi/wiki?OoVsFunctional 

 

面向过程

http://baike.baidu.com/view/560583.htm 

posted @ 2016-05-22 15:03  Zhang Kun  阅读(363)  评论(0编辑  收藏  举报