Oop 有可能;“动态绑定”;及;隐式;界面
是否有任何构造允许实现一组函数的所有类被视为某个接口,即使这些类本身没有显式地实现该接口 为了让问题更清楚,我举个例子。假设我们想要实现Oop 有可能;“动态绑定”;及;隐式;界面,oop,programming-languages,Oop,Programming Languages,是否有任何构造允许实现一组函数的所有类被视为某个接口,即使这些类本身没有显式地实现该接口 为了让问题更清楚,我举个例子。假设我们想要实现LinearSearch,它查看整个数组并搜索某个键,在发现时返回键的索引。基本上,PSUDEO代码可能如下所示: LinearSearch(A, key) for (k = 0; k < A.length(); k++) if (A.get(k) == key) return k return NU
LinearSearch
,它查看整个数组并搜索某个键,在发现时返回键的索引。基本上,PSUDEO代码可能如下所示:
LinearSearch(A, key)
for (k = 0; k < A.length(); k++)
if (A.get(k) == key)
return k
return NULL
LinearSearch(A,键)
对于(k=0;k
在这种情况下,任何实现了length
和get
的类都可以在结构中进行搜索。我们可以在DynamicArray
上实现这一点,它的作用与Java中的ArrayList
相同。我们可以在LinkedList
上实现这一点,忽略get
在每个查询中花费线性时间的事实。类似地,对于实现这两个功能的其他结构也是如此。然而,这些类可能没有显式地实现公共接口,即使将它们放在一个接口中是有利的
在写这个问题的时候,我感到一种不安全感在我内心修补着这样一种结构,但我无法用语言表达出来。那么,您是否有任何理由认为这在实际语言中可能不是一个好的构造?来源:
Go具有与支持给定方法集的任何类型兼容的“接口”类型(该类型不需要显式实现接口)。空接口,interface{}
,与所有类型兼容
听起来这就是你的意思,所以这是另一种接口的感觉,而不是我们可能习惯于使用Java之类的语言。这是一种接口,其中涉及的方法的结构是重要的部分,而不是接口的名称
更正式地说,这似乎被称为a。它被称为“duck-typing”。基于消息的对象模型(如Smalltalk)允许向对象发送任何消息,只要其名称和参数匹配
在C++语言中,可以使用“信号”和“时隙”来模拟这一点,在最原始的情况下,可以通过编写一个像
这样的模板适配器类来实现。class CallGetLengthAdapterBase
{
public:
int length() = 0;
key_type key() = 0;
};
template<class N>
class CallGetLengthAdapter : public CallGetLengthAdapterBase
{
public:
CallGetLengthAdapter( N* obj ) { mObject = obj; };
int length() { return mObject->length(); };
key_type key() { return mObject->key(); };
protected:
N* mObject;
};
就这些
LinearSearch( CallGetLengthAdapter<A_type>(&A), key );