多方法与接口

时间:2013-06-05 16:42:02

标签: oop interface language-agnostic programming-languages multimethod

是否存在同时使用这两种概念的语言?什么时候有必要呢?每种方法的优缺点是什么?

问题的背景:

我是一个新手(有一些python知识)试图建立一个更好的图片,说明如何使用多方法和接口(通常)。

我认为它们并不意味着混合:任何一个都根据接口声明可用的逻辑(并将其实现为类的方法),或者根据多方法来实现它。这是对的吗?

谈论一系列OOP概念是否有意义:

  • 一个以天真的子类化开始(数据和逻辑(方法)和逻辑实现(方法)紧密耦合)
  • 然后通过接口(逻辑在接口中,数据和逻辑实现在类中)
  • 以多方法结束(逻辑在多方法的签名中,逻辑实现是分散的,数据在类中(这只是一个具有漂亮句柄的数据结构))?

1 个答案:

答案 0 :(得分:2)

这个答案一开始,很大程度上源于我在普通lisp和clojure中发展的主要经验。

是的,多方法确实会带来一定的成本损失,但在制定调度机制方面提供几乎无限的灵活性,该机制能够精确地模拟您通过专业化完成的任何目标。

一方面,协议和接口也涉及这些相同的专业化和调度问题,但它们的工作方式和使用方式却截然不同。这些是遵循惯例的工具,其中单个调度仅提供给定类的一个专用实现的直接映射。协议和接口的强大功能在于它们通常用于定义一组抽象功能,这些抽象功能在一起使用时,完全指定了这样的概念API。例如,“指针”接口可能包含3或4个概念,这些概念表示指针的概念。因此指针的通用接口可能看起来像REFERENCE,DEREFERENCE,ALLOCATE和DISPOSE。因此,界面的力量来自其一组相关定义的组合,这些定义一起表达竞争抽象 - 当在特定情况下实现界面时,它通常是全有或全无的努力。要么所有这四个函数都存在,要么我们不能代表我们对指针的定义。

希望这有点帮助。 丹伦茨