什么是面向对象
首先我们知道,Java 是面向对象的高级编程语言,类和对象是 Java 程序的构成核心。那么什么是面向对象?要想了解这个问题我们要先了解面向过程,这样对比我们就好理解了。
很早以前的编程是面向过程的,有一个很有意思的例子,就是把大象装进冰箱,一般大家的思维就是
- 打开冰箱
- 把大象塞进去
- 关上冰箱
这就是面向过程的思想,以上的三部组成了一个把大象关进冰箱的过程,这个过程的目的就是把大象塞进冰箱。面向过程的编程思想注重的实现目的的过程,在编程时就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
那么,解决相同的问题,应用面向对象的思想如何解决呢?首先我们找到把大象装进冰箱其中的两个主体,那就是大象,和冰箱然后分析两个主体分别需要做什么。
- 大象
- 走进冰箱
- 冰箱
- 开门
- 关门
明白了两个主题分别要做什么以后那么最后实现把大象装进冰箱就可以这样实现
- 冰箱主体执行开门方法
- 大象主体再执行走进冰箱方法
- 冰箱主体再执行关门方法
以上就是面向对象的实现方法,其中的主体就是面向对象编程思想中的对象
面向对象的优势
以上的例子我们稍微的理解了面向对象以及面向过程,但是无法体现出其中面向对象的优势,我们就再举个例子,有一天你突然想吃红烧肉,那么有两个方案
- 你自己买肉,买调料,准备食材,了解红烧肉怎么煮,开锅,煮肉,盛到盘子。
- 去饭店,和老板说来份红烧肉
很明显,第一个方案就是面向过程的解决方案,而第二种就是面向对象的解决方案,第一种方案你要知道红烧肉需要些什么材料,怎么做,而第二种方案,你不需要了解饭店做红烧肉的过程,只要调用饭店这个对象的做红烧肉的方法,而当你突然不想吃红烧肉了,你想吃其他的东西,就第一种方案你需要重新买菜,重新思考你现在想吃的东西怎么做,所有动作要从头再来,而第二种方案,你只要和饭店说,不要红烧肉了,换另一种你想吃的菜,而这就是面向对象的优势。
就面向过程来说,解决问题是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。其过程是耦合的,且不好维护的
而面向对象是模型化的,你只需抽象出一个类,这个类里拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,就交给具体实现的人。
但是我们要明白,面向对象的底层其实还是面向过程,只不过是把面向过程抽象成类,然后封装,方便我们使用的就是面向对象了。这样的作法就让我们更易维护、易复用、易扩展。
面向对象的特征
就面向对象的特征来说,网上各有说法,有人说面向对象有三大特征(封装,继承,多态),有人说面向对象有四大特征(抽象,封装,继承,多态),而在参考Alan Kay(他是Smalltalk面向对象编程环境语言的发明人之一,也是面向对象编程思想的创始人之一,公认的第一个OO语言是Simula,由两位图灵奖得主 Ole-Johan Dahl and Kristen Nygaard发明,所以维基百科将三位都称为OO之父)对面向对象相关文献,我的个人理解是抽象是面向对象的前提,封装,继承,以及多态是面向对象的特征(仅代表个人理解解读)