面向对象 02:区分面向过程与面向对象,类和对象的关系

一、前言

记录时间 [2024-05-09]

系列文章简摘:
Java 笔记 01:Java 概述,MarkDown 常用语法整理
Java 笔记 02:Java 开发环境的搭建,IDEA / Notepad++ / JDK 安装及环境配置,编写第一个 Java 程序
Java 笔记 11:Java 方法相关内容,方法的设计原则,以及方法的定义和调用
面向对象 01:Java 面向对象相关内容整体概述

更多 Java 相关文章,请参考专栏哦。

本文讲述面向对象相关内容,主要包括面向过程与面向对象的区别,以及类和对象的关系。

面向过程编程和面向对象编程是两种不同的编程范式,它们在解决问题和组织代码方面有着不同的方法。

对于描述复杂的事物:

  • 为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。
  • 但是,具体到微观操作,仍然需要面向过程的思路去处理。

二、面向过程

面向过程编程是一种以解决问题的步骤为中心的编程范式。

在面向过程编程中,程序被分解为一系列执行特定任务的步骤或过程。每个过程都是一组相关的语句,用于完成特定的任务。

虽然面向过程编程有其优势,但在面对复杂的、长期的项目开发时,其维护性和扩展性可能不如面向对象编程。因此,开发人员在选择编程范式时需要根据具体情况权衡利弊。

面向过程的特点主要如下:

  • 程序结构简单:程序主要由一系列按照顺序执行的过程或函数组成,每个过程都负责完成特定的任务。
  • 数据和功能分离:数据和函数是分开的,数据通常作为参数传递给函数。函数在处理数据时可以修改其状态,但不会持有状态。
  • 自顶向下设计:通常通过自顶向下的设计方法,从问题的整体结构出发,逐步分解为更小的子问题,然后编写对应的过程来解决这些子问题。
  • 易于理解和编写:面向过程的代码通常比较直观,易于理解和编写,特别适用于简单的任务和小型项目。
  • 适用范围:面向过程编程通常用于需要执行一系列线性操作的简单任务,如数据处理、脚本编写等。

三、面向对象

1. 概述

面向对象编程(Object-Oriented Programming,OOP)是一种常用的编程范式,它通过将数据和操作组织为对象的集合来描述问题和构建解决方案。

OOP 是 Java 的核心思想。

在面向对象编程中,对象是程序的基本单元,每个对象都包含数据和操作数据的方法。这种方法的核心思想是将现实世界中的事物抽象成程序中的对象,从而更好地模拟现实世界的问题。

面向对象编程使得程序更易于理解、扩展和维护,特别适用于大型和复杂的项目。它提供了一种自然的方法来模拟现实世界中的问题,并通过对象之间的交互来解决这些问题。

面向对象的特点主要如下:

  • 对象和类:对象是程序的基本单元,代表现实世界中的实体或概念。类是对象的模板,描述了对象的属性(数据)和方法(操作)。
  • 封装:封装是将数据和操作数据的方法捆绑在一起,形成一个独立的、可重用的单位。对象对外部隐藏了其内部实现细节,只提供了公共接口供其他对象使用。
  • 继承:继承允许一个类(子类)继承另一个类(父类)的属性和方法,从而可以在不重复编写代码的情况下扩展和修改现有的类。
  • 多态:多态性允许不同类的对象对同一消息做出不同的响应。这意味着可以使用相同的接口来调用不同类的对象,并且这些对象可以根据自己的特性来执行适当的操作。
  • 抽象:抽象是将复杂的现实世界问题简化为程序中的模型。通过抽象,可以隐藏不必要的细节,只关注问题的关键方面。
  • 重用性:由于面向对象编程的模块化和封装特性,代码更容易重用。可以通过组合已有的类来构建新的类,或者直接使用现有类的功能。

2. 本质

面向对象编程(OOP)的本质:以类的方式组织代码,以对象的组织(封装)数据。

关键在于通过抽象、封装、继承和多态这些关键概念,将现实世界的问题建模为程序中的对象,从而提高了代码的可重用性、可维护性和可扩展性,使得程序更易于理解和开发。

抽象

抽象是面向对象编程中的一个重要概念,它指的是将问题的关键特征提取出来,忽略不必要的细节,从而简化问题的表示和处理,提高了代码的模块化、可维护性和可复用性。

面向对象编程通过抽象将复杂的现实世界问题简化为程序中的模型。

