开篇废话:
说老实话,看到面向对象的时候就不禁想起读书的时候的比喻以及知乎上的文章,在来就是问答,前两天有人在知乎上问了一个很有意思的问题,就是如何培养面向过程的思想,我看到这问题的时候**,感觉这个可能真的没办法**,这个有涉及到大局观的问题,为什么这样说,且看我娓娓道来:
提到面向对象就会有一个与之相似但是又不尽相同的名词出现:
面向过程
很多人会混淆,不是都有面向两个字吗,有啥区别:
面向过程(Procedure Oriented)和面向对象(Object Oriented,OO)都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。
面向对象和面向过程本身不冲突,二者在设计开发中缺一不可
一开始是先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来越明显的显示出来,出现了面向对象思想并成为目前主流的方式。两者都贯穿于软件分析、设计和开发各个阶段,对应面向对象就分别称为面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)。C语言是一种典型的面向过程语言,Java是一种典型的面向对象语言。
面向对象
对象~
挣了钱就会有对象对吗
这个是肯定的!!
进入状态~
[直接从面向对象进入了~]
面相对象和面相过程?
是不是一个东西?他们会有冲突吗?
[没有冲突,反而还是包含的关系]
面相对象甚至于说包含着面相过程且时时刻刻依赖
理解:
所有的程序语言都是根据人类的思维逻辑来设计创造的,所以java也不例外,所以下面的理解应该不难,也是我自己的理解
先看一段我的理解:
马上要过年了,而大年30的重头戏就是团圆饭,那这个团圆饭的制作过程能不能用面向对象和面向过程来解释呢,那必然是可以的:
面向对象:
今晚我要煮几碗菜几荤几素几汤几菜
面向过程:
今晚的菜品中的佛跳墙我要准备哪些食材怎么烹调
大家发现了什么了没有?
面向对象:(宏观解决问题)
面向对象是设计过程,是空泛但不可缺少的,是需要站在一定全局的角度上去设计,不需要考虑具体的实施过程,就像上面说的,今晚我要煮几碗菜有荤有素有面有汤
面相过程:(微观解决具体问题)
面相过程就是为了解决面相对象中的具体问题比如:每个菜我要怎么制作的问题,比如佛跳墙我需要准备:鲍鱼、海参、鱼唇、牦牛皮胶、杏鲍菇、蹄筋、花菇、墨鱼、瑶柱、鹌鹑蛋等食材,通过汇聚到一起,加入高汤和福建老酒,文火煨制的方式制作而成
有个经典的比喻:
面向对象是盖浇饭、
面向过程是蛋炒饭。
盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低。
蛋炒饭的好处就是简单快速,但是遇到不满意的地方就不能灵活的作出改变,一旦成型,修改难度巨大,牵一发而动全身的比喻也不为过
综述:面相对象用于设计,面相过程用于解决问题
补充:
面向对象具有三大特征:
封装性、继承性和多态性
而面向过程没有继承性和多态性,并且面向过程的封装只是封装功能,而面向对象可以封装数据和功能。所以面向对象优势更明显。