面向对象
面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术[1] 发展到一定阶段后的产物。
——百度百科
- 核心:实现了面向对象的核心思想
- 编程思想:
需求==》建立思路==》目标代码
面向过程的编程思想
哥德巴赫猜想:
- 让用户输入一个数
1).是不是大于6
2).是不是偶数
3).是不是数 - 对输入的数拆分
- 分别验证是不是质数
自顶向下逐步求精
将一个程序打散成n多个小程序,再将程序进一步细化,直到整理出最终代码为止
- 独立过程
哥德巴赫猜想:
n=a+b;
判断a和b的过程,是独立的,相互之间互不影响
函数是对抽取出来的独立的过程的封装
淘宝:
1.登陆浏览器2.登陆3.验证用户合法性4.浏览商品5.添加购物车6.下订单7.填写收货地
址。。。。。。
不适用于多过程的复杂需求
第一个面向对象的编程语言:SmallTalk
C语言==》C++加入了面向对象的思想
面向对象的革命:Java(纯面向对象的语言)
对象
万物皆对象:一切客观存在的事物
唯物主义哲学思想
例如:显示屏,桌椅板凳,错误(客观存在)
对象
1.有什么:属性
2.能干什么:方法例如:
电脑:
有什么:显示器,鼠标,键盘,主机。。。
能做什么:上网,打游戏,学习。。。
除了属性和方法之外没有我们需要关注的东西。对象的属性
对象的属性可能又是一个对象
- 对象的方法
对象的方法的使用者,一定也是一个对象,(这个对象可能是别的对象,也可能是自己)
- 客观世界是由对象组成
- 小对象组成大对象(小对象作为大对象的属性而存在)
- 对象的方法彼此间相互调用
- 如何建立解题思路
例如:校外实训:郑州==》北京
- 找对象
有交通运输的方法(小黄车,摩拜单车,摩的,汽车,高铁,飞机) - 找方法
调用交通工具的运输方法
- 解决客观问题的方法
- 把解决问题所需要的对象准备好
- 考虑对象之间如何配合,完成需求
- 小结
- 面向过程的编程思想:自顶向下,逐步求精(适合于解决简单问题)
- 面向对象的编程思想:找到合适的对象是第一位,需要什么方法是第二位
面向对象在计算机领域中的使用
计算机需求,来源于客观世界
把客观世界的需求,用计算机来实现
例如:
京东:
需求:在人类社会中,有人买东西,有人卖东西
解决:利用了计算机网络,解决人和人之间的交易行为(没有计算,这样的需求依旧存在)
QQ:
需求:人与人之间有交流的需求
解决:利用计算机解决
用计算机解决问题:用面向对象的思想解决,和现实世界高度统一(生活中怎么解决这个问题,用计算就怎么解
决)
- 计算机中的对象
在JVM中一块连续的存储空间(数据,代表生活中的对象)
例如:
学生管理系统:
- 人工:建立档案册,记录学生信息(管理的对象:学生,有血有肉的人)
- 计算机:建立档案册,记录学生信息(管理的对象:计算机在存储空间中表示的学生,其属性是需要的属性)
- 小结
面向对象的思想为解决生活中的问题提供了思路,应对复杂的需求
一个系统,越接近生活,越是合理(生活是最合理的)
- 各司其职,对象应该保持简单性
- 弱耦合性,对象和对象之间的联系,尽量弱化
- 可重用性,创建对象下一次可以拿来直接用
- 可扩展性,在原有的功能基础之上曾加新功能
oop面向对象的编程思想Object Oriented Programming
- 面向对象的语法:编译通过
- 面向对象的思想:要按照以上4点纲领
面向对象的三大特性
封装,继承,多态(三大基石)
封 大专栏 面向对象装
定义
封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装把对象的所有组成部分组合在一起,定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。
适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性。
特点
对象会有明确的边界,保护对象中的属性‐‐‐‐数据隐藏
封装的粒度(不宜过大,也不宜过小)
public 公开的,不受边界的控制
private 私有的,只能在本类中使用,无法突破边界
(提供对应的get/set方法)
好处:提供约束,设置只读性
方法私有:private 返回值类型 方法名(参数列表)
方法公开:声明公开,实现隐藏(在声明不变的情况下,如果实现改变,对架构的影响最小)
继承
父类‐‐子类(有继承关系) 父类把子类的共性抽取出来
关键字:extends
class 子类 extends 父类{}
- 特点
- 子类可以继承父类中的方法和属性
- 可扩展性(子类,重用父类中的方法)
本质
Animal‐‐Dog
创建过程:先创建父类对象,后创建子类对象,父类对象作为子类对象的的一部分
访问修饰符:从严到宽
private 私有的 本类内部(不能被继承)
default 默认的 本类内部+同包可以访问+同包子类(可能被继承)
protected 受保护的 同包+不同包子类
public 公开的 全能访问构造方法不能被继承
方法覆盖
子类用特殊的方法实现,替换了父类中的一般方法实现
语法要求:
- 返回类型,方法名,参数列表和父类相同(参数列表变化,就是重载)
- 访问修饰符:相同,或者更宽
- 不能抛出比父类更多的异常
对象构造的过程
- 分配空间:本类和父类一并分配空间,所有的属性被赋予默认值
- 递归的构造父类对象(初始化分类的属性,调用父类的构造方法)
- 初始化属性
- 调用构造方法
super
- 在构造方法中指定调用父类的哪一个构造方法
- 必须在构造方法的第一个语句
- 如果一个构造方法的第一句,不指定this也不指定super 系统默认添加super();
- 表示父类对象,区分父类被遮盖的属性,或者调用父类被覆盖的方法
- 小结
系统默认添加:
构造方法第一行:super();
没有写构造方法:公开的无参构造
每个程序:import java.lang.*;
super常常用来把构造参数传递给父类
JAVA继承的分类
继承分为单继承和多重继承。单继承是指一个子类最多只能有一个父类。多继承是一个子类可以有二个以上的父类。由于多继承会带来二义性,在实际应用中应尽量使用单继承。Java语言中的类只支持单继承,而接口支持多继承。Java中多继承的功能是通过接口(interface)来间接实现的。
一个类最多只能有一个直接父类,这点和C++不同!
多态
编译时多态(方法重载) 运行时多态(引用多态)
- 子类对象可以看成是父类对象(继承关系合理)
- 父类引用指向子类对象
多态规则:
- 对象类型不变
- 只能调用引用类型中所声明的方法
- 发生了方法覆盖,调用覆盖后的方法
引用之间的传递
- 子类对象的引用可以直接赋值给父类引用
- 父类引用给子类引用赋值,需要强制类型转换
- 在强制类型转换之前要用instanceof 判断,避免类型转换异常
引用 instanceof 类名 (表示:引用是否和类名相互兼容)
多态作用
将多个对象统一看做是同一个父类对象,屏蔽子类之间的差异,增加程序的灵活性和通用性。
多态的方法
- 方法声明中的形参可以用父类引用来表示,实参用子类对象来传输
- 用父类作为返回值类型