描述接口的用途?

时间:2009-04-16 10:15:26

标签: interface

您如何描述了解基本OOP设计的学生班级界面的目的?

10 个答案:

答案 0 :(得分:4)

我更喜欢接口这个术语“合同”,它定义了任何实施者必须遵守的“合同”。

答案 1 :(得分:3)

很久以前,作为一个n00b,“合同”一词从来没有对我有任何意义。我思考了很长时间,仍然无法接受它。它根本没有帮助我理解界面......至少没有。

所以,当我教别人时,我把它换成了“特征”。

因此,界面描述了类型的特征。特定类型可以具有多组特征。但是,当开发人员确定类型必须具有这些特征时,必须由开发人员明确定义(实施)这些特征。

然后,为了更进一步,我在定义样本接口时使用像动物这样的东西,而不是典型的现实软件解决方案。这使学生更容易想象界面的需要。有时,我也以建筑物/房屋为例。

有时候,根据观众的不同,我还会使用插头和插件。来自Lowe's或Home Depot的容器就是一个例子。 IE:桌子上有几个插头。它们都有不同的特征。但有两点意见:

  1. 插头未实现。它们没有连接到封装电源的“电源线”或“代码库”,它定义了接口在运行时将提供的内容。
  2. 我只使用一种类型的容器,它只能容纳样品中的一个插头。另一个的“特性”将不允许插座使用接口,因为插座不会“实现”接口特性。
  3. 我希望这会有所帮助。

答案 2 :(得分:1)

引自http://java.sun.com/docs/books/tutorial/java/concepts/interface.html

  

实现接口允许   上课要变得更正式了   它承诺提供的行为。   接口形成了一个契约   班级和外界,这个   合同在构建时强制执行   编译器。如果你的班级声称   实现一个接口,所有方法   必须出现由该接口定义的   在课前的源代码中   将成功编译。

答案 3 :(得分:0)

首先,我要说我们有一个团队和编程经理将强制您实现某些功能,例如在Java或C#中。 他们设计界面和“你”通过实现该界面保证您的类具有相同的功能。然后我会告诉他们界面可能带来的一些优势

答案 4 :(得分:0)

接口是实现者所承诺的。 这就像他支持的功能列表。

答案 5 :(得分:0)

就像已经提到的那样,合同是一个好词,但它也允许您对同一事物有不同的实现(例如jdbc驱动程序..)。另一个好处是使用接口增加了代码的可测试性,但这可能更难解释..

答案 6 :(得分:0)

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

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

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

答案 7 :(得分:0)

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

ADDIT: 有一些非常简单但描述性的,如, IComparable,ISerializable,......

答案 8 :(得分:0)

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

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

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

通过查看关系方面的继承和接口,我发现更容易理解差异。从基类继承的类与该类具有 is-a 关系,而实现接口的类与该接口具有 implements 关系。

借用Programming C# 4th Edition中的一个例子,汽车是一辆汽车而房子是建筑物,但这两个类都可以实现CanBeBoughtWithABigLoan功能。

答案 9 :(得分:0)

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

  1. 类X接收类Y的大部分或全部功能的默认实现,因此只需为自己定义与类Y不同的东西。
  2. 类X的对象几乎可以在任何可以使用Y类对象的地方使用。

继承非常强大,但有一个基本的限制:除Object之外的每个类都必须从其他类中派生出来。如果继承是一种类型的对象可以替代另一种类型的唯一方法,那么这意味着一种类型可以替代两种或更多种超类型的唯一方法是,如果其中一种超类型本身可以替代另一种类型。不幸的是,在很多情况下,类型关系不能形成良好的层次结构。例如,在图形程序中,人们可能希望能够将FilledRectangle和FilledEllipse视为可替代FilledShape,并将FilledEllipse和OutlineEllipse视为可替代EllipseShape,但这需要FilledEllipse可替换为FilledShape。和EllipseShape,即使这两者都不能替代另一个。

接口通过提供一种方法来解决这个限制,通过这种方法,类型可以声明自己可以替代许多其他类型(接口),而不必从它们继承。例如,在上面的图形示例中,可能有一个接口IFilledShape,其成员如FillColor,以及一个接口IEllipseShape,其成员包括SetCenter,GetMajorAxis等。如果例程需要IFilledShape类型的参数,则可以传入一个FilledRectangle,FilledEllipse,FilledTriangle或实现IFilledShape的任何其他类型。 FilledEllipse实现IFilledShape这一事实并不妨碍它实现IEllipseShape,IDrawableShape或任何其他接口。