面向对象 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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/608246.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ue引擎游戏开发笔记(36)——为射击落点添加特效

1.需求分析: 在debug测试中能看到子弹落点后,需要给子弹添加击中特效,更真实也更具反馈感。 2.操作实现: 1.思路:很简单,类似开枪特效一样,只要在头文件声明特效变量,在fire函数中…

WSL介绍(Windows10内置的Linux子系统)

最近发现在Windows10下不用安装虚拟机也可以使用Linux,然后发现原来2016年就已经有这个功能了,下面来介绍下如何使用。 首先我的win10版本信息如下,以免部分版本不支持,可以做个参考。 需要进到控制面板里将Linux子系统功能打开&a…

这 7 道 Redis 基础问题,很常见!!

后端项目如果用到分布式缓存的话,一般用的都是 Redis。不过,Redis 不仅仅能做缓存,还能用作分布式锁、延时队列、限流等等。 什么是 Redis? Redis[1] (REmote DIctionary Server)是一个基于 C 语言开发的…

leetcode63.跳跃游戏2(动态规划)

问题描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 现在考虑网格中有障碍物…

springboot3+springsecurity+redis 整合登录认证以及权限校验

1. 架构说明 整体架构如下(提供的对应的模块引入),围绕着springsecurity中的三大核心展开: ​ 1、Authentication:存储了认证信息,代表当前登录用户 ​ 2、SeucirtyContext:上下文对象,用来获取Authenti…

基于一种改进小波阈值的微震信号降噪方法(MATLAB)

微震是指岩体由于在人为扰动或自然原因下受力变形,发生破裂过程中能量积聚而释放的弹性波或应力波。微震信号具有信噪比低、不稳定性、瞬时性和多样性等特点。因此,在任何损坏之前都会出现微小的裂缝,这种微小的裂缝是由岩层中应力和应变的变…

vue使用screenfull实现全屏模式

vue实现全屏模式可以通过第三方依赖screenfull完成效果。 实现效果&#xff1a;查看源码 首先需要安装第三方依赖 // npm npm install screenfull//yarn yarn add screenfull// pnpm pnpm install screenfull代码实现&#xff1a; <div class"flex-center w100 h…

TC8002D(3W音频功放IC)是一颗带关断模式的音频功放IC

一、概述 TC8002D是一颗带关断模式的音频功放IC。在5V输入电压下工作时&#xff0c;负载(3Ω)上的平均功率为3W&#xff0c;且失真度不超过10%。而对于手提设备而言&#xff0c;当VDD作用于关断端时&#xff0c;TC8002D将会进入关断模式&#xff0c;此时的功耗极低&…

机器学习算法之KNN分类算法【附python实现代码!可运行】

一、简介 在机器学习中&#xff0c;KNN&#xff08;k-Nearest Neighbors&#xff09;分类算法是一种简单且有效的监督学习算法&#xff0c;主要用于分类问题。KNN算法的基本思想是&#xff1a;在特征空间中&#xff0c;如果一个样本在特征空间中的k个最相邻的样本中的大多数属…

常见的一些RELAXED MODEL CONCEPTS

释放一致性(release consistency, RC) RC的核心观点是&#xff1a;使用 FENCE 围绕所有同步操作是多余的 同步获取 (acquire) 只需要一个后续的 FENCE&#xff0c;同步释放 (release) 只需要一个前面的 FENCE。 对于表 5.4 的临界区示例&#xff0c;可以省略 FENCE F11、F14…

Linux-笔记 修改开发板默认时区

1. 时区文件 使用命令date -R查看当前的默认时区&#xff0c;date - R命令会自动解析/etc/localtime 文件&#xff0c;而该文件又是指向“ /usr/share/zoneinfo/$主时区/$次时区 ”&#xff0c;当需要更改到指定的时区只要将/etc/localtime 文件软链接到 ”/usr/share/zoneinf…

Vue的省份联动

Vue的省份联动 一、安装依赖库 npm install element-china-area-data -Snpm install element-ui --save全局使用elemntui组件库 import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css;Vue.use(ElementUI);二 、代码如下 <template><div…

HarmonyOS开发之ArkTS使用:用户登录页面应用

目录 目录 前言 关于HarmonyOS 环境准备 新建项目 设计用户登录页面 1. 布局设计 2. 编写ArkTS代码 运行和测试 结束语 前言 随着HarmonyOS&#xff08;鸿蒙操作系统&#xff09;的不断发展&#xff0c;越来越多的开发者开始投入到这个全新的生态系统中&#xff0c;而…

BeyondCompare4 下载\安装\免费使用

1. 官网 下载 Download Beyond Compare Free Trial 2. 安装&#xff08;无脑下一步&#xff09; 3.永久免费使用 修改注册表 A、在搜索栏中输入 regedit &#xff0c;打开注册表 B、 删除项目&#xff1a;计算机 \HKEY_CURRENT_USER\Software\ScooterSoftware\Beyond Compar…

物联网实战--平台篇之(五)账户界面

目录 一、界面框架 二、首页(未登录) 三、验证码登录 四、密码登录 五、帐号注册 六、忘记密码 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/cat…

10. Django Auth认证系统

10. Auth认证系统 Django除了内置的Admin后台系统之外, 还内置了Auth认证系统. 整个Auth认证系统可分为三大部分: 用户信息, 用户权限和用户组, 在数据库中分别对应数据表auth_user, auth_permission和auth_group.10.1 内置User实现用户管理 用户管理是网站必备的功能之一, D…

远动通讯屏,组成和功能介绍

远动通讯屏&#xff0c;组成和功能介绍 远动通讯屏是基于电网安全建设而投入的远方监控厂站信息、远方切除电网负荷的设备&#xff1b;主经是由远动装置、通讯管理机、交换机、GPS对时装置、数字通道防雷器、模拟通道防雷器、屏柜及附件等设备组成。变电站远动通讯系统是指对广…

安装oh-my-zsh(命令行工具)

文章目录 一、安装zsh、git、wget二、安装运行脚本1、curl/wget下载2、手动下载 三、切换主题1、编辑配置文件2、切换主题 四、安装插件1、zsh-syntax-highlighting&#xff08;高亮语法错误&#xff09;2、zsh-autosuggestions&#xff08;自动补全&#xff09; 五、更多优化配…

顺序表的实现(迈入数据结构的大门)(2)

目录 顺序表的头插(SLPushFront) 此时&#xff1a;我们有两个思路&#xff08;数组移位&#xff09; 顺序表的头删(学会思维的变换)(SLPopFront) 顺序表的尾插(SLPushBack) 有尾插就有尾删 既然头与尾部的插入与删除都有&#xff0c;那必然少不了指定位置的插入删除 查找…

汽车之家,如何在“以旧换新”浪潮中大展拳脚?

北京车展刚刚落幕&#xff0c;两重利好正主导汽车市场持续升温&#xff1a;新能源渗透率首破50%&#xff0c;以及以旧换新详细政策进入落地期。 图源&#xff1a;中国政府网 在政策的有力指引下&#xff0c;汽车产业链的各个环节正经历着一场深刻的“连锁反应”。在以旧换新的…
最新文章