首页 新闻 会员 周边 捐助

接口到底有什么用?

1
[已关闭问题]

说真的编了这么久的程序,接口到底有什么用,我到现在都懵懵懂懂

别说概念的,什么高耦合度,什么灵活性,可扩展了

实实在在的,为什么,以事实说话

public interface IPrint()

{

  void GetName();

  string PrintString();

}

 

public class A:IPrint()

{

........

}

 

说真的看不不来这个优势。。。。。好囧。。。。。。

aspnetdream的主页 aspnetdream | 初学一级 | 园豆:200
提问于:2009-09-16 09:14
< >
分享
其他回答(2)
0

举个简单的例子吧..现在你要开发有一个信息管理系统、要用Access来作为数据库。你速度很快1个星期完成。

领导忽然告诉你..再需要一个SQLServer数据库的高端版本;1周后,领导又告诉你再来个MySQL版本的吧..这样丰富点。哥们.你怎么办呢?..你最直接的应该是把你的涉及数据操作的逻辑代码...呼呼..全部改写。你是这样吧!

如果用到接口,你就很简单了。首先,定义逻辑操作接口。涉及数据操作的类继承该接口实现。在逻辑层调用的时候,你面对的是接口。直接声明接口,将操作对象直接转化成接口类型。这里用到了一个很简单的知识,多态!继承是实现多态的不二法门。数据实现了接口,那么就具备可接口的所有定义。

这是后,如果你换不同数据库的版本的时候,很简单了,只要把数据操作层的实现方法改动就可以了。你的逻辑代码部分不用变动,因为接口没有变动。你是对接口的编程。在团队合作的开发中,面向接口编程是非常多,它的应用也很多。知识在网络上也恨都,如果感觉很抽象的话,那就多看代码实例吧。

http://www.cnblogs.com/michaelxu/archive/2007/03/29/692021.html ,看看.

邢少 | 园豆:10926 (专家六级) | 2009-09-16 09:38
哥,你说的很精彩,你的连接里我也看了,我不是问什么是接口,我是问接口有什么用,从你的连接和答案来看,是为逻辑层和数据层的高耦合度,那我说个更现实的,一个项目上了线,到死亡,它换数据平台的可能性有多大?而且,正因为另个问题,才让我对接口作用开始郁闷,我数据层独立一个dll,你换吧,你换啊,你一个小时换一个,我一个小时换一个dll,和封装接口那个更方便,工作量和高耦合度,那个更轻松,我这里是零耦合度。嘎嘎~ ~ ~ 作用,作用,实实在在的作用。。。。。。。。。。。。。。。。。。。。。。。。
支持(0) 反对(0) aspnetdream | 园豆:200 (初学一级) | 2009-09-16 21:08
@aspnetdream:作用!就是你可以面向接口编程。 而不用去考虑类似什么数据库、什么语言、什么硬件环境的问题。我举这个数据库的例子,你觉得你可以把你数据操作的dll换掉.名称一样就可以了。但是你忽略了重点。我的重点是你可以面向接口编程。接口..就是与其它程序链接的一个地方。比如我可以在完成一个功能后,暴露几个操作的接口,便于扩展。引上面的例子,在需要不同的只要写一个继承自该接口的类,就可以,比如.一个打卡系统。有指纹打卡机、有扫描式打卡机。那么在你有一个用vb写的暴露数据接口管理程序和一个其它最新型号的综合打卡机器。你只要用c#写一个实现该接口的类。就可以。你不需要管开发系统的语言。对系统和硬件来说,你是面向接口的编程。不需要开率底层。你的实现数据库更换的方法可以实现你要的功能,但是扩展性不够好。但是最好的思想应该是面向接口。
支持(0) 反对(0) 邢少 | 园豆:10926 (专家六级) | 2009-09-17 16:21
3

工业中的接口:

笔记本实现了多种标准接口:USB接口、视频输出接口、耳机接口、麦克风接口、网卡接口、网线接口、电源接口,遵守接口的好处不单单是可以使用市面上的通用配件,对于厂内自家生产的多种配件,也能实现兼容。

比如一种电源变压器就可以应用于多种型号的笔记本,而不需要专为每一款笔记本生产不同种类的电源。

那么你说继承的效果不也一样吗?

