编程哲学——抽象

主要参考资料:
App Image Format: https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.4/esp32s3/api-reference/system/app_image_format.html#

目录

  • 简介
    • 抽象:从现实到模型
    • 类和对象:现实与模型的映射
    • 封装:隐藏复杂性
    • 继承:代码复用的桥梁
    • 多态:接口的多样性
  • ESP-IDF中的抽象概念
    • App Image

简介

在软件开发的广阔天地中,面向对象编程(OOP)以其独特的抽象哲学,为构建复杂软件系统提供了一种强大的方法论。

抽象:从现实到模型

抽象是面向对象编程的核心,它允许我们忽略细节,专注于对象的本质特征。在现实世界中,每一个实体都有其独特的属性和行为。例如,一辆车有颜色、速度等属性,以及行驶、停止等行为。在OOP中,我们将这些实体抽象为“类”,每个类定义了一组属性和方法,从而捕捉了实体的关键特征。

类和对象:现实与模型的映射

类是现实世界实体的抽象模型,而对象则是这些模型的具体实例。通过创建类,我们定义了一种模板,它规定了对象应具备的属性和行为。当我们需要一个具体的实体时,我们可以根据类来创建对象。这个过程不仅简化了代码的编写,也提高了代码的重用性和可维护性。

封装:隐藏复杂性

封装是OOP的另一个重要概念,它涉及到将对象的实现细节隐藏起来,只暴露出一个可以被外界访问的接口。这样做的好处是,我们可以改变对象的内部实现,而不会影响到使用该对象的其他部分。封装提高了代码的模块化,使得各个部分之间的耦合度降低,从而更容易进行维护和扩展。

继承:代码复用的桥梁

继承允许我们创建一个新类(子类),它继承了另一个类(父类)的属性和方法。这不仅减少了代码的重复,也使得我们可以在现有的基础上进行扩展和定制。继承体现了一种“是一个”(is-a)的关系,例如,所有的车辆都可以继承自一个更通用的“交通工具”类。

多态:接口的多样性

多态性是OOP的另一个关键特性,它允许我们使用统一的接口来处理不同类型的对象。这意味着,即使对象的具体类型不同,只要它们遵循相同的接口,我们就可以以相同的方式使用它们。多态性提高了代码的灵活性,使得我们可以编写更加通用和可扩展的代码。

ESP-IDF中的抽象概念

App Image

在编译好的elf文件中,DROM段自esp_app_desc_t结构体开始,这个结构体中的信息就是 App Image的抽象(在C语言中会使用结构体 来模拟 C++中的类)。
包含了以下信息:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

年薪超过30万的网工,需要具备什么技能?

网工是一个各行各业都需要的职业,工作内容属性决定了它不会只在某一方面专精,需要掌握网络维护、设计、部署、运维、网络安全等技能。 那么,网络工程师的技术水平体现在哪些方面?今天就跟你唠唠这个。 01 先来测测你的网络设计能力…

Flutter 像素编辑器#05 | 缩放与平移

theme: cyanosis 本系列,将通过 Flutter 实现一个全平台的像素编辑器应用。源码见开源项目 【pix_editor】。在前三篇中,我们已经完成了一个简易的图像编辑器,并且简单引入了图层的概念,支持切换图层显示不同的像素画面。 《Flutt…

Docker - Oracle Database 23ai Free

博文目录 文章目录 说明命令NavicatSYSTEMPDBADMIN 扩展公共用户本地用户 说明 Oracle 官方镜像仓库 Database 23ai Free | Oracle Docker 官方没有提供 Oracle Database 相关镜像, 但是 Oracle 官方镜像仓库有提供, 打开上面的链接, 选择 Database, 选择合适的版本, 如 enter…

Modern C++字面量一网打尽

C Literals 数值 二进制、八进制、十六进制字面量 二进制:0b 或 0B开头。八进制:0开头。十六进制:0x 或 0X开头。 // for different base constexpr int base2 0b1111; // 二进制 15 constexpr int base8 017; // 8进制 15 conste…

Elasticsearch:使用 Llamaindex 的 RAG 与 Elastic 和 Llama3

这篇文章是对之前的文章 “使用 Llama 3 开源和 Elastic 构建 RAG” 的一个补充。我们可以在本地部署 Elasticsearch,并进行展示。我们将一步一步地来进行配置并展示。你还可以参考我之前的另外一篇文章 “Elasticsearch:使用在本地计算机上运行的 LLM 以…

Android frida 实战: 分析全民K歌的判断逻辑

本篇进入 Android frida 实战,旨在分析学习全民K歌这个 app 演唱页面的判断逻辑。 版本:8.22.38.278 此 app 为腾讯推出的面向国内的社交娱乐类应用软件,主要功能是提供用户唱歌、录制和分享自己演唱的歌曲。当非 vip 用户演唱某 vip 歌曲等功…

三元前驱体废水回收镍钴工艺:环保与经济效益的双重胜利

在全球新能源产业迅猛发展的背景下,锂离子电池作为绿色能源的核心组件,其需求量激增,带动了上游材料市场,尤其是三元前驱体材料的蓬勃发展。然而,伴随着行业的快速扩张,三元前驱体生产过程中产生的含镍钴废…

