计算机科学中的接口(Interface)介绍
计算机科学中的接口(Interface)介绍
计算机科学中,接口是一个广泛的概念,在不同上下文中有不同含义:
1.任何两电路或设备间的连接电路,用于连接CPU与内存、CPU与外设之间。这是一个重要的硬件层面的接口概念。
2.一种用来定义程序的协议,描述可属于任何类或结构的一组相关行为,规定了实现本接口的类或接口必须拥有的一组规则。软件编程接口,它强调了接口作为一种协议和行为规范的作用。
在计算机科学中,接口(Interface)这个概念不仅限于软件领域,还包括硬件领域。
软件接口(Software Interface)
软件接口包括:
编程语言中的接口(如Java或C#中的interface)
API(应用程序编程接口)
GUI(图形用户界面)
CLI(命令行接口)
硬件接口(Hardware Interface)
硬件接口是指不同硬件组件之间的连接点或通信方式。例如:
USB接口
HDMI接口
PCI接口
SATA接口
网络接口(如以太网接口)
无论是软件接口还是硬件接口,它们都服务于相同的核心目的(共同点):
定义组件之间的交互方式;
提供标准化的通信协议;
实现模块化和可互换性;
隐藏内部实现细节。
区别:
实现方式:软件接口通过代码实现,硬件接口通过物理连接和电子信号实现;
可见性:软件接口通常是抽象的,硬件接口往往有物理形态;
更新方式:软件接口可以通过代码更新,硬件接口可能需要物理替换。
在编程中,接口(interface)与API(Application Programming Interface,应用程序编程接口)的关系
在编程中,接口可以被视为API的一部分。
API是一个更广泛的概念,包括了用于软件组件间交互的所有规范,这可能包括接口定义、数据格式、通信协议等。
在讨论系统间通信时,接口可以被视为不同功能层之间或不同系统之间的通信规则,接口和API可能被互换使用。
在软件工程和面向对象编程中,接口是一种规范或契约,定义了类应该遵循的方法和属性集合,但不包含具体实现。
接口可以包含方法签名(方法名、参数、返回类型),但没有方法体。
在某些语言中,接口也可以包含属性声明。
接口只声明方法,不提供实现细节。
实现接口的类负责提供这些方法的具体实现。
在软件工程和面向对象编程中,接口提供了一个抽象层,将定义与实现分离,这有助于降低系统各部分之间的耦合度。接口在不同的编程语言中可能有不同的实现方式和语法,但它们的基本概念和作用是相似的。
编程语言中接口(Interface)知识,可以在掌握基本语法和面向对象编程基础后开始接触学习。
让我们来看看几种主要的编程语言接口情况:
Java
使用 interface 关键字定义接口
接口可以包含抽象方法、默认方法(Java 8+)、静态方法和常量
类使用 implements 关键字实现接口
支持多接口实现
public interface Printable {
void print();
}
附、Java接口介绍 https://blog.csdn.net/cnds123/article/details/130618885
C#
也使用 interface 关键字
接口可以包含方法、属性、索引器和事件
类同样使用 implements 关键字实现接口
支持显式接口实现
public interface IPrintable {
void Print();
}
Python
没有专门的接口关键字
使用抽象基类(ABC)模块来实现接口功能。Python 3.4 引入了一种新的语法来定义抽象基类(Abstract Base Classes,简称 ABCs)。这种方式不同于 Java 和 C# 中的接口定义,但它提供了一种在Python中进行接口设计和实现的方式。
通过 @abstractmethod 装饰器定义抽象方法
from abc import ABC, abstractmethod
class Printable(ABC):
@abstractmethod
def print(self):
pass
附、抽象基类(Abstract Base Classes) https://docs.python.org/zh-cn/3/library/abc.html
JavaScript
JavaScript作为一种动态类型语言,传统上并没有内置的接口概念。然而,有几种方式可以在JavaScript中模拟接口:
a. 使用对象字面量:
const Printable = {
print: function() {
throw new Error("This method must be implemented");
}
};
// 使用方式
const myObject = Object.create(Printable);
myObject.print = function() {
console.log("Printing...");
};
b. 使用ES6类和继承:
class Printable {
print() {
throw new Error("This method must be implemented");
}
}
class MyClass extends Printable {
print() {
console.log("Printing...");
}
}
c. TypeScript(JavaScript的超集)提供了更正式的接口支持:
interface Printable {
print(): void;
}
class MyClass implements Printable {
print() {
console.log("Printing...");
}
}
C++
C++不直接支持接口关键字,但可以使用纯虚函数和抽象类来实现接口的概念:
class Printable {
public:
virtual void print() = 0; // 纯虚函数
virtual ~Printable() {} // 虚析构函数
};
class MyClass : public Printable {
public:
void print() override {
std::cout << "Printing..." << std::endl;
}
};
在这个C++示例中:
Printable 是一个抽象类,作为接口使用。
print() 是一个纯虚函数(用 = 0 表示),相当于接口中的抽象方法。
派生类 MyClass 必须实现 print() 方法。
C++中的这种方式与其他语言的接口概念类似,提供了一种定义共同行为但不实现的机制。
Go
使用 interface 关键字
接口是隐式实现的,不需要显式声明实现
支持空接口和接口嵌套
type Printable interface {
Print()
}
相关文章:
计算机科学中的接口(Interface)介绍
计算机科学中的接口(Interface)介绍 计算机科学中,接口是一个广泛的概念,在不同上下文中有不同含义: 1.任何两电路或设备间的连接电路,用于连接CPU与内存、CPU与外设之间。这是一个重要的硬件层面的接口概…...

大创项目推荐 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉
文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基…...

黑芝麻科技A1000简介
文章目录 1. A1000 简介2. 感知能力评估3. 竞品对比4. 系统软件1. A1000 简介...

详解C语言分支与循环语句
分支语句 if elseswitch 循环语句 whilefordo while goto语句 文章目录 1.什么是语句2.分支语句(选择结构)2.1 if语句2.1.1 悬空else2.1.3 练习 2.2 switch语句2.2.1 在switch语句中的break2.2.2 default子句 3.循环语句3.1 while循环3.1.1 while语句中…...
Python商务数据分析知识专栏(五)——Python数据分析的应用③使用Pandas进行数据预处理
Python商务数据分析知识专栏(五)——Python数据分析的应用③使用Pandas进行数据预处理 使用Pandas进行数据预处理1.合并数据2.清洗数据3.标准化数据4.转换数据 使用Pandas进行数据预处理 1.合并数据 2.清洗数据 3.标准化数据 4.转换数据...

Nosql期末复习
mongodb基本常用命令(只要掌握所有实验内容就没问题) 上机必考,笔试试卷可能考: 1.1 数据库的操作 1.1.1 选择和创建数据库 (1)use dbname 如果数据库不存在则自动创建,例如,以下…...

Pytest+Allure+Yaml+PyMsql+Jenkins+Gitlab接口自动化(四)Jenkins配置
一、背景 Jenkins(本地宿主机搭建) 拉取GitLab(服务器)代码到在Jenkins工作空间本地运行并生成Allure测试报告 二、框架改动点 框架主运行程序需要先注释掉运行代码(可不改,如果运行报allure找不到就直接注释掉) …...
SQL面试题练习 —— 查询前2大和前2小用户并有序拼接
目录 1 题目2 建表语句3 题解 1 题目 有用户账户表,包含年份,用户id和值,请按照年份分组,取出值前两小和前两大对应的用户id,需要保持值最小和最大的用户id排首位。 样例数据 ------------------------- | year | user_id | v…...
Arthas常见使用姿势
文章目录 Arthas常见使用姿势官网基本命令通用参数解释表达式核心变量说明常用命令一些常用特殊案例举例其他技巧关于OGNLOGNL的常见使用OGNL的一些特殊用法与说明OGNL内置的虚拟属性OGNL的个人思考OGNL的杂碎,收集未做验证 Arthas常见使用姿势 官网 https://arth…...
Apache Kylin的入门学习
Apache Kylin的入门学习可以从以下几个方面进行: 1. 了解Kylin的基本概念 定义:Apache Kylin是一个开源的分布式分析引擎,它基于Hadoop和HBase构建,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能…...
React@16.x(46)路由v5.x(11)源码(3)- 实现 Router
目录 1,Router 的结构2,实现2.1,react-router1,matchPath.js2,Router.js3,RouterContext.jsx4,index.jsx 2.2,react-router-domBrowserRouter.jsxindex.jsx 1,Router 的结…...

openGauss真的比PostgreSQL差了10年?
前不久写了MogDB针对PostgreSQL的兼容性文章,我在文中提到针对PostgreSQL而言,MogDB兼容性还是不错的,其中也给出了其中一个能源客户之前POC的迁移报告数据。 But很快我发现总有人回留言喷我,而且我发现每次喷的这帮人是根本不看文…...
【国产开源可视化引擎Meta2d.js】快速上手
提示 初始化引擎后,会生成一个 meta2d 全局对象,可直接使用。 调用meta2d前,需要确保meta2d所在的父容器element元素位置大小已经渲染完成。如果样式或css(特别是css动画)没有初始化完成,可能会报错&…...
c#与倍福Plc通信
bcdedit /set hypervisorlaunchtype off...
【OceanBase诊断调优】—— 如何通过trace_id找到对应的执行节点IP
1. 前言 OceanBase作为分布式数据库,查问题找对节点很关键。好在OceanBase执行的每一条SQL都能通过trace_id来关联起来,知道trace_id怎么知道是在哪个节点发起的呢,请看本文。 2. trace_id生成规则 ob内部trace_id的生成函数如下࿰…...

鸿蒙开发Ability Kit(程序访问控制):【使用粘贴控件】
使用粘贴控件 粘贴控件是一种特殊的系统安全控件,它允许应用在用户的授权下无提示地读取剪贴板数据。 在应用集成粘贴控件后,用户点击该控件,应用读取剪贴板数据时不会弹窗提示。可以用于任何应用需要读取剪贴板的场景,避免弹窗…...

PL/SQL入门到实践
一、什么是PL/SQL PL/SQL是Procedural Language/Structured Query Language的缩写。PL/SQL是一种过程化编程语言,运行于服务器端的编程语言。PL/SQL是对SQL语言的扩展。PL/SQL结合了SQL语句和过程性编程语言的特性,可以用于编写存储过程、触发器、函数等…...
双非本 985 硕,我马上要入职上海AI实验室大模型算法岗
暑期实习基本结束了,校招即将开启。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑&…...

C盘清理和管理
本篇是C盘一些常用的管理方法,以及定期清理C盘的方法,大部分情况下都能避免C盘爆红。 C盘清理和管理 C盘存储管理查看存储情况清理存储存储感知清理临时文件清理不需要的 迁移存储 磁盘清理桌面存储管理应用存储管理浏览器微信 工具清理 C盘存储管理 查…...

晚上睡觉要不要关路由器?一语中的
前言 前几天小白去了一个朋友家,有朋友说:路由器不关机的话会影响睡眠吗? 这个影响睡眠嘛,确实是会的。毕竟一时冲浪一时爽,一直冲浪一直爽……刷剧刷抖音刷到根本停不下来,肯定影响睡眠。 所以晚上睡觉要…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...
拟合问题处理
在机器学习中,核心任务通常围绕模型训练和性能提升展开,但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正: 一、机器学习的核心任务框架 机…...