面向对象的思想
在初学Java时看了毕向东的视频课,对于面向对象印象最深刻的就是举“把大象放进冰箱里”的例子(可见一个有趣恰当的例子对于抽象的思想是多么好理解)。
而“把大象放进冰箱里”方式是:
- 把冰箱门打开
- 把大象放进去
- 把冰箱门关上
面向过程:
- 打开冰箱
- 存储进冰箱
- 关闭冰箱
我们把冰箱当做一个对象,它有打开、存储、关闭的功能。
面向对象:
- 冰箱.打开
- 冰箱.存储
- 冰箱.关闭
面向对象可以把复杂的问题简单化,可以让我们的角度从执行者变成指挥者。
我们可以将对象看作是服务提供者。
下面可以结合公司开发项目为例子:
首先我们把项目经理当做指挥者,项目的开发需要前端、后端、测试人员。
项目经理指挥后端人员开发系统(相当于new一个后端人员对象,并调用他开发后端的功能),再指挥前端人员、测试,后续还需要运维人员等都类似。
面向对象方法论
我刚毕业入职的第一家公司,上班第一天总监说要给我们培训面向对象,首先讲的就是面向对象方法论,总结来说:
输入需求,输出对象
需求就是需求文档中的语言文字(核心是名称、动词、形容词)
名词,表示对象的生命周期,如何出现、如何运作、如何结束(
如:权限,定义、分配、验证等)
动词,表示具体的逻辑(如:审核功能)
形容词,表示对象的状态
我们在实际开发中也可以运用关键字提取的方式来将需求落地实现。
面向对象的三大特性
面向对象三大特性:封装、继承、多态
封装:指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
(优点:便于使用,提高复用性和安全性)
继承:提高代码复用性;继承是多态的前提。所属关系 is a。(注:想要使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中共性功能。通过了解共性功能,就可以知道该体系的基本功能。)
多态:事物存在的多种体现形态。
抽象:属于继承的一部分。当多个类出现相同功能,但功能主体不同。这时可以向上抽取,只抽取功能定义,而不抽取功能主体。(在父类和子类之间加一层抽象类,定义抽象方法)
抽象类特点:
1、抽象方法一定中抽象类中。
2、抽象方法和抽象类都必须被abstract关键字修饰。
3、抽象类不可以new创建对象,因为调用抽象方法没意义。
4、抽象类中的方法要被使用,必须由子类重写后,建立子类对象调用。
如果子类只覆盖了部分抽象方法,该子类还是一个抽象类。
重点说多态
定义:我们在程序中定义的引用变量所指向的具体类型和通过该引用变量的方法调用在编程的时候并不确定,当处于运行期间才确定。就是这个引用变量究竟指向哪一个实例对象,在编译期间是不确定的,只有运行期才能确定,这样不用修改源码就可以把变量绑定到不同的类实例上,让程序拥有了多个运行状态,这就是多态。
多态也属于后期绑定。当向对象发送消息时,被调用的代码直到运行时才能确定。编译器确保被调用方法的存在,并对调用参数和返回值执行类型检查,但是并不知道将被执行的确切代码。
多态又分为 编译时多态和运行时多态。
编译时多态:比如重载。
运行时多态:比如重写。
动物:猫、狗。
猫 x = new 猫();
动物 x = new 猫();
Java 实现多态有3个必要条件:继承、重写和向上转型。只有满足这3个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。
多态的体现:父类的引用指向自己的子类对象或接收自己的子类对象
多态的前提:必须是类与类之间有关系。要么继承、要么实现。
多态的好处:提高程序的扩展性
总结
- 面向对象可以把复杂的问题简单化,可以让我们的角度从执行者变成指挥者。
- 输入需求,输出对象(分析需求的名称、动词、形容词)。
- 面向对象三大特性:封装、继承、多态。
- 多态是对象在编译期执行哪个方法并不确定,在执行时才确定的。
- 实现多态必要条件:继承、重写和向上转型。