.NET简谈接口

简介: 自从面向对象开发方式的出现,抽象的概念就开始日新月异的发展,面向对象编程、面向接口编程、面向组件编程等等;这一系列的概念都是软件工程所追求的思想范畴,高类聚低耦合。 今天我要简谈的是面向对象里面非常重要的也是非常抽象的概念,接口。

自从面向对象开发方式的出现,抽象的概念就开始日新月异的发展,面向对象编程、面向接口编程、面向组件编程等等;这一系列的概念都是软件工程所追求的思想范畴,高类聚低耦合。

今天我要简谈的是面向对象里面非常重要的也是非常抽象的概念,接口。谈起接口多少人曾经为之痛苦过,尤其是一些刚入门的开发人员(包括小弟),百思不得其解,啥叫接口,接口能干嘛用,用不用有什么区别;等等问题困扰着,这些问题不解决不弄明白,很难在面向对象领域混,更别谈面向对象开发了,可能有人认为面向对象开发就是麻烦我不用一样也能开发,开发一个项目又是分这个层,又是分那个层的,繁琐。这中情况我就没有权利去发表任何意见了。仁者见仁智者见智吧;

接口是面向对象里面非常重要的概念,我们暂且不谈面向对象里面的接口;其实接口在我们日常生活中到处可见,比如自来水的水管、燃气阀门、电视机的插头等等;在面向对象里面的接口概念其实跟这些都是大同小异的。为什么要提倡进行面向对象软件开发呢,我想就是将我们开发的方式完全能模仿自然界的生存规律,在没有彻底理解面向对象里面的接口时,请注意千万不要自己欺骗自己,简单的自已打个比方就OK了(别人这么说,我也这么想一下),这些问题一定要搞清楚,本人有过成功理解面向接口的经验,希望通过本文章能帮助您小理解一下;后面的升华(面向对象设计、面向接口设计等等),还得靠自己去摸索。我们再来看一下,在我们计算机里面存在哪些接口,比如我们的硬件与OS的接口,硬件存在的数量数不胜数,各种各样,要想完全能与OS对接,能让我们的软件使用,必须遵循一定的接口,在我们的OS与硬件之间存在着一层,硬件抽象层;

请看图:

什么叫硬件抽象层:硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化;目的就是使用这一层来抽象化所有的硬件接口,对上层使用统一的接口调用;根本不需要关注有哪些硬件,只要大家都遵循一致的接口就能互相通讯,互相调用;有一位大师曾经说过:在计算机科学领域里任何一个问题都能通过添加一个间接层来解决;这里的接口是一个比较大的开发思想,但是它与代码中的接口概念是完全一样的,都是提高抽象性,提高独立性;

