面向对象编程
概述:
- 面向对象本身就是一种方法;一种对现实世界理解和抽象的方法。也是一种更加符合人类的思想习惯的思想,将复杂问题简单化,将我们从执行者变成了指挥者。角色发生了转换。
与面向过程的比较:
面向过程
- 事物比较简单,可以用线性思维解决的。
- 首先要做什么,怎么做,最后我们再代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,实现我们的功能。每一个步骤我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。
- 面向过程开发关心的就是每一步的实现,如果每一步都能够实现那么功能就能够实现,中间如果任何一个步骤出现问题,都会导致失败。
- 面向过程的代表语言:C语言
面向对象
- 事物比较复杂,没法用线性思维解决的。
- 面向过程的编程思想只能满足简单功能的实现,但在实际开发当中,项目的功能只会越来越多,不会越来越少,需求也是不断地变化的,可随着需求的更改,功能的增多,发现需要面向每一个过程就很麻烦了,并且程序的可维护性也是非常非常差的,能不能把这每一个步骤和功能再进行封装,根据不同的功能,进行不同的封装,功能类似的封装在一起。使用的时候,找到对应的类就可以了。这就是面向对象的思想。
- OOA : 面向对象分析 : 分析解决某个事物一共有多少个对象参与。
- OOD:面向对象设计: 分析对象和对象之前的关系。
- OOP:面向对象编程。
- 面向对象的代表语言:Java
面向对象的好处
- 面向对象也是基于面向过程的编程思想,但是面向对象相比于面向过程更符合我们的思维方式,万物皆对象。
- 可以将复杂的问题简单化,大大提高了程序的可读性和可维护性。
- 面向过程思想中,我们是程序的执行者,面向对象当中,我们是程序的调用者,这样的话也可以方便程序给其他人调用,提高了程序的扩展性。
面向对象的特征
- 封装(encapsulation)
- 继承(inheritance)
- 多态(polymorphism)
- 抽象(abstract)
初步学习面向对象
一、什么是对象
- 对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
- 对象的属性和行为:
- 对象具有属性,一个对象用数据值来描述它的状态。就是该事物的描述信息。
- 对象还有行为,用于改变对象的状态,对象及其操作就是对象的行为。就是该事物能够做什么。
- 对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中 。
二、什么是类
- 具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。
- Java中最基本的单位是类,Java中用类描述事物。
- 类中的属性和方法:
- 类的属性:是对象的状态的抽象,用数据结构来描述类的属性。也就是事物的属性。
- 类的方法:是对象的行为的抽象,用操作名和实现该操作的方法来描述。也就是事物的行为。
简单来说:对象就是对象是具体的,是客观存在的实例,是该类事物的具体体现。类是抽象的,是一组相关的属性和行为的集合,一个模板。
先有具体的对象,然后抽象各个对象之间象的部分,归纳出类通过类再认识其他对象。
举个例子:
狗 小花 = new 狗();
类:狗 是一个类。
对象:new 狗() 是一个对象,叫小花的狗
小花的性别、年龄、体重是它的属性;它叫、吃是它的行为。
定义
定义一个类
- Java中用class描述类
- 成员变量表示就是事物的属性
- 成员方法表示就是事物的行为
- 格式
[访问权限修饰符] class 类名{
成员变量
成员方法
}
class Dog{
//成员变量
String name;
//成员变量
int age;
//成员方法
public void bark(){
System.out.println("汪汪汪汪汪汪汪");
}
}
创建和使用对象
-
创建对象:
- 类名 对象名 = new 类名();
Dog tom = new Dog();
创建了一个新的代号tom的小狗对象。
- 类名 对象名 = new 类名();
-
引用对象成员:使用“.”进行以下操作:
-
引用类的属性:对象名.属性;
-
引用类的方法:对象名.方法名();
//给name赋值为小花。
tom.name = "小花";
//调用bark方法。
tom.bark();
内存分析
内存的分区
-
栈:
- 存放:局部变量
- 先进后出,自下而上存储
- 方法执行完毕,自动释放空间
-
堆:
- 存放new出来的对象
- 需要垃圾回收器来回收:System.gc()
-
方法区:
- 存放:类的信息(代码)、 static变量、字符串常量等
- jvm先调用main方法,然后依次执行里面的。
- new 一个新的对象时,会在堆区开辟内存空间,而栈区的Dog tom是引用的new Dog这个对象的内存地址。
- 常量是放在堆区的常量池中的,也是调用的地址。
- 在main方法里调用bark方法时,栈区会给bark 开辟一个空间,bark又调用放在方法区的内存地址。
- 当bark执行完毕后会自动销毁,释放栈区的内存空间。
- 当main方法执行完以后,也会自动释放。这时在堆区new Dog对象就没有被谁引用了,会被作为垃圾对象处理。当垃圾回收处理器空闲时会自动处理(不可控的、随机的)。
以上