浅谈接口的理解
在这里我想说明的就是接口的重要性。
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、总结
我觉得接口最重要的特性就是将变化关进笼子里,即解耦。
我们写代码的时候要有一种接口思维,该暴漏什么,该隐藏什么。