试想一下,假如我们现在要推出一款超薄的移动性笔记本,强调极致轻薄、无线上网功能。为了极限缩减尺寸,视频输出接口、麦克风接口、网线接口要被舍弃。

那么如果是使用继承的办法实现,那怎么弄?继承了好几个没有作用的接口,然后再封上?脱了裤子放屁嘛。

而接口模式就很简单了,不需要的接口只要不实现就行了呀。

接口一大重要特征就是“职责单一”,USB接口就负责USB设备的衔接,电源接口就负责电力输入,麦克风接口只能插麦克风,你不需要什么功能就不用实现它。

所以说接口是可选择的功能组合,而继承只能是全盘接收,在应对变化时,继承远不如接口灵活。

 

自然界中的接口:

达尔文进化论描绘的进化蓝图,就像是一棵继承树,各个物种继承前一个物种并加以变化,形成新的物种分支。

但最新的生物研究表明,这棵“树”并不是简单的多杈延伸形式,或者说它更像一只网,新物种的形成不仅仅是继承在发挥作用,还有组合的关系。

科学家们发现许多物种的DNA中都包含了很多其他物种的DNA片段,比如牛的DNA中就包括了果蝇和蛇的一部分DNA,人类DNA中包含了很多病毒的DNA,并且某些DNA还是某些功能所不可或缺的。

还有像幼体与成体不同的物种中,其DNA中就是有两种不同的物种DNA片段,可以说它变态前是一个物种,变态后又是另外一种,一个比较有代表意义的例子就是海星,海星的幼体变态为成体后,其附属物仍然可以作为一个单独的生命生活数天。

科学家认为这些基因的组合可能来源于杂交,而不是正常的繁衍,并且这应当是自然界多态进化的一种重要形式。

这种组合关系不是很像接口吗?

 

程序中的接口:

程序中的接口主要的作用就是进行功能的组合,使得同一对象能够被使用在多种地方,其重大优势就是应对变化。

为什么接口能够很好地应对变化呢?

就是因为其职责单一。

每只蚂蚁的职责是非常单一的,一块石头砸到蚁群中,死掉大半数量的蚂蚁,但蚁群仍然可以正常工作。

如果换做一只大虫子,一块石头砸坏头部、腹部、尾部,虫子不死也奄奄一息了,因为他是一个复杂的整体,各个器官相互依赖才能正常运作。

同样的,变化也会让你的程序部分失效,如果你是由接口组合而成的对象,则能够降低变化造成的损失,失效的接口直接舍弃,其他接口仍然还在继续工作。

另外,接口是一种更高程度的抽象。

初期我们写程序可能对抽象没有概念,纯粹使用数组什么的存储数据,进行操作。

后来我们发现面向对象能够更方便地控制,于是将各种现实中的事物都抽象、封装为类。

再往后你会发现各个类中也会有很多相似的东西,比如瓶子和锅都有盖,足球和轮胎都能打气,这样高度抽象出来的东西就是接口,足球和轮胎只要都实现“气嘴”接口,就都可以用打气筒对象打气。

反之试想一下,你如何用继承来描述足球和轮胎的关系呢?即使实现也会很蹩脚吧?

斯克迪亚 | 园豆:4124 (老鸟四级) | 2009-09-16 15:39
哥,你的想象力很丰富,比接口还抽象,我连接口都理解不了,就更没法理解你的答案了,在此谢过
支持(0) 反对(0) aspnetdream | 园豆:200 (初学一级) | 2009-09-16 21:01
1

简单来说接口是一种约束,也就是必须遵守的规则。例如你说的

public interface IPrint()

{

  void GetName();

  string PrintString();

}

当你继承了这个接口时,就必须实现里面二个方法,少一个都不行。这样起到一个约束,一个事情必须走这二步才会完成,否则就会出现错误。

这样够简单了吧。。理解了没有?还没有的加我MSN:fenglang@live.hk,慢慢解释,慢慢磨。。

风浪 | 园豆:2996 (老鸟四级) | 2009-09-16 17:25
似乎说到了点我想知道的,但没深入,就像一个小姐,让你开始"昂首挺胸"时,却说“我累了,睡觉吧”
支持(0) 反对(0) aspnetdream | 园豆:200 (初学一级) | 2009-09-16 21:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册