抽象在面向对象编程中具有以下几个关键方面

  • 问题建模:抽象帮助程序员将现实世界中的复杂问题转化为程序中的模型。通过抽象,程序员可以捕捉问题的本质特征,而忽略掉不相关的细节,使得问题更易于理解和处理。
  • 数据抽象:数据抽象指的是将数据和数据操作封装在一起,形成一个独立的数据类型(类)。数据的内部表示和实现细节被隐藏起来,只提供了公共接口供其他对象使用,从而降低了对象之间的耦合度,提高了代码的模块化和可维护性。
  • 行为抽象:行为抽象指的是将对象的行为(方法)与其内部实现分离开来,只向外部暴露必要的接口。通过行为抽象,对象可以隐藏其内部的具体实现细节,只关注外部调用者需要知道的信息,从而降低了对象之间的依赖性,提高了代码的灵活性和可扩展性。
  • 代码复用:抽象提供了一种通用的方法来描述问题,使得代码更易于重用。通过定义通用的抽象类和接口,可以在不同的场景中重复使用相同的代码模块,提高了代码的可维护性和可扩展性。

三大特性

在面向对象编程中,通常提及的三大特性是封装、继承和多态。这些特性是面向对象编程的核心概念,它们有助于提高代码的可维护性、可扩展性和可重用性。

这三大特性是面向对象编程的基础,通过它们可以构建出灵活、可维护和可扩展的软件系统。

具体如下:

  • 封装(Encapsulation)
    • 封装是将数据和操作数据的方法捆绑在一起,形成一个独立的、可重用的单位。
    • 对象通过暴露有限的接口,隐藏其内部实现细节,只允许其他对象通过指定的接口与其进行交互。
    • 封装提高了代码的模块化和可维护性,降低了对象之间的耦合度。
  • 继承(Inheritance)
    • 继承允许一个类(子类)继承另一个类(父类)的属性和方法。
    • 子类可以通过继承父类的特性来扩展或修改其行为,而不需要重新实现已有的功能。
    • 继承促进了代码的重用性和扩展性,提高了代码的可维护性。
  • 多态(Polymorphism)
    • 多态性允许不同类的对象对相同的消息做出不同的响应。
    • 可以使用相同的接口来调用不同类的对象,而这些对象可以根据自己的类型和特性来执行适当的操作。
    • 多态性提高了代码的灵活性和可扩展性,使得程序更易于理解和维护。

四、类和对象的关系

类和对象是面向对象编程中两个核心概念。

从认识角度:先有对象后有类。对象,是具体的事物;类,是抽象的,是对对象的抽象。

从代码运行角度:先有类后有对象。类是对象的模板。


1. 类

类是一种抽象的数据类型,它是用来描述具有相似特征和行为的对象集合的模板或蓝图

类可以描述 / 定义某一类事物,但不能代表某一个具体的事物。

类定义了对象的结构和行为,包括数据成员和方法。如 Person 类、Pet类、Car 类,等等。


2. 对象

对象是抽象概念的具体实例,它是根据类定义创建的具体实体。对象具有类定义的属性和行为,并在程序中被创建、操作和使用。

比如,张三就是人的一个具体实例,张三家里的旺财就是狗的一个具体实例。

对象是能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念。


3. 二者关系

类和对象之间的关系可以进行如下简单描述。

类是对象的模板

  • 类(Class)是一个抽象的概念,它描述了一类对象共同的属性和行为。
  • 类定义了对象的结构和行为,包括数据成员和方法。
  • 类可以看作是一种蓝图或模板,用于创建具体的对象。

对象是类的实例

  • 对象(Object)是类的具体实例,是根据类定义创建的。
  • 对象具有类定义的属性和行为,是类的一个具体化实现。
  • 对象是程序中真正操作和交互的实体,它们可以存储数据并执行操作。

联系

  • 类定义了对象的结构和行为,而对象是根据类创建的实体。
  • 类是对对象的抽象描述,而对象是类的具体实例化。
  • 一个类可以有多个对象的实例,这些对象共享类定义的属性和行为,但具体的数据值可能会有所不同。

五、总结

本文讲述面向对象相关内容,主要包括面向过程与面向对象的区别,以及类和对象的关系


一些参考资料

狂神说 Java 零基础:https://www.bilibili.com/video/BV12J41137hu/
TIOBE 编程语言走势: https://www.tiobe.com/tiobe-index/
Typora 官网:https://www.typoraio.cn/
Oracle 官网:https://www.oracle.com/
Notepad++ 下载地址:https://notepad-plus.en.softonic.com/
IDEA 官网:https://www.jetbrains.com.cn/idea/
Java 开发手册:https://developer.aliyun.com/ebook/394
Java 8 帮助文档:https://docs.oracle.com/javase/8/docs/api/

  • 44
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值