如果继承是用于实现 is-a 关系的OO技术,而组合/聚合实现了 has-a 关系,则实现关系的适当名称将是什么通过Java / .NET样式接口?
我非常热衷于 can-do 这个术语,因为这些接口通常用于指定支持的操作,例如 Sortable , Clonable 等等加上它听起来真的是肯定的。我实际看到的唯一一个名字是意识到关系,但它并没有真正描述这么多。
答案 0 :(得分:1)
您正在寻找的最重要的术语可能是:角色。
界面描述角色。
这就是为什么很多接口都有后缀“able”:
Cloneable
,Serializable
,Runnable
等
就像分配一个或多个角色一样。
答案 1 :(得分:1)
在大多数面向对象的编程语言中,接口和类都通过继承传递它们的关系,而继承是 is-a 关系,无论它是接口,类,抽象类等。 ..
实际上,类本身就是一种类型的接口,它们也简单地提供了一个实现。没有实现的抽象类和接口之间没有太大的区别,尽管内部实现可能有一些差异。 (最大的问题是在Java和.NET中你不能继承多个抽象类)
因此,从概念上的oop角度来看,is-a是继承。 has-a is containment / composition / aggregation / whateveryouwanttocallit,
术语“实现”更多地是“继承”或“子类”的子类。您不能对接口进行子类化,但您可以实现它。这是更精细的细节,尽管它具有特定的含义。
并非所有语言都有接口。例如,C ++没有。但是,您可以使用我之前提到的没有实现的抽象类来伪造它们,但是由于C ++允许多重继承,因此问题不是一个问题(只要它们是没有实现的纯抽象类,如果您开始混合代码进入它们然后变得更加毛茸茸)
答案 2 :(得分:0)
is-a 对于接口也是合理的。在Java中,ArrayList
是-a List
而TreeMap
是-a Map
。
如果你编写一个接受List
作为参数的方法:
public void someMethod(List someList) {
// ...
}
将ArrayList
的实例作为参数传递给该方法是有效的,因为ArrayList
是List
。