文章目录
1. 面向对象思想引入
前面我们讲过数组,当有多个数组都需要遍历时,我们可以将遍历的代码封装到方法中,需要遍历时,就调用相应的方法即可,提高代码的复用性。在对数组遍历的基础上继续增加需求,比如获取最值,数值逆序等,同样需要将这些功能封装到相应的方法中。这样继续封装会发现方法越来越多,于是就想能不能将这些方法继续进行封装呢?通过前面的讲解我们知道类是可以存放方法的,所以,我们就考虑使用类封装来这多个方法,将来再做数组的操作时,不用去找具体的方法,先找到这个类,然后使用这个类中的方法。这就是面向对象思想的编程方式。
2. 面向过程思想概述
我们来回想一下,我们完成一个需求的步骤:首先是搞清楚我们要做什么,然后在分析怎么做,最后我们再代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。
在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。
那么什么是面向过程开发呢? 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
面向过程的代表语言:C语言
3. 面向对象思想概述
当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始思索,能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。接下来我们看看面向对象到底是什么?
3.1 面向对象思想概述:
•面向对象是基于面向过程的编程思想
3.2 面向对象思想特点:
•是一种更符合我们思想习惯的思想
•可以将复杂的事情简单化
•将我们从执行者变成了指挥者
•角色发生了转换
3.3 面向对象思想举例
•买电脑
•吃饭
•洗衣服
•万事万物皆对象
面向过程思想和面向对象思想的代码举例
•把大象装进冰箱
4. 面向对象开发,特征,设计
面向对象开发
•就是不断的创建对象,使用对象,指挥对象做事情。
面向对象设计
•其实就是在管理和维护对象之间的关系。
面向对象特征
•封装(encapsulation)
•继承(inheritance)
•多态(polymorphism)
5. 类与对象的关系
我们学习编程语言,就是为了模拟现实世界的事物,实现信息化。比如:去超市买东西的计费系统,去银行办业务的系统。
我们如何表示一个现实世界事物呢:
•属性 就是该事物的描述信息
•行为 就是该事物能够做什么
•举例:学生事物
我们学习的Java语言最基本单位是类,所以,我们就应该把事物用一个类来体现。
类:是一组相关的属性和行为的集合
对象:是该类事物的具体体现
举例:
•类 学生
•对象 班长就是一个对象
6. 类的定义
现实世界的事物
•属性 人的身高,体重等
•行为 人可以学习,吃饭等
Java中用class描述事物也是如此
•成员变量 就是事物的属性
•成员方法 就是事物的行为
定义类其实就是定义类的成员(成员变量和成员方法)
6.1 使用方法
•创建对象:
•类名 对象名 = new 类名();
•对象名.成员变量
•对象名.成员方法
7. 面向对象代码体现
1:面向对象思想
面向对象是基于面向过程的编程思想。
面向过程:强调的是每一个功能的步骤
面向对象:强调的是对象,然后由对象去调用功能
2:面向对象的思想特点
A:是一种更符合我们思想习惯的思想
B:可以将复杂的事情简单化
C:将我们从执行者变成了指挥者
举例:
买电脑:
面向过程:我的了解电脑--了解我自己的需求--找对应的参数信息--去中关村买电脑--讨价还价--买回电脑
面向对象:我知道我要买电脑 -- 班长去给我买 -- 班长就买回来了
洗衣服:
面向过程:把衣服脱下--找一个盆--放点洗衣粉--加点水--把衣服扔进去--搓一搓--清洗衣服--拧干--晾起来
面向对象:把衣服脱下--打开全自动洗衣机--扔进去--一键即可--晾起来
吃饭:
面向过程:去超市买菜--摘菜--洗菜--切菜--炒菜--盛起来--吃
面向对象:上饭店吃饭,你--服务员(点菜)--厨师(做菜)--服务员(端菜)--吃
家常事物,买洗衣机和去饭店太不划算了,所以,找个对象。
但是,你不跟我好好学习,你将来4000,你对象8000。
3:把大象装进冰箱
面向过程:
动作有哪些呢?
A:打开冰箱门
B:装进大象
C:关闭冰箱门
代码体现;
class Demo {
public static void main(String[] args) {
/*
System.out.println("打开冰箱门");
//打开冰箱门的东西,我现在仅仅是为了演示,就写了一个输出语句
//其实,它可能需要做很多操作。
//这个时候代码就比较多一些了
//假设我要多次打开冰箱门,
//代码一多,每次都写一遍,麻烦不
//我们就应该用方法改进
System.out.println("装进大象");
System.out.println("关闭冰箱门");
*/
//写了方法以后,调用就改变了
open();
in();
close();
}
public static void open() {
System.out.println("打开冰箱门");
}
public static void in() {
System.out.println("装进大象");
}
public static void close() {
System.out.println("关闭冰箱门");
}
}
面向对象:
我们怎么才能更符合面向对象思想呢?
A:有哪些类呢?
B:每个类有哪些东西呢?
C:类与类直接的关系是什么呢?
把大象装进冰箱的分析? (如何分析有哪些类呢?UML。名词提取法。)
A:有哪些类呢?
大象
冰箱
Demo
B:每个类有哪些东西呢?
大象:
进去
冰箱:
开门
关门
Demo:
main方法
C:类与类直接的关系是什么呢?
Demo中使用大象和冰箱类的功能。
代码体现:
class 大象 {
public static void in() {
System.out.println("装进大象");
}
}
class 冰箱 {
public static void open() {
System.out.println("打开冰箱门");
}
public static void close() {
System.out.println("关闭冰箱门");
}
}
class Demo {
public static void main(String[] args) {
冰箱调用开门
大象调用进去
冰箱调用关门
}
}
4:开发,设计,特征
面向对象开发
就是不断的创建对象,使用对象,指挥对象做事情。
面向对象设计
其实就是在管理和维护对象之间的关系。
面向对象特征
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
8. 成员变量和局部变量的区别
1.在类中的位置不同
•成员变量 类中方法外
•局部变量 方法内或者方法声明上
2.在内存中的位置不同
•成员变量 堆内存
•局部变量 栈内存
3.生命周期不同
•成员变量 随着对象的存在而存在,随着对象的消失而消失
•局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
4.初始化值不同
•成员变量 有默认的初始化值
•局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。
9. 匿名对象
匿名对象:就是没有名字的对象。
•是对象的一种简化表示形式
匿名对象的两种使用情况
•对象调用方法仅仅一次的时候
•作为实际参数传递
1:new Student().show();
2:new StudentTest().method(new StudentDemo());
而存在,随着对象的消失而消失
•局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
4.初始化值不同
•成员变量 有默认的初始化值
•局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。
10. 匿名对象
匿名对象:就是没有名字的对象。
•是对象的一种简化表示形式
匿名对象的两种使用情况
•对象调用方法仅仅一次的时候
•作为实际参数传递
1:new Student().show();
2:new StudentTest().method(new StudentDemo());