ジャン(斎藤末広)ブログ 

日常の話題は,facebook に書き込みしてます。

多態性の説明の間違い(オブジェクト指向)

多態性の説明の間違い

 間違った説明が多く散在しているので,こちらでアップしておきます。 そのうち,直っていくでしょう。

 多態性(polymorphism)は,ポリモルフィズム,ポリモフィーズム,多相性,多様性など呼び名がいろいろあります。poly(多) morph(形,態) という意味です。

 生物学の世界では,同じ遺伝子を持つミツバチだが,働き蜂になったり,女王蜂になる性質を指します。

 オブジェクト指向の世界では,ひとつのインスタンスが複数のクラスのインスタンスとして振る舞うことを指します。 これを,複数の実装があると説明しているものは,間違いです。   (数年前に話題にした記事 https://suehiro3721p.hateblo.jp/entries/2006/03/17#pro )

上の例で,A[1]のインスタンスは,Animal のインスタスでもあり,Dog のインスタンスでもあります。この性質が,多態性です。実行するときの実装が違いますが,これは,オーバーライドされているからです。インスタンスごと実行される実装が違うのは,多態性ではなく,オーバーライドの機能です。

weblio では,ちょうど,カタカナの「ポリモーフィズム」で正しく説明し,英語の「Polymorphism」では間違って説明しているので,対比のため,最初の例にあげておきます。 正しい例は,一つだけで,あとは,訂正されることを願って,間違った例をリストアップしておきます。

正しい例

weblio ポリモーフィズム から

https://ejje.weblio.jp/content/%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%95%E3%82%A3%E3%82%BA%E3%83%A0 ポリモーフィズム Polymorphism (computer science) ポリモーフィズム(英: Polymorphism)とは、プログラミング言語の型システムの性質を表すもので、プログラミング言語の各要素(定数、変数、式、オブジェクト、関数、メソッドなど)についてそれらが複数の型に属することを許すという性質を指す。  

間違った例(訂正されることを願って,こちらにアップしていきます)

weblio Polymorphism から

https://ejje.weblio.jp/content/Polymorphism コンピューター用語辞典での「Polymorphism」の意味  同一のメッセージに対して個々のオブジェクトが異なった応答を行う能力

以下,見つけ次第追加

用語として説明しているところを中心

ポリモーフィズム@ IT用語辞典バイナリ

https://www.sophia-it.com/content/%E5%A4%9A%E6%85%8B%E6%80%A7 ポリモーフィズムの場合は機能が置き換わるのではなく、同一名称メソッドであるが振る舞いは異なるメソッドとして働く。(これはオーバーライドの説明)

Polymorphism (多態性)@MDN Web Docs 用語集

https://developer.mozilla.org/ja/docs/Glossary/Polymorphism 各クラスがいかなるオブジェクトでも(いったん呼び出されると)適切に動作するそれぞれの関数

基本情報処理技術者試験 平成26年秋季午前問47

多態性とメソッドの実装をサブクラスごとで変更するオーバーライドとは無関係。 リンク先は,問題の引用先 https://www.fe-siken.com/kakomon/26_aki/q47.html ポリモーフィズムは、継承を利用しているため、オーバーライドと同様な機能に見えるが、ポリモーフィズムの場合は機能が置き換わるのではなく、同一名称メソッドであるが振る舞いは異なるメソッドとして働く

ポリモーフィズム 【 polymorphism 】 多相性 / 多態性 / ポリモルフィズム

http://e-words.jp/w/%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%95%E3%82%A3%E3%82%BA%E3%83%A0.html  ポリモーフィズムとは、プログラミング言語の持つ性質の一つで、ある関数やメソッドなどが、引数や返り値の数やデータ型などの異なる複数の実装を持ち、呼び出し時に使い分けるようにできること。