浅谈接口理解

news2024/9/23 21:15:31

浅谈接口的理解

在这里我想说明的就是接口的重要性。

1、接口的定义:

百度百科给出的定义:

接口(硬件类接口)是指同一计算机不同功能层之间的通信规则称为接口。

接口(软件类接口)是指对协定进行定义的引用类型。其他类型实现接口,以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似,接口可以包含方法、属性、索引器和事件作为成员。

给出的定义相当的抽象,但是总结起来:接口就是一种通信方式。做个比喻就是:接口就是一座桥,让你从桥的这头可以走到桥的那头。

2、接口的特征:

① 抽象

② 隔离(高度抽象的事物其内核界限很清晰)

③ 稳定(其内核是固定不变)

为什么说接口是抽象的。

比如说:

我们在交流的时候,用的是语言。但是我们不会考虑什么是语言,对我们可以说是透明的。而不考虑语言正是将语言的所有细节都隐藏,不需要知道的语言的起源,发展历程等等其他。我们不是语言考古学家。

隐藏细节从而到达一定程度的抽象,并不是绝对的抽象。

隔离怎么理解:

这个不难理解。比如任何的语系都存在不同程度上的隔离,具体点就是英文和汉语,这是种天然的隔离性。在计算机中我们称作正交性,但是要做到,不是件容易的事情。

稳定呢?

抽象的事物自定稳定的属性。因为抽象的事物已将变化的外衣脱去,只留下本质。

稳定也是相对而言:

比如:A提供一套接口给B,A内部的实现可以随时变化,只要接口不变化,B就无需修改。相对于B来说是稳定的。

3、接口的作用

当有明显的模块界限,此时就体现接口,联想到中间有条河,我们怎么到对岸去。而这里的模块不仅是物理实体上的,还是无形无相看不见的。

比如:

1、电脑主机上各种接口,为了和各种外设通信。

2、插座的两孔、三孔,为了给电器提供电能。

2、两个人的对话。两个人都在说普通话,能够正常的交流,接口就是普通话。如果一个人客家话,一人说英文,那么无法沟通。

而计算机的世界接口使用的更频繁。

比如:对象(模块)的之间的通信。

其实我们每时每刻都在使用接口的含义。

4、接口的理解

可以把接口理解为使用标准,这就像是我们过桥渡河就可以,而不必知道这个桥是怎么设计的。而具体的实现是另外一回事,我们不关心。

比如:

1、cpp标准委员会只定义接口以及语义,怎么实现是你们厂商的事。

2、OpenGL也是如此。

3、C++的多态,父类只定义个标准,具体的实现每个子类都是可以自定义。

在学习设计模式的有一条原则**”依赖接口编程”**,初读并没有体会,直到工作多年,才有所体会。现在每次和同事对接第一句就先把接口定义下来,接口的稳定意味着对变化的隔离,将变化关进笼子

在这里不得不说windows系统把兼容做到极致,20年前的windows程序,放到现在Windows11依然能跑,其核心就是保持接口的稳定。为了保持接口的稳定windows也是付出了昂贵的代价。

5、什么不是接口???

接口是一种通信方式,即是通信那么必然涉及到2方以上,单独一方是没有意义的。但是实际生活中,我们讨论问题往往都会忽略上下文的环境,默认是存在的。

比如:

1、筷子,单独说筷子没意义。但是我说要吃饭了,那么筷子此时就是接口了(接口可以一方提供,也可以是第三方提供)。因为要把饭菜从碗里送到我的嘴巴里。

2、笔,单独说笔没意义。但是通过笔,将我想说的话,写出来,同大家一起讨论。此时的笔就是接口,将我的心里话写出来,让大家知道。

6、总结

我觉得接口最重要的特性就是将变化关进笼子里,即解耦。

我们写代码的时候要有一种接口思维,该暴漏什么,该隐藏什么。

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

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

相关文章

【Python】PythonRobotics:机器人算法的 Python 实现

在机器人技术的研究和开发中,理解和实现各种机器人算法是至关重要的。PythonRobotics 是一个开源项目,它提供了大量机器人算法的 Python 实现,这些算法覆盖了机器人科学的多个领域,包括定位、建图、导航、路径规划等。 ⭕️宇宙起…

nicegui标签组件lable用法深度解读和示例,源代码IDE运行和调试通过,截图为证

传奇开心果微博文系列 序言一、标签组件lable最基本用法示例1.在网页上显示出 Hello World 的标签示例2. 使用 style 参数改变标签样式示例 二、标签组件lable更多用法示例1. 添加按钮动态修改标签文字2. 点击按钮动态改变标签内容、颜色、大小和粗细示例代码3. 添加开关组件动…

美版iPhone 16 Pro完美改卡,15 Pro再见了

资深果粉应该都知道,从iPhone 14起,所有美版的iPhone,都从eSIM实体SIM,改成了全eSIM方案,彻底放弃了实体卡槽,这就给卡贴机这一行业造成了毁灭性的打击。 因为国内无法使用eSIM,即使有低价的美版…

