Chapter 5 - Object Oriented Design in Ruby
Duck Typing
まとめ
あるオブジェクトを、どのクラスのオブジェクトか?という視点で見るのではなく、どういったインターフェースを持っているか?という視点で見ること。
あるオブジェクトに対して、kind_of? 等で分岐させて、それぞれ異なるメソッドを呼び出しているようなところはダックタイピング的なアプローチが有効かどうかを考えてみる価値がある。
ダックタイピングを用いると、特定のクラス名、メソッド名に依存しなくて良くなるので、変更のコストが下がる。 しかし、具体的なクラスではなく、抽象的な表現を扱うことになるので、コードを直感的に理解しづらくなる。 なので、ドキュメントとしても有効なテストを書くことが推奨される。
基本的には、使われる側のクラスに共通のインターフェースを定義することによるコストと、クライアント側が依存する情報が増えることによるコストのトレードオフ。