Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 多方法与接口_Oop_Interface_Language Agnostic_Programming Languages_Multimethod - Fatal编程技术网

Oop 多方法与接口

Oop 多方法与接口,oop,interface,language-agnostic,programming-languages,multimethod,Oop,Interface,Language Agnostic,Programming Languages,Multimethod,有一些语言习惯性地同时使用这两个概念吗?如果有必要的话,什么时候才有必要?每种方法的优缺点是什么 问题的背景: 我是一个新手(有一些python知识),试图更好地了解(通常)如何使用多方法和接口 我假设它们不是混合的:要么根据接口声明可用逻辑(并将其实现为类的方法),要么根据多方法声明可用逻辑。这是正确的吗 谈到一系列OOP概念是否有意义,其中: 首先是简单的子类化(数据和逻辑(方法)以及逻辑实现(方法)紧密耦合) 然后通过接口(逻辑在接口中,数据和逻辑实现在类中) 并以多方法结束(逻辑在多方

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

问题的背景:

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

我假设它们不是混合的:要么根据接口声明可用逻辑(并将其实现为类的方法),要么根据多方法声明可用逻辑。这是正确的吗

谈到一系列OOP概念是否有意义,其中:

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

首先,这个答案主要来源于我在common lisp和clojure中的主要开发经验

是的,多种方法确实会带来一些成本上的损失,但在构建调度机制方面提供了几乎无限的灵活性,该机制可以精确地建模您可能希望通过其专门化实现的任何功能

一方面,协议和接口也涉及到一些相同的专门化和调度问题,但它们的工作方式和使用方式截然不同。这些工具遵循一种约定,其中单个分派只提供给定类的一个专门实现的直接映射。协议和接口的功能通常用于定义一组抽象功能,当这些抽象功能结合在一起时,完全指定了API的概念。例如,“指针”接口可能包含3或4个表示指针是什么的概念的概念。因此,指针的通用接口可能类似于引用、取消引用、分配和处置。因此,接口的力量来自于它由一组相关定义组成,这些定义共同表示一个抽象概念——当在特定情况下实现接口时,通常是全有或全无的努力。要么这四个函数都存在,要么不管是什么,我们都不代表指针的定义

希望这有点帮助。 丹伦茨