《C++API设计》读书笔记(1):API简介

news/2024/4/26 18:22:26/文章来源:https://blog.csdn.net/u013412391/article/details/128427512

前言

虽然书名上写着“C++”,但是正如【译者序】所说:“本书所及,已经超出了标题所指的C++API设计——好的API所具备的特性其实是语言无关的”。

本书有12章,我想分章节做读书笔记,按自己的思路记下我最关注的内容。

什么是API?

API(Application Programming Interface)是一个明确定义的接口,提供了对某个问题的抽象,以及客户与解决该问题的软件组件之间交互的方式。

类似于“契约和承包人”:承包人提供了API并承诺调用它将完成某项任务,你不必关心它具体是怎么做的,你只负责挑选合适的API就行。

“API开发”相较于“普通软件开发”有什么不同?

  • API是面向开发者设计的接口。(而普通软件面向的是一般用户)
  • 多个应用程序会共享同一个API。这意味如果API出现错误将会影响多个程序。
  • 修改API时,必须尽可能保证向后兼容。你不知道别人在哪使用了你的API。
  • 也出于向后兼容的需求,所以在开发流程上要控制变更流程。(即审核更严格)
  • API生存周期一般比较长。前期投入的成本比较高,但做好后会降低长期成本。
  • 需要良好的文档。
  • 自动化测试。

我为什么要编写API?

主要目的是隐藏该模块内部的实现细节。这有很多好处:

  • 在未来可以自由修改内部实现,而不影响外部调用。
  • 促进模块化
  • 减少代码重复
  • 易于在之后优化

我为什么要使用别人的API?

主要目的就是代码复用,而非从零开始造轮子。

(现代应用程序通常都是基于很多API建立起来的,而这些API又依赖于其他API)

团队为什么要使用API?

主要目的就是并行开发

比如你可以先编写一个占位用的API,其他人在开发时可以调用这个占位的API,而非等待你完全写好API后才开始他们的工作。

什么时候我不要编写API?

编写API需要花费更多的精力,如果你没有提供给他人接口的需求,就不需要。

但是——这并不是编写劣质代码的理由。从长远来看,坚持API的设计原则还是值得的。(所以说还是尽量编写好的API)

什么时候我要小心使用API?

  • 许可证限制。
  • 功能不符合我预期
  • 缺少源代码。这导致出了问题后我无法修复。
  • 缺少文档,这导致我无充分信任它的行为。

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

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

相关文章

WEB1.0起源:全球首个网站info.cern.ch

伯纳斯李(图)1990年创立第一个网站。 info.cern.ch是世上第一个网站,提供有关万维网的资料。 info.cern.ch这个网站依然运作如常。 英国科学家蒂姆伯纳斯-李 (Tim Berners-Lee) 于 1989 年在 CERN 工作期间发明了万维网 (WWW)。Web 最初的构思…

mqtt的使用与二次封装

前提:先安装Mosquitto并启动服务,可使用mqttx进行接收发送的测试。 Mosquitto以配置启动命令 mosquitto -c mosquitto.conf -v原文链接:mqtt的使用 本文为测试使用固无账号密码,可在原文查看 封装后实现效果,加入一个…

耗时二周,万字总结Maven简明教程,与君共勉!

什么是Mavne Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM:Project Object Model),一组标准集合。由于 Maven 使用标准目录布局和默认构建生命周期,开发团队几乎可以立即自动化项目的构建基础设施。在多个开发团队环…

消息队列RabbitMQ学习笔记(四)死信队列和延迟队列

1. 死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理 解,一般来说,producer 将消息投递到 broker 或者直接到queue 里了,consumer 从 queue 取出消息 进行…

Linux 下 使用点阵在LCD上显示汉字,字符

文章目录前言一、显示字符1.获取点阵:2.描点(显示字符函数):3. 要打开LCD设备:4. 通过ioctl 获取Framebuffer参数:5. 通过mmap映射出Framebuffer的地址:6.清屏并显示字符:二、显示汉字1.区位码&…

多线程基础入门

