OOP篇(Java - 认知)

发布于:2024-08-18 ⋅ 阅读:(165) ⋅ 点赞:(0)

目录

一、什么是面向对象编程

二、为什么要用面向对象编程?

三、面向对象和面向过程的区别

1. 面向过程

2. 面向对象

3. 区别

三、面向对象三大特性

1. 面向对象的特征有哪些方面

2. 什么是多态机制?Java语言是如何实现多态的?

四、面向对象的程序设计

1. 简介

2. 抽象的数据类型


一、什么是面向对象编程

首先面向对象不是一种技术, 而是一种编程思想。

面向对象编程(Object Oriented Programming)就是把现实世界的具体事物全部看成一个一个的对象来解决问题

二、为什么要用面向对象编程?

让程序更符合人类的思维习惯

三、面向对象和面向过程的区别

面向过程和面向对象都是编程范式,它们在程序设计的思想和实现方式上有很大的不同。

1. 面向过程

面向过程(Procedure Oriented Programming,POP)是一种基于函数、模块、线性结构的编程范式。

其主要特点是把问题分解为一个个可重用的函数或过程,并通过算法来描述控制流程。

通常情况下,面向过程的程序逻辑是由顺序执行的一系列函数调用组成的。

优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗 资源;比如单片机、嵌入式开发、

Linux/Unix 等一般采用面向过程开发,性能是 最重要的因素。

缺点: 没有面向对象易维护、易复用、易扩展

2. 面向对象

面向对象(Object Oriented Programming,OOP)是一种基于对象、类、继承、多态等概念的编程范式。其主

要特点是将数据和行为封装在一个对象中,并通过消息传递机制来描述对象之间的交互。通常情况下,面向对象

的程序逻辑是由一些相对独立的对象组成的。

可以简单理解为:面向过程强调的是函数、接口和步骤,而面向对象强调的是对象、类和继承。

优点: 易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特 性,可以设计出低耦合的系统,使系

统更加灵活、更加易于维护

缺点: 性能比面向过程低

3. 区别

面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步 一步的实现。

面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题 的方法。

需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我 们什么事?我们会

用就可以了。

面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们使用的就是面向对象 了。

三、面向对象三大特性

1. 面向对象的特征有哪些方面

面向对象的特征主要有以下几个方面:

抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行 为抽象两方面。

抽象只 关注对象有哪些属性和行为,并不关注这些行为的细节是什么。

  • 封装 : 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如 果属性不想 被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没 有提供给外界访问的方法,那 么这个类也没有什么意义了。
  • 继承 : 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新 的数据或新 的功能,也可以用父类的功能,
    但不能选择性地继承父类。通过使用 继承我们能够非常方便地复用 以前的代码。
    关于继承如下 3 点请记住:
    1. 子类拥有父类非 private 的属性和方法。
    2. 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
    3. 子类可以用自己的方式实现父类的方法。
  • 多态 : 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出 的方法调用 在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到 底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的 方法,必须在由程序运行期间才能决定。在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口 (实现接口并覆盖 接口中同一方法)。

其中Java 面向对象编程三大特性:封装 继承 多态

封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便 于使用,提高复用性和 安全性。

继承:继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以 增加新的数据或新的功 能,也可

以用父类的功能,但不能选择性地继承父类。通 过使用继承可以提高代码复用性。继承是多态 的前提。

关于继承如下 3 点请记住:

  1. 子类拥有父类非 private 的属性和方法。
  2. 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
  3. 子类可以用自己的方式实现父类的方法。

多态性:父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提 高了程序的拓展性。

在Java中有两种形式可以实现多态:

继承(多个子类对同一方法的重写)和接口 (实现接口并覆盖接口 中同一方法)。

方法重载(overload)实现的是编译时的多态性(也称为前绑定),

而方法重写(override)实现的是 运行时的多态性(也称为后绑定)。

一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是 哪个类中实现的方法,

