嵌入式开发中的抽象、封装与继承

news2024/11/18 19:44:23

嵌入式开发中的抽象、封装与继承

## 1 何从实现?

OOP 是 CPP 的显著特征,尽管它是一种多重范式的语言

第一部分谈的是产品的实现(implement)而非产品的设计,因为对于个人开发者而言,往往是知道如何实现产品,而后才着手做整体设计的。这并不是说实现高于设计,而是承认此类开发者的首要驱动力通常不是用户需求,而是尝试新事物的热情。

在这里插入图片描述

对新事物的尝试是以一些原则为基础的。从一年级学习电路原理开始,基尔霍夫定律指导下的‘前后级独立’的分析原则就印刻在每个电子/控制/仪器专业的预备工程师心中。各类软件工程实施原则也时刻提醒我们模块化设计对系统的可维护性与可拓展性的重要意义。这就是说,产品的模块化应当尽早开展,最好在需求分析阶段就将产品拆解成多个需求模块,后续设计时则只需针对各个需求模块之间的衔接关系做出定义即可。

在这里插入图片描述

尽管C++(C PLUS PLUS) 是一种多重范式(Multiple paradigms)的语言,但面向对象(Object Oriented Programming)仍不失为它最显著的特征。类似于 CPP,尽管产品设计的原则成千上万,但对需求的抽象仍是并仍将长期是产品实现最关键的预处理。

在这里插入图片描述

2 何必抽象?

计算机科学是关于计算机的科学,计算机技术是关于抽象的技术

在这里插入图片描述

  • 应用
  • 编程语言/运行时
  • 操作系统
  • 处理器
  • 计算单元
  • 数字逻辑/电路
  • 物理布局(VLSI)
  • 流片

计算机体系结构中,每一层级的设计者都只需要考虑下一层层级的问题,不需要考虑下一层级的下一层级的问题。所以抽象即是简化,抽象提高效率。

3 何须封装?

尼泊尔军刀或许比电钻功能更多,但我们需要的是电钻

这是某处理器的地址映射图,从中可以看到两条 APB 总线的地址范围。片上所有的外设都挂载在这两条总线上,开发者要操作外设,就得以这两条总线的起始地址为基地址访问外设。

在这里插入图片描述

这是 C++ Boost 库主页上的图,一个红色按钮,体现了一键可得的设计哲学。

在这里插入图片描述

当然这种对比略显夸张,但良好的封装的却可以屏蔽掉不必要的细节,极大节省开发者的精力。

4 何谈继承?

“寻找别人已经走过的路”(Find a path that others have already traveled)

我们在解决问题或实现目标时,应当寻找已经有人成功探索过的方法和经验。通过借鉴他人的经验,我们可以避免重复的探索和错误,并更有效地达到目标。

在这里插入图片描述在这里插入图片描述在这里插入图片描述

以操作系统为例,它将处理器抽象为进程/线程、将主存抽象为内存管理、将磁盘抽象为文件系统,我们可以借鉴/复用操作系统中的这些组件,而不必自行开发。

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

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

相关文章

