首頁 >後端開發 >php教程 >编程为什么要用面向对象?为什么不用面向过程?

编程为什么要用面向对象?为什么不用面向过程?

WBOY
WBOY原創
2016-06-06 20:17:032800瀏覽

写的一个分页效果 我用50行代码就写出来了 然后把他们包在一个函数里面 用到分页的地方就调用一下这个函数 而我在网上搜的用面向对象写的分页类都300行了 而且又看不懂 为什么面向对象用了这么多代码写? 那么用面向过程写不是挺好的吗?为什么还要用面向对象呢?又费事又不易读

回复内容:

写的一个分页效果 我用50行代码就写出来了 然后把他们包在一个函数里面 用到分页的地方就调用一下这个函数 而我在网上搜的用面向对象写的分页类都300行了 而且又看不懂 为什么面向对象用了这么多代码写? 那么用面向过程写不是挺好的吗?为什么还要用面向对象呢?又费事又不易读

共用女朋友

  • 代码界加班多,没有时间陪女朋友逛街、旅游、买衣服。

  • 甚至等不起还在上幼儿园的她。

  • new GirlFriend() 是不是很简单。

  • 撸一会爽了就行了,不用自己哄她开心(维护)呀。

即插即用

  • 女孩心思难猜,隔壁大神写的代码看不懂

  • 工期紧,节奏快,我只想外部配置下就能使用

减少人员伤亡

  • 你为什么改我的代码,你改了我的代码就跟碰了我的老婆你知道吗?

  • 我不在这插功能怎么实现。

  • 你不会告诉我来插吗?

世界越来越大,你能做的相对越来越少

  • 单打独斗的时代已经过去了

  • 你要和别人合作才能更大的事情

人读的诗,机器吃的屎

  • 为什么不直接汇编?

三种效率的价值权衡

  • 运行效率

  • 开发效率

  • 维护效率

  • 三种效率,什么效率都是成本,那种组合配比才能使开支最小?

  • 在尝试阶段使用的是解释型语言。

  • 把稳定被需求需要更快运算的改为C开发,节约的是用户的时间

  • 世界级运行效率且不变的需求用了汇编,因为汇编快到了极致节约的是世界人民的钱。

一个巨大的阴谋家,策划创造一个毁灭世界级别的机器怪物,但是复制你们的代码粘贴到他的程序里显得太LOW。

如果一个东西封装成函数就够了,就不应该封装成类。你遇到的是恰好能封装成函数的情况。

真正适合面向对象的代码,你拆成一个一个函数,你会发现参数多了就分散了,传递起来麻烦,找起来更麻烦。那还不如弄到一起写成类的形式。

就比如说,封装一个http请求,需要传递url、方法、参数、cookie、代理,还有一些杂七杂八的配置,等等。你如果封装成函数,每个函数都需要有将近十个参数,如果封装成类,只需要传递需要设置的参数就行,不需要频繁设置的参数,就在构造器中赋上默认值。这不就省事了吗。

我觉得楼上说的太复杂啦,其实并没有那么复杂。面向对象的优点是什么?好维护,有利于项目的维护扩展。我是做PHP的,PHP面向过程的代码难以维护,使用面向对象则不然,文档齐全的情况下,维护扩展起来都挺方便。尽管PHP的面向对象牺牲部分性能,但是相对于项目的可维护性可扩展性而言,不足为虑!

那是因为你没有开发一个大项目 在大项目开发中 ,面向对象编程,会让你的代码写的更少 更抽象 更容易维护
你可以看看网上的这个解释http://zhidao.baidu.com/question/2265557081512828548.html

这个一言难尽。对于大型程序,面向对象方法的优点是不容置疑的;但对于一个功能简单的小程序来说,两种方法哪个更好还真不能一概而论。

但是300行代码的分页程序很可能比你的50行代码的功能要丰富,可配置性可能也要高一些。而不是说功能完全一样的情况下,结果却是50 vs 300。如果真是这样,那就该打那个人的屁股了。

小菜也斗胆回答一下这种上升到CS哲学层次的问题.
首先二者并没有谁厉害谁不厉害之区别,都一样,没有高低之说,不然linux kernel那上万行的C代码岂不是low爆了?
第二是,程序规模上去了,要求多人团队高度协同容易维护,似乎,面向对象更适合些
最后是,无论是面向过程还是面向对象,都要做到高度模块化,抽象化,易维护扩展,否则就是给自己挖坑.

反对非黑即白的二元论思想

你只能说:在你接触过的大多数项目中,为什么面向对象被普遍使用

而原因是:大部分程序处理的对象繁多、关系复杂,如果用模拟现实世界的方法去组织代码,更容易让人理解,也更容易维护。

不要为了面向对象而面向对象,因为它并不是普适的范式。合适的才是最好的。

只有面向过程不容易复用代码。
面向对象方便了对代码和逻辑的管理。

便于拆分封装模块。
同时做好框架后,声明式编程会比指令式编程直观得多。

拿C语言来说,语言层面根本就不支持C++、Java那种性质的面向对象,但像PHP、Apache、Nginx、Linux这些C程序,不一样能做到良好的模块化么?像Go和Rust这两门极具代表性的新生代语言,都没有采用Java/C++那种类型的面向对象和异常处理,由此可见,这两个东西的确存在缺陷。所以,在PHP编程中不要盲目像Java那样教条主义地使用面向对象和异常处理。从Linux C库的API和PHP内置的库函数其实都可以看出,其组织形式并不是Java类库那种“面向对象”的方式,但使用起来却非常方便,所以说封装成函数,一样是能够实现代码重用的。

拿人吃饭来说:
面向过程强调的是"吃饭","人"只是一个参数.比如mysqli_connect生成的连接对象作为mysqli_系列函数的一个参数.
面向对象强调的是"人","吃饭"只是一个动作.比如new mysqli生成的连接对象,可以直接调用mysqli类的方法和变量.
不是什么时候都必须要用面向对象的,哪个方便就用哪个。

王垠看待面向对象编程:
http://www.yinwang.org/blog-cn/2015/04/03/paradigms/
王垠这篇文章中关于OOP的见解,提到了,面向对象=过程式+抽象,同时指出了完全面向对象导致过度抽象的问题,过度抽象反而会增加耦合.

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

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn