36

私は2つの用語に少し混乱しています。私が知っていることは次のとおりです。

ポリモーフィズムとは、さまざまなタイプのオブジェクトを共通のインターフェイスで処理できる機能です。ダックタイピングは、異なるタイプのオブジェクトが同じメソッドに応答できるようにする一種の動的タイピングです。

私の理解では、ポリモーフィズムとは、異なるクラス間で共有できるインターフェイスを作成することです。ダック タイピングとは、メッセージの受信側でメソッドが見つかる限り、メソッドを呼び出すことができるルーズ タイピングのことです。

これは正しいです?私はこの 2 つについてかなり混乱しています。関連しているように見えますが、それらの関係が何であるかはわかりません。よろしくお願いします!

4

4 に答える 4

37

ポリモーフィズム(オブジェクト指向プログラミングのコンテキストで) とは、サブクラスが基本クラスのメソッドをオーバーライドできることを意味します。これは、クラスのメソッドがサブクラスでさまざまなことを実行できることを意味します。例: クラスAnimalはメソッドtalk()を持つことができ、そのサブクラスDogCatofAnimalはメソッドtalk()が異なる音を出すようにすることができます。

ダックタイピングとは、コードが特定のメソッドを持つオブジェクトを単純に受け入れることを意味します。次のコードがあるとしましょう: animal.quack(). 指定されたオブジェクトanimalに呼び出したいメソッドがある場合は問題ありません (追加の型要件は必要ありません)。たまたま鳴き声を出すのanimalが実際に同じ動物なのか別の動物なのかは問題ではありません。Duckこれがダックタイピングと呼ばれる理由です。アヒルのように見える場合 (たとえば、呼び出されたメソッドがあるquack()場合、そのオブジェクトがアヒルであるかのように振る舞うことができます)。

では、これらは関連していますか?それらは、プログラミング言語が持つ可能性のある個別の機能にすぎません。ポリモーフィズムはあるがダックタイピングがないプログラミング言語があります (Java など)。ポリモーフィズムとダックタイピングを備えた言語もあります (Python など)。

于 2012-07-16T10:29:00.353 に答える