teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

微修正

2018/05/05 04:02

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -33,6 +33,6 @@
33
33
  ---
34
34
  ちょっと話はそれますが。
35
35
  上記WikipediaのC++の例はテンプレートを使っているので、test()のパラメータ t はコンパイル時にDuckかCatが確定します。実行するまでどちらか判らないというものではありません。
36
- test()の中で`void fly(const Duck& t);`関数を呼び出していたとします。
36
+ test()の中で`t.fly();`メソッドを呼び出していたとします。
37
37
  そして、間違って`test(Cat());`と呼び出そうとすると、ありがたいことにコンパイル・エラーになります。
38
38
  動的型付け言語の場合、実行時にエラーになるでしょう。プログラムの完全なテストは不可能ですから、見逃した場合お客さんのところで発生します。可能な場合には避けたいシナリオです。

3

微修正

2018/05/05 04:02

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  ---
34
34
  ちょっと話はそれますが。
35
- 上記WikipediaのC++の例はテンプレートを使っているので、test()のパラメータ t は厳密にDuckのインスタンスかCatのインスタンスです。両方を表現できインスタンスではありません。
35
+ 上記WikipediaのC++の例はテンプレートを使っているので、test()のパラメータ t はコンパイル時にDuckかCatが確定します。実行すどちらか判らないというものではありません。
36
36
  test()の中で`void fly(const Duck& t);`関数を呼び出していたとします。
37
37
  そして、間違って`test(Cat());`と呼び出そうとすると、ありがたいことにコンパイル・エラーになります。
38
38
  動的型付け言語の場合、実行時にエラーになるでしょう。プログラムの完全なテストは不可能ですから、見逃した場合お客さんのところで発生します。可能な場合には避けたいシナリオです。

2

typo修正

2018/05/05 04:00

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -35,4 +35,4 @@
35
35
  上記WikipediaのC++の例はテンプレートを使っているので、test()のパラメータ t は厳密にDuckのインスタンスかCatのインスタンスです。両方を表現できるインスタンスではありません。
36
36
  test()の中で`void fly(const Duck& t);`関数を呼び出していたとします。
37
37
  そして、間違って`test(Cat());`と呼び出そうとすると、ありがたいことにコンパイル・エラーになります。
38
- 動的型付け言語の場合、実行時にエラーになるでしょう。pログラムの完全なテストは不可能ですから、見逃した場合お客さんのところで発生します。可能な場合には避けたいシナリオです。
38
+ 動的型付け言語の場合、実行時にエラーになるでしょう。ログラムの完全なテストは不可能ですから、見逃した場合お客さんのところで発生します。可能な場合には避けたいシナリオです。

1

微修正

2018/05/05 03:58

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -4,7 +4,7 @@
4
4
  まず、この認識は間違っていないでしょうか。
5
5
 
6
6
  「ポリモーフィズム」という言葉に厳密な定義があるわけではないようですので、人によって解釈が異なります。
7
- 私自身は「異なるものを同じように使えること」を最も広い意味での「ポリモーフィズム」と理解しています。PHPの例はこれに該当しますし、私は間違っているわけではないと思います。
7
+ 私自身は「異なるものを同じように使えること」を最も広い意味での「ポリモーフィズム」と理解しています。PHPの例はこれに該当しますし、veeeさんのその認識を、私は間違ってはないと思います。
8
8
 
9
9
  しかし、プログラム開発時のデザイン・パターン的な話題の時にそこまで意味を広げると何を言っているのか判らなくなりますので、正直そこまで広い意味で使うのは個人的にあまり好きではありません。
10
10
  どちらかというと狭い意味のポリモーフィズム(仮想関数があるクラスを継承し、基底クラスへの参照で統一的に扱えるようにする)で使う方を私は好みます。