文章目录前言一、认识线程(一)概念1.线程是什么2.为啥要有线程(轻量级进程)为什么线程比进程更轻量经典面试题:谈谈进程和线程的区别和联系3.线程的结构(二)第一个多线程程序(三&…

我国用电信息采集系统行业应用需求及市场容量分析 现6省上线运行

用户用电信息采集系统是通过对配电变压器和终端用户的用电数据的采集和分析,实现用电监控、推行阶梯定价、负荷管理、线损分析,最终达到自动抄表、错峰用电、用电检查(防窃电)、负荷预测和节约用电成本等目的。建立全面的用户用电…

RabbitMQ 第一天 基础 4 RabbitMQ 的工作模式 4.4 Topic 通配符模式 4.5 工作模式总结

RabbitMQ 【黑马程序员RabbitMQ全套教程,rabbitmq消息中间件到实战】 文章目录RabbitMQ第一天 基础4 RabbitMQ 的工作模式4.4 Topic 通配符模式4.4.1 模式说明4.4.2 代码编写4.4.3 小结4.5 工作模式总结第一天 基础 4 RabbitMQ 的工作模式 4.4 Topic 通配符模式 …

32天高效突击:开源框架+性能优化+微服务架构+分布式,面阿里获P7(脑图、笔记、面试考点全都有)

今年的大环境不佳,所以大部分的人在今年的招聘旺季都没有收获到好的结果。 但不要着急,今天分享的内容则是由 一位阿里P7的面试心得,通过32天的高效突击训练,成功拿下offer的学习方法。 篇章分为三大章节,可以根据自…

day 10 模拟和高精度

P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布 #include<bits/stdc.h> using namespace std; int n, na, nb, fa, fb;//f:得分 int a[205], b[205];void fun(int ta, int tb){if(ta 0 && tb 1) fb;if(ta 1 && tb 0) fa;if(ta 0 && tb …

【nowcoder】笔试强训Day2

目录 一、选择题 二、编程题 2.1排序子序列 2.2倒置字符串 一、选择题 1.A 派生出子类 B &#xff0c; B 派生出子类 C &#xff0c;并且在 java 源代码有如下声明&#xff1a; 1. A a0new A(); 2. A a1new B(); 3. A a2new C(); 问以下哪个说法是正确的&#xff08;&…

机器学习 | 线性回归

一.基本原理 利用回归方程&#xff08;函数&#xff09;对一个或多个自变量&#xff08;特征值&#xff09;和因变量&#xff08;目标值&#xff09;之间关系进行建模的一种分析方式 根据线性代数&#xff0c;我们可以定义方程 xwy&#xff0c;在线性回归问题中&#xff0c;x…

前端小知识:赋予变量默认值(逻辑与运算符、空值合并运算符、逻辑空运算符)

8. 逻辑与运算符、空值合并运算符、逻辑空运算符&#xff08;可用赋予默认值&#xff09; &#xff08;空值合并运算符&#xff09;官方文档&#xff1a; https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing   &#xff08;逻辑…

【推荐收藏】这份图解算法数据结构的材料太良心

5年前发生的一件事&#xff0c;成为了我职业生涯的重要转折点。当时的我在交大读研&#xff0c;对互联网求职一无所知&#xff0c;但仍然硬着头皮申请了 Microsoft 实习生。面试官让我在白板上写出“快速排序”代码&#xff0c;我畏畏缩缩地写了一个“冒泡排序”&#xff0c;并…

1754. 构造字典序最大的合并字符串

摘要 1754. 构造字典序最大的合并字符串 一 贪心算法分析 题目要求合并两个字符串 word1 与 word2&#xff0c;且要求合并后的字符串字典序最大。首先需要观察一下合并的选择规律&#xff0c;假设当前需要从 word1​ 的第 i 个字符和 word2​ 的第 j个字符选择一个字符加入到…

自制macOS安装镜像iso虚拟机用

在网上下载的用于在虚拟机中安装的镜像版本相对比较旧。安装完成后还要进行升级比较麻烦。于是我就想自己制作安装镜像了。 精华 #创建空白磁盘镜像 hdiutil create -o /tmp/ventura -size 13800m -volname ventura -layout SPUD -fs HFSJ #挂载上面创建的镜像 hdiutil attac…

内容资产管理11问

&#x1f447;点击一键关注主笔&#xff1a;邹小困、邝晴岚主持人&#xff1a;增长黑盒分析师Emma出品&#xff1a;增长黑盒研究组前言在这个信息爆炸的数据时代&#xff0c;各个行业正积极推进数字化转型&#xff0c;产业升级与技术赋能成为主题之一。在推进企业线上线下融合的…

最近面试遇到一个算法题,简单写一点。

第⼀题&#xff08;必答&#xff09; 请针对有重复数字的数组设计⼀个快排算法&#xff0c;⽐如&#xff1a;[34, 34, 89, 1, 1, 20, 12]&#xff0c;排序后结果为 [89,34,34,20,12,1,1] 第⼆题&#xff08;必答&#xff09; 请利⽤Redis 实现⼀个通⽤分布式锁&#xff0c;并…

B+树 [数据结构与算法][Java]

B树 B树是B树的一种变形 我们通过一颗四阶B树来理解认识一下B树:(如下:) 我们其实从图上就可以看出B树和B树是有很多不同之处的 比如我们的B树中将叶子结点层的所有结点使用一个链表串联了起来B树中对于非叶子结点都是只是存储的索引(指针), 并没有存储关键字, 所以我们最终查…

Linux系统基础——BIOS和Bootloader

BIOS和Bootloader 特此说明: 刘超的趣谈linux操作系统是比较重要的参考资料&#xff0c;本文大部分内容和所有图片来源于这个专栏。 1 了解背景 1.1 目的 操作系统不是在板子上电就直接运行的&#xff0c;上电到系统启动的中间过程要搞明白&#xff0c;比如了解linux系统启动…