必须在由程序运行期间才能决定。运行时的多态是面向对 象精髓的东西,要实现多态需要做两件事:

  • 方法重写(子类继承父类并重写父类中已有的或抽象的方法);
  • 对象造型(用父类型引用子类型对象,这样同样的引用调用同样的方法就会根据 子类对象的不同而 表现出不同的行为)。

2. 什么是多态机制?Java语言是如何实现多态的?

所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出 的方法调用在编程时并 不确定,

而是在程序运行期间才确定,即一个引用变量倒 底会指向哪个类的实例对象,该引用变量发出 的方法调用到底是

哪个类中实现的 方法,必须在由程序运行期间才能决定。

因为在程序运行时才确定具 体的类,这 样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现

上,从而 导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时 所绑定的具体代码,让

程序可以选 择多个运行状态,这就是多态性。

多态分为编译时多态和运行时多态:

其中编辑时多态是静态的,主要是指方法的 重载,它是根据参数列表的不同来区分不同的函数,通过编辑之后会

变成两个不 同的函数,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来 实现的,也就是我们

所说的多态性多态的实现  Java实现多态有三个必要条件:继承、重写、向上转型。

继承:在多态中必须存在有继承关系的子类和父类。

重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的 方法。

向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具 备技能调用父类的方法 和子类的

方法。

只有满足了上述三个条件,我们才能够在同一个继承结构中使用统一的逻辑实现 代码处理不同的对象, 从而达到

执行不同的行为。

对于Java而言,它多态的实现机制遵循一个原则:

当超类对象引用变量引用子类 对象时,被引用对象的 类型而不是引用变量的类型决定了调用谁的成员方法,

但是这个被调用的方法必须是在超类中定义过 的,也就是说被子类覆盖的方法。

四、面向对象的程序设计

1. 简介

面向对象的程序设计是一种编程范式,它将程序分解为对象的集合,这些对象通过相互之间的交互来实现系统的

功能。

在面向对象的程序设计中,每个对象都有自己的属性和方法,可以封装数据和行为。

通过继承和多态等机制,可以实现代码的重用性和扩展性。

面向对象的程序设计可以提高代码的可读性和可维护性,使得程序的结构更清晰。

它强调对象之间的关系和交互,更符合现实世界的抽象和模型化。

以下是一个面向对象的程序设计示例代码,以Java语言为例:

// 定义一个动物类 Animal
class Animal {
    private String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public void eat() {
        System.out.println(name + " 正在吃东西");
    }
}
 
// 定义一个狗类 Dog,继承自Animal类
class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }
    
    public void bark() {
        System.out.println("汪汪汪!");
    }
}
 
// 主程序
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("旺财");
        dog.eat(); // 调用继承自Animal类的eat()方法
        dog.bark(); // 调用自身的bark()方法
    }
}

这个示例中,我们定义了一个Animal类和一个继承自Animal类的Dog类。

Animal类有一个表示名称的属性和一个eat()方法,Dog类新增了一个bark()方法。

在主程序中,我们创建了一个名为"旺财"的Dog对象,通过调用eat()和bark()方法展示了代码的运行结果。

2. 抽象的数据类型

抽象的数据类型

将不同类型的数据的集合组成的整体用来描述一种新的事物。

人 : 包含了 (String name , int age ,char sex ,double salary)4 中不同类型的数据组成的整体

学生 : 包含了(String name, double score,String grade) 也是不同类型的数据组成的整体

思考 : 人把大象装进冰箱分几步?

人 : 数据类型有(String name ,int age ....) 功能(人装大象 打开冰箱门 关上冰箱门)行为

大象 :数据类型( double weight ,String name) 行为(被人拿起,装进冰箱)

冰箱 : 数据类型( String singe) 行为(关门,开门)

上面所出现的人、学生、大象、冰箱都是一种抽象数据类型----类!

类是Java语言最基本单位。


网站公告

今日签到

点亮在社区的每一天
去签到