日期:2014-05-18  浏览次数:20755 次

政治老师学编程2:接口是这样理解的吗?
今天学到接口了,看的是某培训机构的视频,讲得很详细,但是我很糊涂,看完之后知道接口怎么写怎么用,但是不知道接口是拿来干什么的。网上搜了搜,有点眉目了,但是不知道是不是对的。我是这样理解接口的作用的:
  某某,你去给我写个类,要有A属性,B属性,C属性,要有D方法,E方法……你写的时候就继承我吧!

是这样吗?


------解决方案--------------------
委托和事件
--------------------------------------
比如你去书店买书,不过碰巧书没有,过两天才会来,那你交待书店等书来了就打我电话,我过来拿。

从委托和事件的角度来看,你把“打电话”这样一个事情委托给了书店,在“书到了”这个事件的时候触发,不知道这样解释你是不是可以理解。

“打电话”这个动作并不是在你去书店的时候发生,因为当时书没来,理解这个很重要。

类和对象
---------------------------------------
类指的是一个模板,而实例是根据这个模板创建出来的东西
比如造楼前有设计图纸,图纸就是模板,而根据图纸造出10栋楼,10栋楼就是10个对象
再比如做棒冰,那个模子就是模板,而通过这个模子做出来的棒冰就是对象
在运行时,对象是实实在在存在的东西,具有"生命",而那个模板已经失去意义了,当然这只是个比喻,实际模板还是有点用的,呵呵

另外在弱类型中,比如javascript,ruby,pyhon中是可以不通过模板直接创建对象,他们的理论就是根据行为回馈来获得的,比如这个对象会鸭子叫,又会像鸭子这样走路,那他就是鸭子,而不必从那个模子里出来,扯远了,顺便提一句。

接口
------------------------------------------
你应该指得的是csharp中的interface,原本方法(同message)在对象上,通过对象可以给他发消息(同method),但为了隔离发消息和实现消息2个概念,设计出interface这个概念,这样在开发设计中,可以针对interface进行编程,因为interface不包括实现部分,这样有效隔离变化,是对象协作的一个基础,相当于2个公司之间的合同契约,我不关心你怎么实现合同内容,我只是根据合同来收钱。

在弱类型语言中,根本不需要interface这样的东西,因为消息随便发,都是运行时动态绑定,而csharp这类强类型语言为了解决这个问题才设计interface解决编译时调用的问题。

在另一个帖子里回的,你参考一下
------解决方案--------------------
C#不像其他语言,有很多爹,C#只有一个爹,所以需要接口来拼爹
------解决方案--------------------
你不是政治老师么,接口就是那本资本论,类就是打着这个旗号的各种政权实现,接口要求你实现它规定的东西,但你只提供一堆什么也没干的空方法也行,只要明面上支持这些声明就行,你还可以修正的添加N多自己的私货。形成一个实际意义上的父类,那么再派生出来的子类就是诸如尼泊尔毛派类,或是前华约加盟国类一类的东西。
------解决方案--------------------
说对了一点点,不过相信你还没有理解。
从“接口”的字面意思就可以知道它的作用,其实它和我们平时用到的接口是一个意思,例如内存插槽接口。
它只是一个规范。
说起来可能比较抽象,就让我用个例子来说明一下吧,以下是伪代码:
// 接口定义如下:
class IAnimal
{
public:
 virtual void speak() = 0;
};

接口实现如下:
class cat : public IAnimal
{
public:
 void speak()
{
 printf("cat speak: miaow ~ ");
}
}
class dog : public IAnimal
{
public:
 void speak()
{
 printf("cat speak: whine ~ ");
}
}
当我们使用接口的时候:
IAnimal* pAnimal = new cat();
这样,我们可以直接使用 pAnimal.speak(),也可以将它作为参数传递
上面也是一个多态的典型例子。