素材牛VIP会员
用最简单的一句话说清,什么是面向对象?他和过程区别是什么?有什么好处?
 Su***er  分类:PHP代码  人气:1700  回帖:19  发布于6年前 收藏

可能我们都在用面向对象方式编程,我们真的理解到他了吗,每个程序员对面向对象的理解也不一样,每当别人问我为什么用对象不用过程时,我总是说不到一个充分的理由,我一般是这么说的,用对象的好处是,代码简洁,重用性高。。。。说说你们的看法和这么些年的总结阿。

讨论这个帖子(19)垃圾回帖将一律封号处理……

Lv7 码师
雪***狐 职业无 6年前#1

上面说的都挺不错的,偶也来凑个热闹~
简单到一句话:(按题主的要求)

  1. 什么是面向对象?对象是数据+操作。

  2. 和面向过程的区别是什么?面向对象更关注数据,而面向过程更关注操作。

  3. 有什么好处?面向对象让我们能更容易去封装数据、封装操作、扩展(继承机制),以及提供更轻量的接口--多态和duckType

Lv1 新人
风***扬 Web前端工程师 6年前#2

就拿买笔记本电脑来说吧

过程思维:询问周围朋友-->网上查询报价-->到附近的电脑城自己去买;
对象思维:找个人给他钱,让他搞个笔记本电脑给你。

Lv1 新人
Al***ay 职业无 6年前#3

如果非要一句话概括,那么就是:面向对象是将问题模块化,面向过程是将问题程序化

Lv6 码匠
lo***ou 职业无 6年前#4

依我看,最大的好处就是:

更有助于人类的思考

面向对象的定义,网上一搜一大把。的确,我们每个人都在使用它,却很少有人思考过其中的原因。

事实上,从语法层面上来说: 面向对象只是面向过程的语法糖。继承,多态等等,完全可用面向过程来模拟,只是繁简的区别罢了。

面向对象的存在,肯定是有价值的。诚然,面向过程也可用于软件工程,但为何不被人们所推崇?原因就是: 不好想

人类更愿意用联系的思想去看问题,因为这更贴近生活经验,而面向对象就能很好地体现这种思想。

把事物分解为实现,这是机器的脑子; 把事物联系成整体这才是人类的脑子

Lv 牛魔王
素材牛 PHP开发工程师 6年前#5

王垠看待面向对象编程(王垠使用Java开发了许多项目,包括他的Yin语言):
http://www.yinwang.org/blog-cn/2015/04/03/paradigms/
王垠这篇文章中关于OOP的见解,提到了,面向对象=过程式+抽象,同时指出了完全面向对象导致过度抽象的问题,过度抽象反而会增加耦合.

“对象思想”作为数据访问的方式,是有一定好处的。然而“面向对象”(多了“面向”两个字),就是把这种本来良好的思想东拉西扯,牵强附会,发挥过了头。很多面向对象语言号称“所有东西都是对象”,把所有函数都放进所谓对象里面,叫做“方法”,把普通的函数叫做“静态方法”。实际上只有极少需要抽象的时候,需要使用内嵌于对象之内,跟数据紧密结合的“方法”。其他的时候,你其实只是想表达数据之间的变换操作,这些完全可以用普通的函数表达,而且这样做更加简单和直接。把所有函数放进对象的做法是本末倒置的,因为函数本身并不属于对象,它们只是对象上面的变换操作。绝大部分函数是独立于对象的,它们不能被叫做“方法”。强制把所有函数放进它们本来不属于的对象里面,把它们全都作为“方法”,导致了面向对象代码逻辑过度复杂。很简单的想法,非得绕好多道弯子才能表达清楚。很多人至今不知道自己所用的“面向对象语言”里面的很多优点,都是从过程式语言继承来的。

