自从面向对象开发方式的出现,抽象的概念就开始突飞猛进的发展,面向对象编程、面向接口编程、面向组件编程等等;这一系列的概念都是软件工程所追求的思想范畴,高类聚低耦合。程序员
今天我要简谈的是面向对象里面很是重要的也是很是抽象的概念,接口。谈起接口多少人曾经为之痛苦过,尤为是一些刚入门的开发人员(包括小弟),百思不得其解,啥叫接口,接口能干吗用,用不用有什么区别;等等问题困扰着,这些问题不解决不弄明白,很难在面向对象领域混,更别谈面向对象开发了,可能有人认为面向对象开发就是麻烦我不用同样也能开发,开发一个项目又是分这个层,又是分那个层的,繁琐。这中状况我就没有权利去发表任何意见了。仁者见仁智者见智吧;编程
接口是面向对象里面很是重要的概念,咱们暂且不谈面向对象里面的接口;其实接口在咱们平常生活中处处可见,好比自来水的水管、燃气阀门、电视机的插头等等;在面向对象里面的接口概念其实跟这些都是大同小异的。为何要提倡进行面向对象软件开发呢,我想就是将咱们开发的方式彻底能模仿天然界的生存规律,在没有完全理解面向对象里面的接口时,请注意千万不要本身欺骗本身,简单的自已打个比方就OK了(别人这么说,我也这么想一下),这些问题必定要搞清楚,本人有过成功理解面向接口的经验,但愿经过本文章能帮助您小理解一下;后面的升华(面向对象设计、面向接口设计等等),还得靠本身去摸索。咱们再来看一下,在咱们计算机里面存在哪些接口,好比咱们的硬件与OS的接口,硬件存在的数量数不胜数,各类各样,要想彻底能与OS对接,能让咱们的软件使用,必须遵循必定的接口,在咱们的OS与硬件之间存在着一层,硬件抽象层;编程语言
请看图:ide
什么叫硬件抽象层:硬件抽象层是位于操做系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化;目的就是使用这一层来抽象化全部的硬件接口,对上层使用统一的接口调用;根本不须要关注有哪些硬件,只要你们都遵循一致的接口就能互相通信,互相调用;有一位大师曾经说过:在计算机科学领域里任何一个问题都能经过添加一个间接层来解决;这里的接口是一个比较大的开发思想,可是它与代码中的接口概念是彻底同样的,都是提升抽象性,提升独立性;spa
咱们回到开发代码中来,我就拿.NET来示范了(本人只会C#),在某一个编程语言里面的接口其实就和上面的硬件接口层是一个意思,咱们拿一个例子来讲吧,我就奉献我认为最能说明接口问题的例子,这个例子一直伴随着本人理解到如今,每当我有问题时,我就利用这个例子来打比方,其实很简单的一个例子,就是彻底模仿现实生活中的场景,也是面向对象所最求的精髓;都说演员要感觉生活才能演好戏,咱们程序员也要感觉生活才能写出好的程序;(开个玩笑)操作系统
例子:假如我是一家生产水管公司的老板,我要生产全部能被家庭、工厂、企业使用的水管;要想生产这些水管,就必需要知道这些水管能与家庭、工厂、企业进行对接的条件,家庭、工厂、企业都使用些什么规格、型号的水管;这些东西那里来,找啊;注意这里就造成了第一个接口,各厂家的水管规格、型号说明书,这个说明书就是咱们这里的接口;知道了各个生产厂商的水管的规格、型号说明书,我就知道怎么与之对接了;设计
请看图:3d
各个厂商都公布了本身公司生产的商品的一系列说明性信息,只要咱们找到了这些信息就能够生产了;咱们把图转换成C#代码,请看图:orm
在咱们解决方案中有三家厂商公布了说明书,内容是,请看图:对象
我这里就给出一个属性,水管的半径;在接口里面不得有任何的实现代码,只能是申明要实现的代码;让要实现的对象去完成;这个接口的做用就是当我生产的水管与厂商的水管进行对接时,要去读取的属性标识;记住,接口是实现的定义,是一种规则,一种描述,不不包括实现代码;
有了说明书我要回去生产了,请看图:
代码图请看:
在项目里面多了一个本公司的项目,咱们引用生产商1,而后实现规格说明书接口,请看图:
实现了接口,就能够与生产商1的产品进行对接了;记住,任何一个公开的接口,接口里面的东西都是公开方必需要使用到的东西,必须实现;仔细想一想咱们生活中,当一个水阀门没有开关时,那是多可怕的;下面实现对接,请看图:
任何接口的实如今最后都会被调用,因此这是接口的本质,它将实现的规格对外公开,让你们去实现,只要遵循接口就等于它本身的实现;面向对象编程的最高境界就是面向接口编程,接口就比如一个工程的工程图纸,只要将图纸给包工头,让他去实施就OK了;请看代码图:
接口就讲完了,简简单单的代码但愿您能看的懂;最后咱们总结一句:
接口就比如咱们天然界中的说明文档,而实现就是咱们依照说明文当生产出来的能使用的实体,接口是一切事物的抽象定义,一切事物的抽象描述;
本文出自 “pattern driven the world” 博客,请务必保留此出处http://wangqingpei557.blog.51cto.com/1009349/558379