面向对象编程

面向对象编程

概述:

  • 面向对象本身就是一种方法;一种对现实世界理解和抽象的方法。也是一种更加符合人类的思想习惯的思想,将复杂问题简单化,将我们从执行者变成了指挥者。角色发生了转换。

与面向过程的比较:

面向过程
  • 事物比较简单,可以用线性思维解决的。
  • 首先要做什么,怎么做,最后我们再代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,实现我们的功能。每一个步骤我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。
  • 面向过程开发关心的就是每一步的实现,如果每一步都能够实现那么功能就能够实现,中间如果任何一个步骤出现问题,都会导致失败。
  • 面向过程的代表语言:C语言
面向对象
  • 事物比较复杂,没法用线性思维解决的。
  • 面向过程的编程思想只能满足简单功能的实现,但在实际开发当中,项目的功能只会越来越多,不会越来越少,需求也是不断地变化的,可随着需求的更改,功能的增多,发现需要面向每一个过程就很麻烦了,并且程序的可维护性也是非常非常差的,能不能把这每一个步骤和功能再进行封装,根据不同的功能,进行不同的封装,功能类似的封装在一起。使用的时候,找到对应的类就可以了。这就是面向对象的思想。
  • OOA : 面向对象分析 : 分析解决某个事物一共有多少个对象参与。
  • OOD:面向对象设计: 分析对象和对象之前的关系。
  • OOP:面向对象编程。
  • 面向对象的代表语言:Java
面向对象的好处
  • 面向对象也是基于面向过程的编程思想,但是面向对象相比于面向过程更符合我们的思维方式,万物皆对象。
  • 可以将复杂的问题简单化,大大提高了程序的可读性和可维护性。
  • 面向过程思想中,我们是程序的执行者,面向对象当中,我们是程序的调用者,这样的话也可以方便程序给其他人调用,提高了程序的扩展性。
面向对象的特征
  1. 封装(encapsulation)
  2. 继承(inheritance)
  3. 多态(polymorphism)
  4. 抽象(abstract)


初步学习面向对象

一、什么是对象
  • 对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
  • 对象的属性和行为:
    1. 对象具有属性,一个对象用数据值来描述它的状态。就是该事物的描述信息。
    2. 对象还有行为,用于改变对象的状态,对象及其操作就是对象的行为。就是该事物能够做什么。
    3. 对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中 。
二、什么是类
  • 具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。
  • Java中最基本的单位是类,Java中用类描述事物。
  • 类中的属性和方法:
  1. 类的属性:是对象的状态的抽象,用数据结构来描述类的属性。也就是事物的属性。
  2. 类的方法:是对象的行为的抽象,用操作名和实现该操作的方法来描述。也就是事物的行为。

简单来说:对象就是对象是具体的,是客观存在的实例,是该类事物的具体体现。类是抽象的,是一组相关的属性和行为的集合,一个模板。
先有具体的对象,然后抽象各个对象之间象的部分,归纳出类通过类再认识其他对象。


举个例子:
狗 	小花		=		new		狗();
类:狗	是一个类。
对象:new	狗() 是一个对象,叫小花的狗

小花的性别、年龄、体重是它的属性;它叫、吃是它的行为。



定义

定义一个类
  • Java中用class描述类
    1. 成员变量表示就是事物的属性
    2. 成员方法表示就是事物的行为
  • 格式
    [访问权限修饰符] class 类名{
    成员变量
    成员方法
    }
class Dog{
		//成员变量
		String name;
		//成员变量
		int age;
		//成员方法
		public void bark(){
		System.out.println("汪汪汪汪汪汪汪")}
	}

创建和使用对象
  • 创建对象:

    • 类名 对象名 = new 类名();
      Dog tom = new Dog();
      创建了一个新的代号tom的小狗对象。
  • 引用对象成员:使用“.”进行以下操作:

  • 引用类的属性:对象名.属性;

  • 引用类的方法:对象名.方法名();

	//给name赋值为小花。	
	tom.name = "小花"//调用bark方法。	
	tom.bark();

内存分析

内存的分区
  • 栈:

    • 存放:局部变量
    • 先进后出,自下而上存储
    • 方法执行完毕,自动释放空间
  • 堆:

    • 存放new出来的对象
    • 需要垃圾回收器来回收:System.gc()
  • 方法区:

    • 存放:类的信息(代码)、 static变量、字符串常量等

    在这里插入图片描述

    1. jvm先调用main方法,然后依次执行里面的。
    2. new 一个新的对象时,会在堆区开辟内存空间,而栈区的Dog tom是引用的new Dog这个对象的内存地址。
    3. 常量是放在堆区的常量池中的,也是调用的地址。
    4. 在main方法里调用bark方法时,栈区会给bark 开辟一个空间,bark又调用放在方法区的内存地址。
    5. 当bark执行完毕后会自动销毁,释放栈区的内存空间。
    6. 当main方法执行完以后,也会自动释放。这时在堆区new Dog对象就没有被谁引用了,会被作为垃圾对象处理。当垃圾回收处理器空闲时会自动处理(不可控的、随机的)。


以上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值