大多数的面向对象语言里都缺乏正确的实现一等函数的机制。Java语言是一个极致,它完全不允许将函数当作数据来传递。你需要将全部的函数都封装进类,然后称它们为“方法”,但就像我说的,这是绑架。缺乏一等函数是为什么Java里需要这么多“设计模式”的主要原因。一旦有了一等函数,你将不再需要大部分的这些设计模式。

编程最重要的事情,其实是让写出来的符号,能够简单地对实际或者想象出来的“世界”进行建模。一个程序员最重要的能力,是直觉地看见符号和现实物体之间的对应关系。不管看起来多么酷的语言或者范式,如果必须绕着弯子才能表达程序员心目中的模型,那么它就不是一个很好的语言或者范式。
(引用结束)

个人也觉得,面向对象没有错,错的是"完全"面向对象,因为有时候并不需要采用面向对象,完全面向对象就太过于一刀切了.拿PHP的mysqli扩展来说,其提供有面向对象和过程化两套使用方法.面向对象就是new mysqli()创建一个对象,然后就可以很方便的调用方法和成员.过程化则是使用前缀为mysqli_的一系列函数.在这个场景下,个人觉得new mysqli()的确更合适一些.不过,对于某些场景,比如PHP内置的解析URL的函数parse_url,个人觉得就不需要使用面向对象了,如果再搞个url处理的类,把parse_url放到里面,就太多此一举,把简单问题搞复杂了,作为一个功能性很明确的函数,直接提供给编程人员调用,显然很友好.

Lv1 新人
Al***ay 职业无 6年前#6

我写过java,node,,可以说是从面向对象过渡到了面向对象+面向过程。从我个人的体会来说,面向过程更加快速简便,更加贴近人解决事物的办法。比如,商店卖掉一个球,面向过程的思路就是把球的总数拿过来,减去一,然后保存,同时,添加一个订单。 这种思维方式和现实业务的过程是比较类似的。所以叫做面向过程。

但是面向对象就是另一种方式,它首先要把这些实体都抽象两个类,球,订单。然后提供实现方法。比如,球的类有方法 sell,调用这个方法就会把球总数减1,然后调用订单的方法add,添加订单。总体的思路就是,先设计好类的接口以及交互方式,然后只要在 业务发生的时候, 将消息发送给相关的类就可以了。 这里,我们只需要调用 球的sell方法就行了。至于,它怎么下订单,订单价格,我们都不管。

可以看出,面向对象的方式比较有利于业务逻辑内聚,只要设计好接口,可能很长时间都不用更改类的通讯方式。永远都是 调用球的sell。当球的价格变了,或者有促销了,我们只需要修改sell实现,或者针对临时的促销,实现一个球的子类,比如叫做促销球。这样的话,能最大限度的保证架构的稳定。但是反过来说,如果真的要改架构,成本是比较大的。而且为了保证架构的稳定,前期设计上也会花费更多的资源。

面向过程的优势也正在于此,虽然处理复杂的业务不是强项,但是开发迅速,改变成本也比较小。非常适合复杂度不高或者适中,业务内容多变的开发。

以上。

Lv1 新人
何***孽 软件测试工程师 6年前#7

感觉最大的不同就是封装,而继承,多态都可以用面向过程的方法来替代。还有就是上面说的程序的解耦。用类来代替方法确实方便了很多。

Lv4 码徒
大***咒 JAVA开发工程师 6年前#8

举一个栗子
实现电商网站里面的一个小功能叫“删除商品”
如果是面向对象:可能的思路是---“删除商品”是对商品进行删除的一种方法,那就在商品这个类里面增加一个方法
如果是面向过程:可能的思路是---“删除商品”就是1,判断用户登录状况;2,判断用户权限;3,对提交的操作进行库表操作;4,返回结果;

不知道说的明不明白,我没有学过面向对象编程,小白的理解~~~~

Lv6 码匠
素***2 学生 6年前#9

上面的答案已经说的很清晰了。
面向对象就是对“类、接口”的合理使用。
面向过程就是对“函数、命名空间”的合理使用。
好处?减少重复的代码,增加可维护性。

上一页12下一页
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取