1

동시에 두 관념을 관용적으로 사용하는 언어가 있습니까? 언제까지 그런 것이 필요할 것입니까? 각 접근법의 장단점은 무엇입니까? 질문에멀티 메소드 대 인터페이스

배경 : multimethods와 인터페이스가 의미하는 방법의 더 나은 사진을 만들려고

내가 (일부 파이썬 지식) 초보자 오전 (일반적으로) 사용되는.

나는 그것들이 혼합되어서는 안된다고 가정합니다 : 인터페이스 측면에서 사용 가능한 로직을 선언하고 (클래스의 메소드로 구현하는) 하나 또는 다중 메소드 측면에서 사용 가능한 로직을 선언하십시오. 이 올바른지? 다음

    • 한 나이브 서브 클래스로 시작 (데이터와 로직 (방법) 및 로직 구현 (방법)에 단단히 결합된다)

      는 어디서 OOP 관념의 스펙트럼 말할 것도 말돼 (로직은 인터페이스에 있고, 데이터 및 로직 구현은 클래스에 있음)
    • (논리는 멀티 메소드의 서명에 있고 로직 구현은 산란하며 데이터는 클래스에만 있습니다. 멋진 핸들을 가진 데이터 구조))?
  • 답변

    2

    이 대답은 주로 lisp 및 clojure를 개발하면서 얻은 기본 경험에서 비롯된 것입니다.

    그렇습니다. 다중 방법은 비용면에서 약간의 불이익을 지닙니다. 그러나 전문화를 통해 달성하려는 목표를 정확하게 모델링하는 디스패치 메커니즘을 만들 수있는 능력은 거의 무한대로 유연성을 제공합니다.

    한편, 프로토콜 및 인터페이스는 전문화 및 파견과 같은 동일한 문제와 관련이 있지만 작동 방식이 매우 다른 방식으로 사용됩니다. 이들은 단일 발송이 주어진 클래스에 대한 하나의 전문화 된 구현의 직접적인 매핑만을 제공하는 관행을 따르는 시설입니다. 프로토콜 및 인터페이스의 힘은 이러한 개념을 위해 API를 완벽하게 지정하는 추상 기능의 그룹을 정의하는 일반적인 용도로 사용됩니다. 예를 들어, "포인터"인터페이스에는 포인터 인 개념을 나타내는 3 개 또는 4 개의 개념이 포함될 수 있습니다. 따라서 포인터의 일반 인터페이스는 REFERENCE, DEREFERENCE, ALLOCATE 및 DISPOSE처럼 보일 수 있습니다. 따라서 인터페이스의 힘은 경쟁 정의를 표현하는 관련 정의 그룹의 구성에서 비롯됩니다. 특정 상황에서 인터페이스를 구현할 때 일반적으로 모든 것이 든 아니든 노력입니다. 이러한 함수 중 네 가지가 모두 존재하거나 포인터의 정의를 나타내지 않습니다.

    희망이 조금 도움이되었습니다. Dan Lentz