面向接口编程思想

电脑配件更换引起的思考

最近在玩一款3D游戏,对显卡的要求比较高,我的显卡配置不足以支撑,思来想去,辗转反侧,最终决定要换显卡。更换显卡需要考虑新显卡和我的主板是否兼容,涉及到具体的显卡插槽,具体有AGP,PCI,PCI-E等接口,很清楚我的插槽是PCI-E的,只要买同类插槽的,就不会担心拿回家不能用。这也就意味着可以进行置换,且我的旧显卡拿到别的电脑上也可以用,这就是重用,也就是说PC已经完美的实现了重用。从这里也想到了面向对象,为什么即使使用了面向对象的方法,也很难写出可重用的对象呢?应该是不了解其中的精髓。仔细对比分析,主板-插槽-显卡、主板-插槽-内存,我们已经可以确定,PC的可重用关键的原因是在于“插槽”。同样的思路逆推,如果转换为面向对象,主板做为一个组件,显卡、内存也是一个组件,这三个组件想要置换、重用,也需要用一个“插槽”。在面向对象程序设计中,插槽可以用什么来代替?或者插槽是什么,答案就是“接口”。对于硬件来说,不管是谁提供的“插槽”,一旦插槽得到认可,所有的设计工作都要围绕插槽来进行,主板、CPU、显卡、内存等等。这就是契约精神。在编程中,我们经常用到接口,比如前台和后台提供数据者进行对接,我们会进行讨论,会说先约定接口及传参,之后我们就可以同时开工了,等完成了之后,我们就可以进行对接了。

面向对象的接口

接着上面的内容,我们平时程序对接或进行讨论程序之间的对接,比如前台展示数据,后台提供数据,前后台需要先讨论好,参数有几个,是什么格式的,返回数据是什么。到此,后台开发人员就开工了,先定义一个方法,参数和返回值都按照之前约定的进行。程序OK了,但想要重用,还有一定的问题。问题的原因在于,我们把“接口”绑死在了某个功能或组件上,如果把这个组件去掉,就意味着接口就没有了。如果要另外开发一套提供数据的组件,就意味着要重新进行约定。

到了这里,一切都清晰了,找到了解决方案:我们把接口单独提取出来,接口单独做为一个组件或类,这样前后台程序只要和接口对接,就能保证没有问题:前台-接口、后台-接口。

面向对象编程,也是面向接口编程。

依赖倒置原则

根据上面的分析,组件和组件之间不直接交互,已经基本实现模块或组件的独立性,二者通过接口进行连接,大大减少了耦合性。在这里,我们无意间触发或遵循了面向对象的一个原则:依赖倒置(依赖倒转)原则,是不是很高大上?

依赖倒转原则:抽象不应该依赖细节,细节应该依赖于抽象。

有点绕,说白了就是要面向接口变成,不要面向实现编程。

里氏代换原则

接着分析硬件,众说周知,插槽也是标准的,我们都知道的硬盘接口就是有2.0和3.0之分。只要我们接口之间的版本相同,比如一个3.0接口插槽,绝对支持“3.0硬盘”。无论这个硬盘是三星、还是希捷。这个“3.0硬盘”可以看做是一个类,而“三星3.0硬盘”、“希捷3.0硬盘”,可以分别看做是“3.0硬盘”的子类。用一句话来说,能接“3.0硬盘”的插槽,绝对对能接“三星3.0硬盘”、“希捷3.0硬盘”,到了这里,里氏代换原则的定义也就出来了。

子类型必须能够替换掉它们的父类型。

这个原则简单吧?可能会有些疑惑,不是说接口的文章么?怎么跑父类去了,是不是跑题了?我们来分析下平时我们说的接口是什么:interface、abstract class、class。是的,这些都可以成为接口,只要你愿意。所以,没有跑题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值