我们回到开发代码中来,我就拿.NET来示范了(本人只会C#),在某一个编程语言里面的接口其实就和上面的硬件接口层是一个意思,我们拿一个例子来说吧,我就奉献我认为最能说明接口问题的例子,这个例子一直伴随着本人理解到现在,每当我有问题时,我就利用这个例子来打比方,其实很简单的一个例子,就是完全模仿现实生活中的场景,也是面向对象所最求的精髓;都说演员要感受生活才能演好戏,我们程序员也要感受生活才能写出好的程序;(开个玩笑)

例子:假如我是一家生产水管公司的老板,我要生产所有能被家庭、工厂、企业使用的水管;要想生产这些水管,就必须要知道这些水管能与家庭、工厂、企业进行对接的条件,家庭、工厂、企业都使用些什么规格、型号的水管;这些东西那里来,找啊;注意这里就形成了第一个接口,各厂家的水管规格、型号说明书,这个说明书就是我们这里的接口;知道了各个生产厂商的水管的规格、型号说明书,我就知道怎么与之对接了;

请看图:

各个厂商都公布了自己公司生产的商品的一系列说明性信息,只要我们找到了这些信息就可以生产了;我们把图转换成C#代码,请看图:

在我们解决方案中有三家厂商公布了说明书,内容是,请看图:

我这里就给出一个属性,水管的半径;在接口里面不得有任何的实现代码,只能是申明要实现的代码;让要实现的对象去完成;这个接口的作用就是当我生产的水管与厂商的水管进行对接时,要去读取的属性标识;记住,接口是实现的定义,是一种规则,一种描述,不不包括实现代码;

有了说明书我要回去生产了,请看图:

代码图请看:

在项目里面多了一个本公司的项目,我们引用生产商1,然后实现规格说明书接口,请看图:

实现了接口,就可以与生产商1的产品进行对接了;记住,任何一个公开的接口,接口里面的东西都是公开方必须要使用到的东西,必须实现;仔细想想我们生活中,当一个水阀门没有开关时,那是多可怕的;下面实现对接,请看图:

任何接口的实现在最后都会被调用,所以这是接口的本质,它将实现的规格对外公开,让大家去实现,只要遵循接口就等于它自己的实现;面向对象编程的最高境界就是面向接口编程,接口就好比一个工程的工程图纸,只要将图纸给包工头,让他去实施就OK了;请看代码图:

接口就讲完了,简简单单的代码希望您能看的懂;最后我们总结一句:

接口就好比我们自然界中的说明文档,而实现就是我们依照说明文当生产出来的能使用的实体,接口是一切事物的抽象定义,一切事物的抽象描述;

目录
相关文章
|
8月前
|
开发框架 前端开发 JavaScript
基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用
基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用
|
7月前
|
开发框架 前端开发 .NET
闲话 .NET(3):.NET Framework 的缺点
闲话 .NET(3):.NET Framework 的缺点
一起谈.NET技术,.NET简谈面向接口编程
  过程式的开发方式已逐渐退出大众的眼线,随之而来的是各种各样的高抽象的开发模式;我们不得不承认在没有设计模式的时候,我们很难总结出有价值的开发模型,便于以后重复使用和推广;面向对象的流行,让我们开发人员重新站在一个高的起点来看待软件模型,抽象固然是好事,但是也给初学者带来了迷惑,将软件中的东西都想成很简单的封装,我们只需要调用就行,这样越来越多的开发人员开始慢慢的往上浮,有一定编程经验和感触的人,能够明白我所说的浮,也算是给初学者提个醒吧。
995 0
|
容器
一起谈.NET技术,.NET简谈观察者模式
  观察者模式想必搞程序开发的都听说过,今天我也来简单的总结一下本人在程序开发过程中是怎么使用观察者模式的;希望给大家带来点新的想法,如果哪位高手看到了也不要嘲笑啊;呵呵,追求技术的人,始终都是为了技术而学技术,目的只有一个,一起追求技术的最高境界。
782 0
一起谈.NET技术,.NET简谈委托链
  说起链表大家都很熟悉,说起委托相信大部分的.NET程序员都也很了解。在平时的开发过程中经常会用到这两种技术,只不过链表在.NET里面已经被封装了,让我们用起来更加的方便就是集合类型Collection。
841 0
|
容器
.NET简谈观察者“.NET技术”模式
  观察者模式想必搞程序开发的都听说过,今天我也来简单的总结一下本人在程序开发过程中是怎么使用观察者模式的;希望给大家带来点新的想法,如果哪位高手看到了也不要嘲笑啊;呵呵,追求技术的人,始终都是为了技术而学技术,目的只有一个,一起追求技术的最高境界。
812 0
.NET“.NET研究”简谈面向接口编程
  过程式的开发方式已逐渐退出大众的眼线,随之而来的是各种各样的高抽象的开发模式;我们不得不承认在没有设计模式的时候,我们很难总结出有价值的开发模型,便于以后重复使用和推广;面向对象的流行,让我们开发人员重新站在一个高的起点来看待软件模型,抽象固然是好事,但是也给初学者带来了迷惑,将软件中的东西都想成很简单的封装,我们只需要调用就行,这样越来越多的开发人员开始慢慢的往上浮,有一定编程经验和感触的人,能够明白我所说的浮,也算上海闵行企业网站设计与制作是给初学者提个醒吧。
994 0
一起谈.NET技术,基于CallContextInitializer的WCF扩展导致的严重问题
  WCF是一个具有极高扩展度的分布式通信框架,无论是在信道层(Channel Layer)还是服务模型层(Service Model),我们都可以自定义相关组件通过相应的扩展注入到WCF运行环境中。在WCF众多可扩展点中,ICallContextInitializer可以帮助我们在服务操作执行前后完成一些额外的功能,这实际上就是一种AOP的实现方式。
892 0
|
容器
.NET简谈观察者“.NET研究”模式
  观察者模式想必搞程序开发的都听说过,今天我也来简单的总结一下本人在程序开发过程中是怎么使用观察者模式的;希望给大家带来点新的想法,如果哪位高手看到了也不要嘲笑啊;呵呵,追求技术的人,始终都是为了技术而学技术,目的只有一个,一起追求技术的最高境界。
876 0
|
程序员
一起谈.NET技术,不要在using语句中调用WCF服务
  如果你调用WCF服务时,像下面的代码这样在using语句中进行调用,需要注意一个问题。 using (CnblogsWcfClient client = new CnblogsWcfClient()){ client.Say("Hello, cnblogs.com!");}   上面这段代码看上去没问题,CnblogsWcfClient是一个自动生成的WCF客户端代理,继承自System.ServiceModel.ClientBase。
756 0

热门文章

最新文章