什么是上层封禁海外流量

上层封禁海外流量(Upper-layer Blocking of Overseas Traffic)是一种网络安全策略,旨在通过在网络传输的上层进行流量控制和过滤,从而阻止来自海外的恶意流量或不必要的访问。这一措施主要用于防止分布式拒绝服务(DDoS…

C++笔记---set和map

1. 序列式容器与关联式容器 前面我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间一般没有紧密的关联关…

数据驱动农业——农业中的大数据

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、埃域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&…

win操作系统各个版本下载

MSDN, 我告诉你 - 做一个安静的工具站 (itellyou.cn) 下载地址链接转换工具 - 在线工具 (tool.lu) 通过这个网站可以再将ed2k转换成别的下载工具链接

LLM安全风险及应对

LLM安全风险主要从四个维度分析:用户输入、训练数据、模型本身以及工具和插件。 风险类别具体风险风险解释应对措施具体举例用户输入相关风险提示注入(Prompt Injection)攻击者通过设计特定输入,使模型生成恶意或不安全的输出。- …

进度调度切换

tips: 进程=内核数据结构(PCB/task_struct)+代码和数据 UID:每个用户对应的id 进程分类 & 进程关系 僵尸进程 父在子死 进程退出 代码不会再执行了,系统可以立即释放对应代码和数据进程…

推荐一款开源的Redis桌面客户端

TinyRDM 是一个现代化的、轻量级的跨平台 Redis 桌面客户端,能在 Mac、Windows 和 Linux 系统上使用。它有着现代化的设计风格,界面既简洁又清晰,操作起来方便又高效。不管是刚开始接触的新手,还是经验丰富的开发者,都…

【安装教程】Windows环境下Neo4j的安装与配置

【安装教程】Windows环境下Neo4j的安装与配置 Neo4j的概念一、安装前准备——JDK二、Neo4j的安装三、Neo4j的环境配置四、安装验证 Neo4j的概念 Neo4j 是一个高性能的图形数据库管理系统,它使用图形模型来存储和处理数据。Neo4j 的图形模型由节点和边组成&#xff0…

WebLogic 漏洞复现

1、后台弱⼝令GetShell 默认账号密码:weblogic/Oracle123 weblogic常⽤弱⼝令:https://cirt.net/passwords?criteriaweblogic 这⾥注意, 单个账号错误密码5次之后就会⾃动锁定。 http://47.121.212.195:7001/console 2、登录后台后&#…

矩阵分析 线性空间和线性变换 笔记手稿

1线性空间的概念 数域 线性空间 证明 线性相关和线性无关 线性空间的基 基的性质 基变换和坐标变换 子空间和维数定理 两个子空间的交和和都是子空间 维数公式 子空间扩充定理 维数公式及其证明 直和 证明 线性空间的同构 注意:映射的概念 同构的性质 线性变换的…

前端组件库Element UI 的使用

一、准备工作 1.确保安装了开发软件 VS Code(此处可查阅安装 VS Code教程),确保相关插件安装成功 2.安装Node.js 和创建Vue项目(此处可查阅安装创建教程) 3.成功在VS Code运行一个Vue项目(此处可查阅运行…

HTML+CSS学习笔记

目录 HTML 1.开发环境 2.创建HTML文件 3.HTML元素 3.1HTML文件结构 3.2HTML标签 3.3HTML属性​编辑​编辑 3.4HTML区块 3.4.1块元素 3.4.2行内元素 3.5HTML表单 CSS 1.CSS简介 2.CSS语法​编辑 3.CSS三种导入方式 内联样式 内部样式 外部样式 4.选择器​ 5.C…

老挝语方言那么多,怎么沟通交流?可以用《老挝语翻译通》app

准备前往老挝探险,却担心语言不通?《老挝语翻译通》App来帮忙,专为老挝语学习者和旅行者设计,让你轻松掌握老挝语,无需打字,说话即可翻译。 应用特色: 中老互译:实时中文与老挝语互…

xlsx单元格宽度自适应内容宽度

xlsx单元格宽度自适应内容宽度 全选内容区域。参考 按下图操作

文心智能体搭建步骤

通过使用文心智能体平台来创建智能体的过程。这种方法可以让没有编程经验的人也能快速构建智能体,降低了技 术门槛。以下是一些建议和心得: 1.选择合适的平台:文心智能体平台是一个优秀的选择,它提供了零代码和低代码的开发环境,极大地降低了…

[Linux][进程] 认识进程

基本概念 进程是一个操作系统术语,用来管理与操作程序.在windows下打开任务管理器即可查看目前打开的所有进程 PCB 进程控制块,从代码层面来说 PCB 是进程所有属性的一个结构体,在Linux源码中PCB指的是struct task_struct. Linux环境下: 进程 task_struct 代码 …