超级应该如何处理特定于实例的行为?

时间:2015-08-25 15:04:30

标签: smalltalk

假设object是类C的实例。还假设object附加了一个特定于实例的方法m。方法mC及其超类C0中定义。问题是,表达式

应采用哪种方法
super m

在self == object时调用,为什么?

我看到两个可能的答案:

  1. C>> #m(对象类中的方法)
  2. C0>> #m(对象类超类中的方法)
  3. 修改

    即使我们实现特定于实例的行为的方式对super的语义不重要,但我要指出我最喜欢的实现是放置所谓的MethodDictionaryArray的实现。 (或简称MDA)在对象标题中,而不是对象类。可以想象,MDA包含继承链的方法字典。

    通过此实现,您可以将实例行为放在新的MethodDictionaryMD)中,并将对象的MDA重新定义为嵌套数组#{MD. MDA}

3 个答案:

答案 0 :(得分:4)

恕我直言,它应该调用C0>>m表现得像正常' C的实例。实现特定于实例的行为的实现细节不应该是重要的。如果将方法从C复制到其实例,理想情况下它应该与以前完全相同。

答案 1 :(得分:1)

super的标准定义是super将消息发送到与self相同的接收者,但是在定义当前方法的类之上的类中启动方法查找。

答案 2 :(得分:0)

在我看来,人们可以用不同的方式表达定义,
得到正确的语义解析。

如果我们认为正常情况等同于

'do not include in the search any methods that are defined
 by the receiver, include only those which are inherited'

然后我们不需要实施细节 决定期待哪个答案。