.NET简谈接口
自从面向对象开发方式的出现,抽象的概念就开始日新月异的发展,面向对象编程、面向接口编程、面向组件编程等等;这一系列的概念都是软件工程所追求的思想范畴,高类聚低耦合。
今天我要简谈的是面向对象里面非常重要的也是非常抽象的概念,接口。谈起接口多少人曾经为之痛苦过,尤其是一些刚入门的开发人员(包括小弟),百思不得其解,啥叫接口,接口能干嘛用,用不用有什么区别;等等问题困扰着,这些问题不解决不弄明白,很难在面向对象领域混,更别谈面向对象开发了,可能有人认为面向对象开发就是麻烦我不用一样也能开发,开发一个项目又是分这个层,又是分那个层的,繁琐。这中情况我就没有权利去发表任何意见了。仁者见仁智者见智吧;
接口是面向对象里面非常重要的概念,我们暂且不谈面向对象里面的接口;其实接口在我们日常生活中到处可见,比如自来水的水管、燃气阀门、电视机的插头等等;在面向对象里面的接口概念其实跟这些都是大同小异的。为什么要提倡进行面向对象软件开发呢,我想就是将我们开发的方式完全能模仿自然界的生存规律,在没有彻底理解面向对象里面的接口时,请注意千万不要自己欺骗自己,简单的自已打个比方就OK了(别人这么说,我也这么想一下),这些问题一定要搞清楚,本人有过成功理解面向接口的经验,希望通过本文章能帮助您小理解一下;后面的升华(面向对象设计、面向接口设计等等),还得靠自己去摸索。我们再来看一下,在我们计算机里面存在哪些接口,比如我们的硬件与OS的接口,硬件存在的数量数不胜数,各种各样,要想完全能与OS对接,能让我们的软件使用,必须遵循一定的接口,在我们的OS与硬件之间存在着一层,硬件抽象层;
请看图:
什么叫硬件抽象层:硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化;目的就是使用这一层来抽象化所有的硬件接口,对上层使用统一的接口调用;根本不需要关注有哪些硬件,只要大家都遵循一致的接口就能互相通讯,互相调用;有一位大师曾经说过:在计算机科学领域里任何一个问题都能通过添加一个间接层来解决;这里的接口是一个比较大的开发思想,但是它与代码中的接口概念是完全一样的,都是提高抽象性,提高独立性;
我们回到开发代码中来,我就拿.NET来示范了(本人只会C#),在某一个编程语言里面的接口其实就和上面的硬件接口层是一个意思,我们拿一个例子来说吧,我就奉献我认为最能说明接口问题的例子,这个例子一直伴随着本人理解到现在,每当我有问题时,我就利用这个例子来打比方,其实很简单的一个例子,就是完全模仿现实生活中的场景,也是面向对象所最求的精髓;都说演员要感受生活才能演好戏,我们程序员也要感受生活才能写出好的程序;(开个玩笑)
例子:假如我是一家生产水管公司的老板,我要生产所有能被家庭、工厂、企业使用的水管;要想生产这些水管,就必须要知道这些水管能与家庭、工厂、企业进行对接的条件,家庭、工厂、企业都使用些什么规格、型号的水管;这些东西那里来,找啊;注意这里就形成了第一个接口,各厂家的水管规格、型号说明书,这个说明书就是我们这里的接口;知道了各个生产厂商的水管的规格、型号说明书,我就知道怎么与之对接了;
请看图:
各个厂商都公布了自己公司生产的商品的一系列说明性信息,只要我们找到了这些信息就可以生产了;我们把图转换成C#代码,请看图:
在我们解决方案中有三家厂商公布了说明书,内容是,请看图:
我这里就给出一个属性,水管的半径;在接口里面不得有任何的实现代码,只能是申明要实现的代码;让要实现的对象去完成;这个接口的作用就是当我生产的水管与厂商的水管进行对接时,要去读取的属性标识;记住,接口是实现的定义,是一种规则,一种描述,不不包括实现代码;
有了说明书我要回去生产了,请看图:
代码图请看:
在项目里面多了一个本公司的项目,我们引用生产商1,然后实现规格说明书接口,请看图:
实现了接口,就可以与生产商1的产品进行对接了;记住,任何一个公开的接口,接口里面的东西都是公开方必须要使用到的东西,必须实现;仔细想想我们生活中,当一个水阀门没有开关时,那是多可怕的;下面实现对接,请看图:
任何接口的实现在最后都会被调用,所以这是接口的本质,它将实现的规格对外公开,让大家去实现,只要遵循接口就等于它自己的实现;面向对象编程的最高境界就是面向接口编程,接口就好比一个工程的工程图纸,只要将图纸给包工头,让他去实施就OK了;请看代码图:
接口就讲完了,简简单单的代码希望您能看的懂;最后我们总结一句:
接口就好比我们自然界中的说明文档,而实现就是我们依照说明文当生产出来的能使用的实体,接口是一切事物的抽象定义,一切事物的抽象描述;
.NET简谈接口的更多相关文章
- .NET简谈——跨进高级编程门槛的必经之路
我们继续C#基础知识的学习,这篇文章对前面基础知识学习的朋友有着举足轻重的作用:为了延续基础知识学习的热情,我编写了这篇特殊的文章. 本篇文章的中心是想借“.NET简谈反射(动态调用)”一文继续发挥下 ...
- .NET简谈构件系统开发模式
转自[王清培] http://www.cnblogs.com/wangiqngpei557/archive/2011/06/14/2080416.html 在本人的“.NET简谈插件系统开发模式”一文 ...
- 简谈Java语言的封装
简谈Java语言的封装 封装的定义 封装将复杂模块或系统的逻辑实现细节隐藏,让使用者只需要关心这个模块或系统怎么使用,而不用关心这个模块或系统是怎么实现的. 在面向对象的的编程中,我们一般通过接口来描 ...
- MPI简谈
MPI简谈 MPI是分布式内存系统,区别于OpenMP和Pthreads的共享内存系统.MPI是一种基于消息传递的并行编程技术,是如今最为广泛的并行程序开发方法. MPI前世今生 MPI(Messag ...
- 简谈Java语言的继承
Java语言的继承 这里简谈Java语言的三大特性之二——继承. Java语言的三大特性是循序渐进的.是有顺序性的,应该按照封装-->继承-->多态这样的顺序依次学习 继承的定义 百度百科 ...
- 简谈HTML5与APP技术应用
HTML5到底能给企业带来些什么? HTML5是近年来互联网行业的热门词汇,火的很.微软IE产品总经理发文: 未来的网络属于HTML5.乔布斯生前也在公开信<Flash之我见>中预言:像H ...
- DDD-领域驱动设计简谈
看到网上讨论 DDD 的文章越来越多,咱也不能甘于人后啊,以下是我对 DDD 的个人理解,短小精悍,不喜忽喷. 也谈DDD(领域驱动设计) 解决什么问题 传统模式,产品评审结束,开发人员就凭经验拆分模 ...
- Hibernate入门与简谈
Hibernate jdbc Java Databases Connectivity, 他是提供了一组Java API来访问关系数据库的Java程序.这些Java API 可以使Java应用程序执行S ...
- 简谈ashx
是一般处理程序, 是asp.net web 组件的一种,ashx是其扩展名. 实现IHttpHandler接口,接收并处理http请求.这个接口有一个IsReusable成员,一个待实现的方法Proc ...
随机推荐
- IBatis 2.x 和 MyBatis 3.0.x 的区别(从 iBatis 到 MyBatis)
从 iBatis 到 MyBatis,你准备好了吗? 对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层框架了,在 Hibernate.JPA 这样的一站式对象 / 关系 ...
- MRDS学习三——机械车的改良(Activity的介绍)
Activity:VPL中化繁为简的工具,可以使得真个VPL容易让人看懂,也能跟好的控制.它就很像把一堆比较复杂但相关的流程组合成一个自定义的Activity. 完成Activity的定义: 第一步: ...
- jQuery1.11源码分析(1)-----Sizzle源码概览[原创]
最近在啃jQuery1.11源码,上来就遇到Sizzle这个jQuery的大核心,虽然已经清楚了Sizzle的用途,先绕过去也没事,但明知山有虎偏向虎山行才是我们要做的. 本文面向的阅读对象:正在学习 ...
- Unity3D 之脚本架构,优雅地管理你的代码
本文参考雨松MOMO大神的帖子: 图片全部来自他的帖子(请允许我偷懒下) --------------------------------------------------------------- ...
- myeclipse 第一步
今天查myeclipse的一个不常用快捷键的时候,意外发现了一个学习myeclipse开端的博文(别问我是怎么查到这篇博文的....两个字:顺手),感觉比较详细,特意记下来, 别人的分享博客: htt ...
- Reprint: ADB is Not Recognized as an internal or external command Fix
ADB: Android Debug Bridge http://zacktutorials.blogspot.hk/2013/04/adb-is-not-recognized-as-internal ...
- 在Heroku部署时,无法加载 css,js,图片资源解决办法
解决方案: 首先查看Gemfile, 确保group :production do 里添加了 gem "rails_12factor", '0.0.2' 然后在本地执行 rails ...
- ZOJ 3696 Alien's Organ
泊松分布.... Alien's Organ Time Limit: 2 Seconds Memory Limit: 65536 KB There's an alien whose name ...
- 【强烈推荐】如何给TortoiseGit 配置密钥?
TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥.也就是说使用 ssh-keygen -C "username@email.com" - ...
- JS常见错误和分析
列举一些在前端开发中遇到的一些错误信息和解决办法 错误信息 解决办法 Uncaught SyntaxError: Unexpected token o 使传入的字符串不是符合严格的JSON格式会抛出异 ...