面向对象的三大特征?
封装、继承、抽象
面向对象的基础是什么?
抽象
为什么说面向对象的基础是抽象呢?
抽象其实是一个过程,提炼出事物的共同点的过程。
例如:
抽象:猫的头、猫的身体、猫的脚、猫叫、猫抓老鼠)等,这些都属于猫的一个共同特征,所以我们可以抽象出一个东西,就是猫。
封装:
接下来再说封装,既然猫的头、猫的身体、猫的脚、猫叫、猫抓老鼠可以抽象出一个猫这个东西,那么我们就可以把这些特征进行封装,不管是猫的组成部分也好还是猫的一些行为也好,可以封装出来一个猫类。
继承:
那么我们再猫的基础上再进行抽象,猫和狗都属于动物,可以抽象出一个动物类。猫类和狗类都是动物类的子类。
多态:
在动物类中写一个抽象方法:叫,猫类去重写动物类的这个方法可以有自己的实现:猫叫,狗类去重写动物类的这个抽象方法:狗叫,这样不同的子类(猫类和狗类)都重写了父类(动物类)的“叫”这个方法,但是它们的实现确实不同的,猫是猫叫,狗是狗叫,这就实现了多态。
所以说面向对象的基础或者可以说是大前提就是抽象。
那么,到底什么才是面向对象?
先从字面去理解,面向,对象,焦点在于这个对象身上,什么又是对象呢?大家有点点编程基础的都知道一句话,万物皆可为对象。你可以是对象,我可以是对象,他可以是对象,她可以是对象,它也可以是对象。
在了解什么是面向对象之前呢我们先来简单了解一下什么是面向过程,同样也是同字面意思,它的焦点在于这个过程,例如:拿打水举个例子,面向过程呢就是关注于谁去打水,去哪打水,给谁打水,以及他打水走了多少步,上了几个台阶,拧开了水杯,把杯口对准出水口,接满了再拧上杯盖等等等,面向过程关注的他打水的这个过程。从面向对象的角度怎么理解呢?我不需要知道具体谁去打的水,要打给谁,以及走多少步等等一系列过程,面向对象关注的就是打水这件事都包含了几个对象,打水人、受水人、打水的工具、打水的地点,打水人和受水人还能进一步做抽象,抽象为参与者,所以最后只剩这么几个对象:参与者、打水工具、打水地点。至于如何实现,那是下一步要做的事情,利用对象之间的事件驱动,各对象之间再去做关联,这才是面向对象,不需要去考虑打水的过程。