本帖最后由 jackwang 于 2015-3-19 20:27 编辑
面向对象:
字面意思,将视角放在对象上,开发,解决问题,分析问题,思考问题,都站在对象的角度上考虑。
我觉得和面向过程对比,更能体会出面向对象的思想。面向过程,就是解决问题时,着眼于过程。将一个大问题分解成一个个的过程来解决。而面向对象的思想告诉我们要分析出问题中有那些对象,依靠对象提供的功能和属性去解决问题,而不是依靠过程(即函数)去解决问题。
如果你一直用面向过程的思想解决问题,你会发现,实际上是你在一个人控制着,完成着整个程序的流程。
而用面向对象的思想,每个被创建出来的对象都相当于一个具有一定功能的小人,这些小助手可以听你的
指挥,并完成你交给它的任务,从而使得你开发起来,尤其对于解决大型复杂问题感觉容易的多,因为你有了助手,只需要下达命令就可以了,至于如何实现的,对象来帮你完成,面向过程就无法做到这一点,只能是下达命令到方法(过程),而一个方法的独立性往往比较差,和其他方法的耦合程度有时很高,最后形成一团纠缠在一起的乱面条,正是无法将他们相对屏蔽封装起来,才要出现面向对象的思想。也就有了类,封装的特性。
所以面向对象的思想要求我们在描述事物时,要站在事物的角度上,想想自己是该事物,哪些事情应该是我来做或者我来做最方便、最合适的,哪些事情是我独自就可以解决的,哪些功能是我可以对外提供的。要将事物看成一个具有生命的独立个体来去描述事物。所以毕老师说的经典例子:如何画圆,圆最清楚。因为园中有描述一个圆实例的半径的字段,有圆心位置字段,甚至有圆的颜色字段。
至于继承、多态,这些都是在封装之后,为了描述类之间的关系,对象之间的特性而出现的技术。最核心本质的还是对事物的描述,即类的封装、定义。而对于提高代码的复用性,可扩展性,灵活性,健壮性,这些都是在封装的基础之上。 其实面向对象中也有面向过程,面向对象中的每个对象中功能的实现就是面向过程的。实际上面向过程比较适合于我们个人平时的思维,因为平时我们就是自己干,不求人,也不指挥别人,我们是一个工程的具体施工者,是一个大楼的具体建造者。而面向对象是让我们作为领导来去解决问题,作为一个指挥者,指挥一个个的对象去解决问题,然而一个个对象的创建过程,构造过程,就又用到了面向过程,然而你只需要用面向过程创造一次这个事物就可以了,以后你只需要知道该事物所提供的功能,去指挥它就好了。不需要再考虑该事物如何构造、运转了。这其实就会降低了我们做大型复杂项目的难度了。
另外,受上面的坛友启发,觉得应该补充这一点,类的出现,也即面向对象思想的出现,使得,我们有了抽象的事物、具体的实例个体的概念。这样的概念非常有利于开发,但是它是牺牲了一定的效率,使得数据有一定的冗余来达到便利开发的。所以,当我们熟悉了解面向对象后,会发现,面向对象的思想站在的角度是上帝的角度,面向过程的思想站在的角度人的角度。面向对象的思想更适于我们去描述这个世界,因为它给出了抽象(类)和具体(实例)的定义。
|