1

是否有语言习惯性地同时使用这两个概念?如果有的话,什么时候有必要?每种方法的优缺点是什么?

问题的背景:

我是一个新手(具有一些 python 知识),试图更好地了解多方法和接口的使用方式(通常)。

我假设它们并不意味着混合:要么根据接口声明可用逻辑(并将其实现为类的方法),要么根据多方法来声明。这个对吗?

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

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

1 回答 1

2

首先,这个答案很大程度上源于我在 common-lisp 和 clojure 中开发的主要经验。

是的,多方法确实会带来一些成本损失,但在构建调度机制的能力方面提供了几乎无限的灵活性,该机制可以精确地模拟你可能希望通过他们的专业化完成的任何事情。

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

希望这有一点帮助。丹·伦茨

于 2014-02-19T05:15:50.330 回答