港科夜闻|香港科大校长叶玉如教授、香港科大(广州)校长倪明选教授等两校领导共同出席香港科大(广州)首批本科新生见面会...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大校长叶玉如教授、香港科大(广州)校长倪明选教授等两校领导共同出席香港科大(广州)首批本科新生见面会。8月16日,香港科大(广州)首批本科新生参加了一次具有特殊意义的见面会。香港科大、香港科大(广州…

菜单中的类似iOS中开关的样式

背景是我们有需求,做类似ios中开关的按钮。github上有一些开源项目,比如 SwitchButton, 但是这个项目中提供了很多选项,并且实际使用中会出现一些奇怪的问题。 我调整了下代码,把无关的功能都给删了,保留核…

Unsafe Filedownload

文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后会开始执行下载代码,将该文件名对应的文件response给浏览器&am…

XDR解决方案正式发布

面对日益严峻的网络安全形势,为了增强安全防护能力,不同单位经常不定期举行以真实网络目标为对象的攻防实战演练,旨在发现、暴露和解决安全问题,检验各个企业单位的网络安全防护水平和应急处置能力。 作为攻防实战防守方的蓝队&am…

WebStrom 前端项目Debug

1. 正常启动前端项目 2. 配置webStrom的JavaScript Debugger 点击Edit Configurations添加avaScript Debug填写URL 为项目启动路径配置要Debug的浏览器-remote-allow-origins* (最重要,否则唤起的是一个about:blank空白页面) 3. 启动Debug模…

[ MySQL ] — 基础增删查改的使用

目录 表的增删查改 Create 单行数据 全列插入 多行数据 全列插入 多行数据 指定列插入 不存在插入存在则更新 替换 Retrieve SELECT 列 全列查询 指定列查询 查询字段为表达式 为查询结果指定别名 结果去重 WHERE 条件 结果排序 筛选结果分页 Update De…

GPT系列总结

1.GPT1 无监督预训练有监督的子任务finetuning https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf 1.1 Unsupervised pre-training (1)通过一个窗口的输入得到下一个token在目标token上的一个概率分布…

all in one之安装pve(第一章)

第一章 安装PVE PVE安装 pverufusultraISO下载地址下载地址下载地址 因为我使用的是SD卡存储,尝试rufus安装失败,建议使用 ultraISO进行镜像写入。 U盘推荐4G往上。 下载pve 我下载的pve版本是7.4 ultraISO 把镜像写入u盘 下载完成后需要把镜像文件…

小米分享 | 解密面试题:网易面试如何回答“创建线程有哪几种方式?”

大家好,我是你们的小米!今天要和大家一起探讨一个在技术面试中常见的问题:创建线程有哪几种方式?这可是个经典面试题哦!不过别担心,小米在这里为你详细解析,帮你轻松应对,让你在面试…

【Unity每日一记】关于五种范围检测方法的总结

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

Hlang--用Python写个编程语言-变量的实现

文章目录 前言语法规则表示次幂实现变量实现优先级实现步骤解析关键字语法解析解释器总结前言 先前的话,我们终于是把我们整个架子搭起来了,这里重复一下我们的流程,那就是,首先,我们通过解析文本,然后呢遍历文本当中的我们定义的合法关键字,然后呢,把他们封装为一个T…

基于Redis的Geo实现附近商铺搜索(含源码)

微信公众号访问地址:基于Redis的Geo实现附近商铺搜索(含源码) 推荐文章: 1、springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表; 2、SpringBoot用线程池ThreadPoolTaskExecutor异步处理百万级数据; 3、基于Redis的Geo实现附近商铺搜索…

34.Netty源码之Netty如何处理网络请求

highlight: arduino-light 通过前面两节源码课程的学习,我们知道 Netty 在服务端启动时会为创建 NioServerSocketChannel,当客户端新连接接入时又会创建 NioSocketChannel,不管是服务端还是客户端 Channel,在创建时都会初始化自己…

Azure文件共享

什么是Azure文件共享 Azure文件共享是一种在云中存储和访问文件的服务。它允许用户在不同的计算机、虚拟机和服务之间共享数据,并在应用程序中进行访问、修改和管理。 Azure文件共享可以用于各种用途,例如: 共享文件资源给多个虚拟机或服务…

P6685 可持久化动态仙人掌的直径问题

思路1&#xff1a;二分快速幂 #include<bits/stdc.h> using namespace std; #define int long long int n,m; bool check(int a,int b){int ans1;while(b){if(a>n)return false;if(b&1)ans*a;if(ans>n)return false;aa*a;b>>1;}return ans<n; } voi…

STM32CubeMx之freeRTOS定时器使用

需要修改定时器时钟 xTimerChangePeriod(tim1Handle,500,200);//发送队列等待时间 第二个参数为修改的ms xTimerStart(tim1Handle,100);//开启定时器 xTimerStop(tim1Handle,100);//关闭定时器 一定注意定时器任务优先级 要大一点 不然会使用不了

【GaussDB】 SQL 篇

建表语句 表的分类 普通的建表语句 复制表内容 只复制表结构 create table 新表名(like 源表名 including all); 如果希望注释被复制的话要指定including comments 复制索引、主键约束和唯一约束&#xff0c;那么需要指定including indexes including constraints &#xf…

AI 媒人:为什么图形神经网络比 MLP 更好?

一、说明 G拉夫神经网络&#xff08;GNN&#xff09;&#xff01;想象他们是人工智能世界的媒人&#xff0c;通过探索他们的联系&#xff0c;不知疲倦地帮助数据点找到朋友和人气。数字派对上的终极僚机。 现在&#xff0c;为什么这些GNN如此重要&#xff0c;你问&#xff1f;好…

铺设道路(c++题解)

题目背景 NOIP2018 提高组 D1T1 题目描述 春春是一名道路工程师&#xff0c;负责铺设一条长度为 n 的道路。 铺设道路的主要工作是填平下陷的地表。整段道路可以看作是 n 块首尾相连的区域&#xff0c;一开始&#xff0c;第 i 块区域下陷的深度为 di​ 。 春春每天可以选择…

没有父母“托底”的人生,到底有多累?

提起著名的心理学家和人际关系学家戴尔卡耐基。 多数人都不会太陌生&#xff0c;他的《人性的弱点》一书更是家喻户晓的程度。 这本书里总是能用一些接近我们生活的实例&#xff0c;去说明一些与人交往的方法和结论&#xff0c;实用性非常强大。 不管是做人还是处事&#xf…