ダックタイピングとは
ダックタイピングについて、ある有名な格言があります。
"If it walks like a duck and quacks like a duck, it must be a duck"
(もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである)
これをオブジェクト指向的に言い直すと、、、
「誰か」ではなく「何をするか」によってオブジェクトを見分ける
ということです。
どのクラスに属しているオブジェクトなのかということは意識しないです。
ポリモーフィズムとは
単純な言葉の意味は「多態性」「多様性」
という意味です。「同じメソッド名が異なる複数のオブジェクトに属す」ということです。メソッド名が同じでも、オブジェクトによって処理結果が変化します。
例
まずは以下のコードを見てください。
str = 'test'
puts str.slice(1)
# => "e"
arr = [1, 2, 3]
puts arr.slice(1)
# => 2
同じメソッド(slice)ですが処理しているオブジェクトは違います。
メソッド側からすると文字列でも配列でも変わらず処理を行える、これこそが「ダックタイピング/ポリモーフィズム」
ということです!