为了账号安全,请及时绑定邮箱和手机立即绑定

编程接口是什么意思?

/ 猿问

编程接口是什么意思?

手掌心 2019-11-30 11:21:11

我一直在大多数与编程相关的站点上听到该声明:


编程到接口而不是实现


但是我不明白其中的含义吗?

例子会有所帮助。


编辑:即使我也收到了很多很好的答案,所以您可以用一些代码片段来补充它,以便更好地理解该主题。谢谢!


查看完整描述

3 回答

?
回首忆惘然

您可能正在寻找这样的东西:


public static void main(String... args) {

  // do this - declare the variable to be of type Set, which is an interface

  Set buddies = new HashSet();


  // don't do this - you declare the variable to have a fixed type

  HashSet buddies2 = new HashSet();

}

为什么第一种方法被认为是好的?稍后再说,您决定需要使用其他数据结构,例如LinkedHashSet,以便利用LinkedHashSet的功能。必须更改代码,如下所示:


public static void main(String... args) {

  // do this - declare the variable to be of type Set, which is an interface

  Set buddies = new LinkedHashSet();  // <- change the constructor call


  // don't do this - you declare the variable to have a fixed type

  // this you have to change both the variable type and the constructor call

  // HashSet buddies2 = new HashSet();  // old version

  LinkedHashSet buddies2 = new LinkedHashSet();

 }

这看起来还不错,对吧?但是,如果您以同样的方式编写吸气剂怎么办?


public HashSet getBuddies() {

  return buddies;

}

这也必须更改!


public LinkedHashSet getBuddies() {

  return buddies;

}

希望您能看到,即使使用像这样的小程序,也对声明变量类型具有深远的影响。如果仅依赖于将变量声明为接口,而不是作为该接口的特定实现(在这种情况下,将其声明为接口),那么对象的来回移动无疑会大大简化程序的编写和维护。集,而不是LinkedHashSet或其他值)。可能就是这样:


public Set getBuddies() {

  return buddies;

}

另一个好处是,(至少对我而言)差异有助于我更好地设计程序。但是希望我的示例可以给您一些想法...希望能有所帮助。


查看完整回答
反对 回复 2019-11-30
?
守着星空守着你

一天,他的老板指示一名初级程序员编写一个应用程序来分析业务数据,并将其汇总为带有指标,图形和所有其他内容的漂亮报告。老板给他一个XML文件,上面写着“这是一些示例业务数据”。


程序员开始编码。几周后,他觉得度量,图形和内容足以使老板满意,于是他介绍了他的工作。老板说:“那太好了,但是它还能显示我们拥有的这个SQL数据库中的业务数据吗?”


程序员回到编码。在他的整个应用程序中都有用于从XML读取业务数据的代码。他重写了所有这些代码片段,并以“ if”条件包装它们:


if (dataType == "XML")

{

   ... read a piece of XML data ...

}

else

{

   .. query something from the SQL database ...

}

当看到该软件的新版本时,老板回答:“太好了,但是它还能报告来自该Web服务的业务数据吗?” 记住所有那些他必须重写的乏味的if语句,程序员变得很生气。“首先是xml,然后是SQL,现在是Web服务!真正的业务数据源是什么?”


老板回答:“任何可以提供的东西”


那时,程序员很受启发。


查看完整回答
反对 回复 2019-11-30
?
慕丝7291255

我最初阅读该声明与我尚未阅读的答案有很大不同。我同意所有使用方法类型等接口类型非常重要的人的观点,但这对我来说并不是这个意思。


我的看法是,它告诉您编写仅取决于接口的代码(在这种情况下,我使用“接口”表示您所使用的类或接口类型的公开方法)在接口中说文档。这与编写代码相反,后者取决于所调用函数的实现细节。您应该将所有函数调用都视为黑匣子(如果两个函数都是同一类的方法,则可以对此作例外处理,但理想情况下始终可以对其进行维护)。


示例:假设有一个Screen包含Draw(image)和Clear()方法的类。该文档说类似“ draw方法在屏幕上绘制指定的图像”和“ clear方法清除屏幕”之类的内容。如果您要顺序显示图像,正确的方法是反复调用,Clear()然后按Draw()。那将是对接口的编码。如果要对实现进行编码,则可能会执行类似于仅调用该Draw()方法的操作,因为您从查看实现后就知道在进行任何绘制之前Draw()它是在内部调用的Clear()。这很不好,因为您现在依赖的是实现细节,而这些细节在查看公开的界面时是不知道的。


我期待看到其他人是否对OP的问题中的这一短语有相同的理解,或者我是否完全不合时宜...


查看完整回答
反对 回复 2019-11-30

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信