您如何描述了解基本OOP设计的学生班级界面的目的?
答案 0 :(得分:4)
我更喜欢接口这个术语“合同”,它定义了任何实施者必须遵守的“合同”。
答案 1 :(得分:3)
很久以前,作为一个n00b,“合同”一词从来没有对我有任何意义。我思考了很长时间,仍然无法接受它。它根本没有帮助我理解界面......至少没有。
所以,当我教别人时,我把它换成了“特征”。
因此,界面描述了类型的特征。特定类型可以具有多组特征。但是,当开发人员确定类型必须具有这些特征时,必须由开发人员明确定义(实施)这些特征。
然后,为了更进一步,我在定义样本接口时使用像动物这样的东西,而不是典型的现实软件解决方案。这使学生更容易想象界面的需要。有时,我也以建筑物/房屋为例。
有时候,根据观众的不同,我还会使用插头和插件。来自Lowe's或Home Depot的容器就是一个例子。 IE:桌子上有几个插头。它们都有不同的特征。但有两点意见:
我希望这会有所帮助。
答案 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时,它有两个效果:
继承非常强大,但有一个基本的限制:除Object之外的每个类都必须从其他类中派生出来。如果继承是一种类型的对象可以替代另一种类型的唯一方法,那么这意味着一种类型可以替代两种或更多种超类型的唯一方法是,如果其中一种超类型本身可以替代另一种类型。不幸的是,在很多情况下,类型关系不能形成良好的层次结构。例如,在图形程序中,人们可能希望能够将FilledRectangle和FilledEllipse视为可替代FilledShape,并将FilledEllipse和OutlineEllipse视为可替代EllipseShape,但这需要FilledEllipse可替换为FilledShape。和EllipseShape,即使这两者都不能替代另一个。
接口通过提供一种方法来解决这个限制,通过这种方法,类型可以声明自己可以替代许多其他类型(接口),而不必从它们继承。例如,在上面的图形示例中,可能有一个接口IFilledShape,其成员如FillColor,以及一个接口IEllipseShape,其成员包括SetCenter,GetMajorAxis等。如果例程需要IFilledShape类型的参数,则可以传入一个FilledRectangle,FilledEllipse,FilledTriangle或实现IFilledShape的任何其他类型。 FilledEllipse实现IFilledShape这一事实并不妨碍它实现IEllipseShape,IDrawableShape或任何其他接口。