Interface 描述接口的用途?

Interface 描述接口的用途?,interface,Interface,你如何向理解基本OOP设计的学生描述接口的用途?我更喜欢术语“合同”而不是接口,它定义了“合同”任何实现者都必须遵守。首先,我想说,我们有一个团队,编程经理将通知您实现某些特定功能,例如Java或C。 他们通过实现接口来设计接口和“你”,保证你的类具有相同的功能。然后我会告诉他们接口可能会带来的一些好处,接口就是实现者承诺要做的。 这就像他支持的功能列表一样。引用自 实现接口允许 课堂上要变得更加正式 它承诺提供的行为。 接口在 阶级和外部世界,以及 合同在构建时由 编译器。如果你的班级声称 实

你如何向理解基本OOP设计的学生描述接口的用途?

我更喜欢术语“合同”而不是接口,它定义了“合同”任何实现者都必须遵守。

首先,我想说,我们有一个团队,编程经理将通知您实现某些特定功能,例如Java或C。
他们通过实现接口来设计接口和“你”,保证你的类具有相同的功能。然后我会告诉他们接口可能会带来的一些好处,接口就是实现者承诺要做的。 这就像他支持的功能列表一样。

引用自

实现接口允许 课堂上要变得更加正式 它承诺提供的行为。 接口在 阶级和外部世界,以及 合同在构建时由 编译器。如果你的班级声称 实现一个接口,所有方法 必须显示由该接口定义的 在其源代码类之前 将成功编译


正如前面提到的,契约是一个好词,但它也允许您对同一事物有不同的实现(例如jdbc驱动程序)。另一个好处是使用接口可以提高代码的可测试性,但这可能更难解释

界面中的是合同的一部分。它指定实现类必须提供的成员。但是,它没有具体说明这些成员必须做什么

这就是为什么接口定义总是需要额外的文档(或注释)来解释每个成员必须“做什么”


例如,如果接口包含一个方法Add,其中包含两个整数参数和一个整数结果,则需要提供结果必须是两个参数之和的信息。(这是一个微不足道的例子,但在这一点上,误解可能非常麻烦)。

使用peters链接和信息,并为自己找到一些例子。 例子是一个重要的教学工具。 (例如,我们应该用一些工具击败手册页作者)

补充: 有一些非常简单但描述性的例子,比如,
i可比较,i可序列化,

正如其他人所说,接口就是契约。实现接口的类承诺提供指定的方法。但在我自己的研究中,我真的很想知道为什么这很重要,为什么不干脆用继承来代替呢

我没有很多OOP的经验,但我已经在下面写下了我的想法。我相信其他更有经验的OOP程序员可以添加更多内容(如果我犯了错误,也可以纠正我)

在不支持多重继承的语言中,其他不相关的类可以通过实现相同的接口来共享功能

我发现从关系的角度来看继承和接口更容易理解它们之间的区别。从基类继承的类与该类具有is-A关系,而实现接口的类与该接口具有实现关系


借用一个例子,汽车是一辆汽车,房子是一座建筑物,但这两个类别都可能实现CanBeBoughtWithABigLoan功能。

很久以前,作为n00b,“合同”一词对我来说从来没有真正意义。我考虑了很长时间,仍然无法接受它。它根本没有帮助我理解接口…一点也没有

所以,当我教别人时,我用“特征”来代替

因此,接口描述类型的特征。一个特定类型可以有多组特征。但是,当开发人员决定某个类型必须具有这些特征时,这些特征必须由开发人员具体定义(实现)

然后,为了更进一步,我在定义示例界面时使用了动物之类的东西,而不是典型的真实软件解决方案。这使得学生更容易想象出对界面的需求。有时,我也会以建筑物/房屋为例

有时,根据观众的不同,我也会使用Lowe's或Home Depot的插头和插座来给出示例。IE:桌子上有几个插头。它们都有不同的特点。但有两个观察结果:

  • 插头没有实现。它们没有连接到封装电源或“代码库”的线缆,这些“代码库”定义了接口在运行时将提供什么
  • 我只使用一种类型的插座,只适合样品中的一个插头。另一个的“特性”不允许插座使用接口,因为插座没有“实现”接口特性

  • 我希望这会有所帮助。

    当类X从另一个类Y继承时,有两种效果:

  • 类X接收大部分或所有类Y功能的默认实现,因此只需为自己定义与类Y不同的东西。
  • 类X的对象几乎可以在任何可以使用类Y的对象的地方使用。 继承功能非常强大,但有一个基本的限制:除Object之外的每个类都必须精确地从另一个类派生。如果继承是一种类型的对象可以替换另一种类型的唯一方法,那么这意味着一种类型可以替换两个或多个超类型的唯一方法就是这些超类型中的一个本身可以替换另一个。不幸的是,在许多情况下,类型关系不能形成一个良好的层次结构。例如,在图形程序中,可能希望能够将FilledElectAngle和FilleDelipse视为可替代FilledShape,并将FilledDelipse和OutlineElipse视为可替代EllipseShape,但这将