——面向接口编程详解(一) 思想基础
1.面向接口编程和面向对象编程是什么关系
首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一
种独立的编程思想,而是附属于面向对象思想体系,属于其一部分。或者说,它是面向对
象编程体系中的思想精髓之一。
2.接口的本质
接口,在表面上是由几个没有主体代码的方法定义组成的集合体,有唯一的名称,可以被
类或其他接口所实现(或者也可以说继承)。它在形式上可能是如下的样子:
interfaceInterfaceName
{
voidMethod1();
voidMethod2(intpara1);
voidMethod3(stringpara2,stringpara3);
}
那么,接口的本质是什么呢?或者说接口存在的意义是什么。我认为可以从以下两个视角
考虑:
1)接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现
了自然界“如果你是……则必须能……”的理念。
例如,在自然界中,人都能吃饭,即“如果你是人,则必须能吃饭”。那么模拟到计算机程
序中,就应该有一个 IPerson(习惯上,接口名由“I”开头)接口,并有一个方法叫
Eat(),然后我们规定,每一个表示“人”的类,必须实现 IPerson 接口,这就模拟了自然界
“如果你是人,则必须能吃饭”这条规则。
从这里,我想各位也能看到些许面向对象思想的东西。面向对象思想的核心之一,就是模
拟真实世界,把真实世界中的事物抽象成类,整个程序靠各个类的实例互相通信、互相协
作完成系统功能,这非常符合真实世界的运行状况,也是面向对象思想的精髓。
2)接口是在一定粒度视图上同类事物的抽象表示。注意这里我强调了在一定粒度视图上,
因为“同类事物”这个概念是相对的,它因为粒度视图不同而不同。
例如,在我的眼里,我是一个人,和一头猪有本质区别,我可以接受我和我同学是同类这
个说法,但绝不能接受我和一头猪是同类。但是,如果在一个动物学家眼里,我和猪应该
是同类,因为我们都是动物,他可以认为“人”和“猪”都实现了 IAnimal 这个接口,而他在研
究动物行为时,不会把我和猪分开对待,而会从“动物”这个较大的粒度上研究,但他会认
为我和一棵树有本质区别。