15/11/16 00:55:57.94 hCoSGK7d.net
URLリンク(ja.wikipedia.org)
URLリンク(ja.wikipedia.org)
URLリンク(www.ibm.com)
URLリンク(blog.cleancoder.com)
これらもみるといい
一貫して言えることはポリモーフィズムとは全てメソッドのディスパッチ(割り当て)の問題だということ
メソッド継承とは、ベースクラスの同一メソッドへの参照(一種のディスパッチ)を含んだメソッド定義に過ぎない
様々な都合で、インターフェースなどを使ったポリモーフィズムというのが行われていたりするが、
個人で開発するなら、関数を呼び出す人も、関数を作り出す人も同じなので、そのディスパッチを誰がやるかというと
結局自分以外にほかならないので、ポリモーフィズムをやるだけ無駄だ、特に継承を伴わないポリモーフィズムは全く価値がないと言える
またポリモーフィズムが複雑な事になってしまう原因は静的型付けにある、
単なる関数のディスパッチの問題を、より高尚に、複雑にしてしまうからだ
もちろん型推論できると速度が出るので好ましいが、ポリモーフィズムの要不要の議論の際に型のあるなしは関係がない
一番上の多重ディスパッチのJavaとCommon Lispの書き方の違いを比較してみればわかると思う
特にLISPの実装をみれば、本当に単なるディスパッチの問題にすぎないと理解できるはずだから