Qt开发 | Qmake与CMake | Qt窗口基类 | VS Qt项目与QtCreator项目相互转化 | Qt架构 | Qt学习方法

文章目录 一、Qmake与CMake介绍1.Qmake2.CMake3.使用qmake还是cmake? 二、Qt3个窗口基类的区别三、vs qt与QtCreator项目相互转化方法1.QtCreator项目转VS Qt2.VS Qt项目转QtCreator项目 四、Qt架构介绍与学习方法详解 一、Qmake与CMake介绍 Qmake和CMake都是构建系…

干货分享 | TSMaster 中不同总线报文消息过滤的操作方式

TSMaster软件平台支持对不同总线(CAN、LIN、FlexRay)报文和信号的过滤,包括全局接收过滤、数据流过滤、窗口过滤、字符串过滤、可编程过滤,针对不同的总线信号过滤器的使用方法基本相同。今天重点和大家分享一下关于TSMaster中报文…

全国首场以AI数字内容风控为主题的大会正式官宣,首批演讲嘉宾和议题揭晓!

曾经我们感叹的“AI迎来了iPhone时刻”,如今已变成“iPhone迎来了AI时刻”。前段时间,苹果全球开发者大会的召开,以及闻声而起的资本市场,无一不再次佐证了AI的无穷想象。 从OpenAI直播演示GPT-4o和谷歌的I/O开发者大会2024&…

Unity踩坑记录

1. 如果同时在父物体和子物体上挂载BoxCollider&#xff0c;那么当使用&#xff1a; private void OnTriggerEnter2D(Collider2D collision){if (collision.CompareTag("CardGroup")){_intersectCardGroups.Add(collision.GetComponent<CardGroup>());}} 来判…

【linux学习十七】文件服务管理

一、FTP FTP server:FTP(File Transfer Protocol,文件传输协议 )是 TCP/IP 协议组中的协议之一 软件包&#xff1a;vsftpd/安装 yum -y install vsftpd//准备文件 touch /var/ftp/abc.txt //注释:FTP服务器的主目录:“/var/ftp/”&#xff0c;是FTP程序分享内容的本机目录…

数据库 复习题

有一个关系模式&#xff1a;工程关系&#xff08;工程号&#xff0c;工程名称&#xff0c;职工号&#xff0c;姓名&#xff0c;聘期&#xff0c;职务&#xff0c;小时工资率&#xff0c;工时&#xff09;&#xff0c;公司按照工时和小时工资率支付工资&#xff0c;小时工资率由…

【大数据】—二手车用户数据可视化分析案例

项目背景 在当今的大数据时代&#xff0c;数据可视化扮演着至关重要的角色。随着信息的爆炸式增长&#xff0c;我们面临着前所未有的数据挑战。这些数据可能来自社交媒体、商业交易、科学研究、医疗记录等各个领域&#xff0c;它们庞大而复杂&#xff0c;难以通过传统的数据处…

Webpack: 底层配置逻辑

概述 Webpack 5 提供了非常强大、灵活的模块打包功能&#xff0c;配合其成熟生态下数量庞大的插件、Loader 资源&#xff0c;已经能够满足大多数前端项目的工程化需求&#xff0c;但代价则是日益复杂、晦涩的使用方法&#xff0c;开发者通常需要根据项目环境、资源类型、编译目…

huggingface 笔记:peft

1 介绍 PEFT 提供了参数高效的方法来微调大型预训练模型。传统的范式是为每个下游任务微调模型的所有参数&#xff0c;但由于当前模型的参数数量巨大&#xff0c;这变得极其昂贵且不切实际。相反&#xff0c;训练较少数量的提示参数或使用诸如低秩适应 (LoRA) 的重新参数化方法…

探索增删改查(CRUD)操作在软件开发中的重要性

在软件开发中&#xff0c;CRUD&#xff08;Create&#xff0c; Read&#xff0c; Update&#xff0c; Delete&#xff09;是常见且基础的操作集合&#xff0c;它们构成了对数据进行基本管理和操作的核心。无论是开发Web应用、移动应用还是管理系统&#xff0c;了解和有效地实施…

通过分离有色和无色pdf页面减少打印费

该工具是我认识的一位中科大的大佬在本科毕业的时候做的一个小工具&#xff0c;去打印店打印全彩的毕业论文的话会比较贵&#xff0c;他想到有没有一种方案可以实现有彩色页面的pdf和没有彩色页面的pdf分开打印&#xff0c;前者打印彩色&#xff0c;后者打印黑白&#xff0c;这…

深入浅出:NPM常用命令详解与实践

深入浅出地讲解npm常用命令及其实践&#xff0c;可以帮助开发者更好地理解和使用这个强大的Node.js 包管理工具。以下是一些常用的npm命令及其详细解释和实践案例&#xff1a; 1&#xff1a;初始化项目&#xff1a; 命令&#xff1a;npm init用途&#xff1a;生成一个package…

MySQL数据库(二):数据库基本操作

MySQL是一种流行的关系型数据库管理系统&#xff0c;广泛用于Web应用和各种数据存储需求。通过本次介绍&#xff0c;您将学习如何进行MySQL数据库的基本操作&#xff0c;包括创建数据库和表、插入和查询数据、更新和删除记录。这些基础知识将为您打下坚实的数据库操作基础。 目…