A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 左建飞 中级黑马   /  2012-7-23 19:21  /  4319 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 左建飞 于 2012-7-23 21:12 编辑

在张老师交通灯视频中,在新建集合对象时用到List<String> vechicles = new ArrayList<String>();老师说这是面向接口的编程。
面向接口的编程和多态有什么关系?这样做有什么好处?

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

8 个回复

倒序浏览
接口体现的是一种定义和实现分离的设计观念,充分利用接口可以极好的降低程序各模块之间的耦合,从而提高程序的可扩展性和可维护性。面向接口编程就是看中了这点。接口可以让类具有几种不同的形态,也可以算是多态的一种。
回复 使用道具 举报
所谓接口:接口就是,在表面上只是几行很简单的代码,有唯一的名称,可以被类或其他接口所实现,其实它更是一种规则。而它们之间的关系呢?首先,面向接口编程和面向对象编程并不是相同级别的,面向接口编程并不是独立于面向对象编程,相反,面向接口编程时面向对象编程的子集,也就是面向接口编程是属于面向对象编程这个思想体系。
回复 使用道具 举报
接口是一种规范,大大提高了程序的可维护性和可扩展性。面向接口编程,可以降低耦合度,耦合度越低,程序的质量越高。
面向接口是面向对象的一部分。面向对象的基本特征有三个:封装,继承和多态
回复 使用道具 举报

1,面向接口编程和面向对象编程是什么关系?
      首先,面向接口编程和面向对象编程并不是平级的,
  它并不是比面向对象编程更先进的一种独立的编程思想,
  而是附属于面向对象思想体系,属于其一部分。或者说,
  它是面向对象编程体系中的思想精髓之一。

2.接口的本质
      接口,在表面上是由几个没有主体代码的方法定义组成的集合体,有唯一的名称,
  可以被类或其他接口所实现(或者也可以说继承)。它在形式上可能是如下的样子:
interface InterfaceName
{
   void Method1();
   void Method2(int para1);
   void Method3(string para2,string para3);
}


   接口的本质是什么呢?
   1)  接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。
    体现了自然界“如果你是……则必须能……”的理念。
   
   2)  接口是在一定粒度视图上同类事物的抽象表示。
    注意这里我强调了在一定粒度视图上,因为“同类事物”这个概念是相对的,
    它因为粒度视图不同而不同。
   

3.面向接口编程综述
    什么是面向接口编程呢?
     在系统分析和架构中,分清层次和依赖关系,每个层次不是直接向其上层提供服务(即不是直接实例化在上层中),
     而是通过定义一组接口,仅向上层暴露其接口功能,上层对于下层仅仅是接口依赖,而不依赖具体类。
     这样做的好处是显而易见的,首先对系统灵活性大有好处。当下层需要改变时,只要接口及接口功能不变,
     则上层不用做任何修改。甚至可以在不改动上层代码时将下层整个替换掉,
     就像我们将一个WD的60G硬盘换成一个希捷的160G的硬盘,计算机其他地方不用做任何改动,
     而是把原硬盘拔下来、新硬盘插上就行了,因为计算机其他部分不依赖具体硬盘,而只依赖一个IDE接口,
     只要硬盘实现了这个接口,就可以替换上去。从这里看,程序中的接口和现实中的接口极为相似,
     所以我一直认为,接口(interface)这个词用的真是神似!
     使用接口的另一个好处就是不同部件或层次的开发人员可以并行开工,
     就像造硬盘的不用等造CPU的,也不用等造显示器的,只要接口一致,设计合理,完全可以并行进行开发,从而提高效率。

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
采用基于接口编程的项目,业务逻辑清晰,代码易懂,方便扩展,可维护性强.最大的一个理由就是减少耦合性。如果程序中的各个组件以接口而非具体的类相互衔接,那么对组件进行替换就轻而易举。这个特性可以使你简单的完成组件替换,而无需触及应用程序中的其他部分代码;当然,它还可以使得应用程序无需关心具体的组件实现而平滑运转。
回复 使用道具 举报
张凯 中级黑马 2012-7-23 20:13:50
7#
接口本质上就是由制定者来协调实现者和调用者之间的关系。
所以通常说的“面向接口编程”可以理解为:
只有实现者和调用者都遵循“面向接口编程”这个准则,制定者的协调目的才能达到。

面向接口编程还有一些好处:
1.一个功能的调用者只需要关心如何使用此功能,而无须关注功能的实现。
如:如我们在main 方法中调用一个client程序,我们只需要Client client = new ClientImpl(),无论 ClientImpl 类中定义了多么复杂的成员函数和成员变量(包括javadoc),你都看不到,你也无须看到。
2.面向接口编程便于团队合作,有了统一的接口(接口是公开的,里面的方法都是public的),无须担心别人的程序无法使用我的实现(他根本就不关心)。假如我们团队正在做一个计算器小程序,想要计算1+2+...+100=?,product manager 写了一个接口,让两个员工分别实现,他最后看那个程序算法算得快,于是这两个员工就对接口分别做了实现。PM只需要写一个程序就可以评估他们的算法。
public int getTime(Interface in){
int a = System.currentTime();
in.run();
return Sustem.currentTime()-a;
}
至于你说的面向接口的编程与多态的关系,我觉得,面向接口编程体现了对象的多态性,父类的引用可以指向子类的对象,一个接口可以有多个类去实现它,这样当我们不确定要用某个实现类的时候,可以用接口的引用,去指定临时通过逻辑判断所需要指向的实现类。

评分

参与人数 1技术分 +1 收起 理由
田向向 + 1 赞一个!

查看全部评分

回复 使用道具 举报
都是思想
回复 使用道具 举报
朱烈葵 发表于 2012-7-23 20:16
都是思想

呃,好吧。精辟。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马