面向对象和面向过程
面向对象(Object Oriented),简称OO,是软件开发方法的一种,我们都知道java是基于面向对象开发的,但是说到面向对象,我们不得不提一提面向过程开发,面向过程,又称结构化开发,是指在开发过程中注重过程设计,用函数来表示过程,强调过程间的执行顺序,具有代表性的语言比如c语言,而面向对象则注重过程的复用性和扩展性,我举一个简单的例子,我们每天起床后都要做的一些事情,我用方法来描述
- 洗脸
- 刷牙
- 吃早餐
- 背着书包上学堂
如果用面向过程的方法来解决,那么很显然我们每天都是按着1、2、3、4的顺序在执行,但是总有一些特殊情况,比如说今天起晚了,没有时间吃饭了,那么怎么让程序变为1、2、4呢,对于纯粹的面向过程,我们只能回去改源代码,如果我们把每一步都用一个函数来包装,那我们只需要少调用一个3便达到了目的,在这里函数包装就是面向对象的思想,可以看出,在面向过程编程中也有面向对象的影子,其实在面向对象中也有面向过程,面向对象强调过程(也就是函数)的复用性和扩展性,那么这个函数从何而来呢,来自于过程,其实我们不应该去比较面向过程和面向对象的好坏,他们只是历史发展的潮流,面向过程注重过程的实现,其中有面向对象的雏形,面向对象又是对过程的包装,不同的时代,所注重的重点不同
面向对象思想
java面向对象主要分为以下几个方面:
- 抽象:我们生活中的抽象是指看不见摸不着的东西,总是指一些难以理解的事物,而在计算机科学领域,抽象是指抽出一类事物的本质,一些我们注重的特性。
- 类:当我们通过抽象提取出来一些特性,就得有容器来装这些特性,类就是 java中用来装特性的容器,类具有属性和方法,分别对应事物的属性和行为。
- 对象:当我们拥有类的时候,怎么使用这些类呢,类的实例化,实例化是将一个抽象的类赋予其特定的属性,构造出一个实实在在存在的,我们可以使用的对象,对象是类的实例化。
- 封装:在上面提到了函数是对过程的简单封装,那我们为什么不封装的更加彻底一些呢,将我们抽象提取出来的一类事物的属性和行为封装起来呢!这就是封装,至于彻底不彻底,这得比java更加抽象的语言来证明。
- 继承:继承是类与类之间的关系,继承的前提是二者是一类事物(比如说都是老师)。当一个A(例如:老师类)类已经存在时,我们还需要一个B(例如:数学老师类)类,我们发现B是在A的基础上,但又不同于A,我们希望通过某种方式来描述B类,继承可以帮助我们不必从无到有的构造这个B类,我们直接在A类的基础上,增加B的区别于A类的属性和行为。
- 多态:多态是类与对象之间的关系,多态的前提是继承和实例化,在上面我们了解了继承的一个好处,他可以帮助我们快速的构造一个类,而多态就是继承的另外一个好处,多态可以理解为一种对象多种实现方式(实现方式指的是实例化),例如A a = new B(),我们声明了一个A的对象,但却是B的实例化,这个a可以调用A和B共有的方法。有些时候我们写代码并不确定这里是一个什么类型,只能在运行时期才能确定是什么类型,所以先声明一个父类,运行期间无论碰到哪一个子类程序都没有问题。