1

慣用的に両方の概念を同時に使用する言語はありますか? それが必要になるのはいつですか?各アプローチの長所と短所は何ですか?

質問の背景:

私は(Pythonの知識がある)初心者で、マルチメソッドとインターフェースが(一般的に)どのように使用されることを意図しているかをよりよく理解しようとしています。

私はそれらが混在することを意図していないと仮定します.1つはインターフェースに関して利用可能なロジックを宣言する(そしてそれをクラスのメソッドとして実装する)か、1つはマルチメソッドに関してそれを行います. これは正しいです?

次のような OOP 概念のスペクトルについて話すことは理にかなっていますか?

  • 1つは単純なサブクラス化から始まります(データとロジック(メソッド)およびロジック実装(メソッド)は密結合されています)
  • 次にインターフェースを通過します(ロジックはインターフェースにあり、データとロジックの実装はクラスにあります)
  • マルチメソッドで終了します(ロジックはマルチメソッドのシグネチャにあり、ロジックの実装は散らばっており、データはクラスにあります(これは適切なハンドルを持つデータ構造のみです))?
4

1 に答える 1

2

この答えは、まず、common-lisp と clojure で開発した私の主な経験から得たものです。

確かに、マルチメソッドには多少のコストがかかりますが、特殊化によって達成しようとするものを正確にモデル化するディスパッチ メカニズムを作成する能力において、ほぼ無制限の柔軟性を提供します。

一方では、プロトコルとインターフェースも、これらの同じ専門化とディスパッチの問題のいくつかに関与していますが、それらは機能し、非常に異なる方法で使用されます。これらは、単一のディスパッチが特定のクラスの 1 つの特殊な実装の直接的なマッピングのみを提供するという規則に従う機能です。プロトコルとインターフェースの力は、それらを組み合わせることで、この概念の API を完全に指定する抽象的な機能のグループを定義するために一般的に使用されます。たとえば、「ポインター」インターフェースには、ポインターとは何かという概念を表す 3 つまたは 4 つの概念が含まれる場合があります。. したがって、ポインターの一般的なインターフェイスは、REFERENCE、DEREFERENCE、ALLOCATE、および DISPOSE のようになります。このように、インターフェイスのパワーは、関連する定義のグループの構成から生じ、それらが一緒になって、競合する抽象化を表現します。特定の状況でインターフェイスを実装する場合、通常は全か無かの試みです。これらの関数の 4 つすべてが存在するか、このことはポインタの定義を表していません。

これが少し役に立てば幸いです。ダン・レンツ

于 2014-02-19T05:15:50.330 に答える