不要死扣定义 面向对象并没有一句话可以完全说明定义
看了不少视频 不少老师举例 包括当年我学JAVA 我的教授给的例子 感觉都缺了点什么不好理解
我来举例吧 拿如意大师的例子加个补充去理解
去饭店吃饭
面向过程的思维就是
没有 对象这一概念 于是也就没有”我“”厨师 “ ”服务员“这些东西
整个过程就是 前往饭店》点菜》烧油》炒菜》调味》上菜》吃饭》结账 。把这些定义为 ”我去饭店吃饭“ 于是这段程序的功能就实现了
如果你把你的项目交给其他程序员了 他又要去饭店吃饭 就只能重复以上过程 看懂你的代码他可以复制粘贴 看不懂只能重新去写出一步步的代码
当出现了对象这一概念以后就有了”我“”厨师“”服务员“ 我们就可以把这些步骤包装起来
程序就变成如下过程
”我“ 去饭店点菜输出一个菜单通过”服务员“ 传递给 ”厨师“ 与“收银员”
厨师 输出菜 在通过服务员传递给“我”
收银员输出价格传递给“我”
我输出“现金”
于是这一过程完成了
作为开发这段代码的人 我需要完成上面所有加引号的对象的内部功能 也就是说 对于制造他们的我来说 这一过程是透明的面向对象也好 面向过程也好 并没有本质的区别
但是当引入第二个程序员的时候 事情就有变化了
当第二个人也需要去饭店吃饭的时候 只需要调用“我” “服务员” “厨师”“收银”
这一过程就完成了 不需要关心 厨师是怎么做菜的
而对于任何一个程序员 包括我 来说 我想实现任何功能都可以先找找有没有封装好的对象
比如说我要把我家的狗送上火星 如果我使用面向过程的方法 我只能选择自己去造火箭。
而假如正好我有个同事曾经用面向对象的方法把他家的狗送上过火星
那么我只要把他的火箭调用过来把我的狗输入进去 就完成了
这样 极大的缩短了开发周期
有一点需要特别注意的是 面向对象的方法并不能缩短程序或者精简程序
很多初学者会认为 面向对象总结了面向过程中的功能点 能够让程序更加简练 这个观点非常普遍 错在没有实际操作过去想当然
而对于程序自身来说 所有的功能 仍然是由代码一步步完成的 所以想要实现某种功能 不论采用面向对象还是面向过程 在面向过程实现该功能已经达到最简的情况下 使用面向对象的方法计算机完成的工作至少也是同等多的
而现实中 由于封装需要考虑到所有的输入与输出,所以对象之间很容易也常常有必要出现重复的输入或者输出。 或者输入输出反复调用的情况
因此面向对象的代码往往需要比面向过程的程序代码要臃肿复杂一些 对于实现相同的功能来说 往往需要消耗更多的内存与运算资源
但是考虑到代码重用性 程序健壮性 和一大堆程序员协同工作效率这些方面时 执行效率的降低往往可以忽略
因此 面向对象的优势在于 对于大型项目而言 更加经济 对于程序员而言 学习周期更短
毕竟 组装自行车恐怕比制造一只规则的轮子都要简单多了 |
|