ダックタイピング
動的型付け言語における、インターフェースの考え方に関する言葉
「アヒルのように鳴くものは、アヒルだと考えて良い」という意味合いでつけられている呼称
ex.
code: Ruby
class Duck
def quack(n)
n.times do
puts "quack!"
end
end
end
class DuckBird
def quack(n)
n.times do
puts "QUACK!"
end
end
end
class DuckHouse
def initialize(ducks)
@ducks = ducks
end
def open
@ducks.each do |duck|
duck.quack(2)
end
@ducks = nil
end
end
duck = Duck.new
ducky = DuckBird.new
duck_house.open
DuckもDuckBirdもquackメソッドを持ち、アヒルのように鳴く
→DuckHouseが要求するシグネチャのメソッドを備えているので、同じように扱える
→DuckHouseのopenメソッドでは、quckを持つオブジェクトであれば、クラスはなんでもいい
→DuckHouseがinterface的役割を果たしている
何が嬉しい??
オブジェクト間で送受信されるメッセージに設計がフォーカスされる
メソッド定義時に、「引数のクラスは何にするか?」ではなく、「このメソッドの引数はどんなメソッドを持つべきか?」という振る舞いに着目した考えになる