On Sat, Nov 17, 2007 at 03:32:03PM +0900, Thufir wrote: > On Sat, 17 Nov 2007 14:36:50 +0900, Raul Parolari wrote: > > Fair enough. This is pretty much how Java would do it, and, correct me > if I'm wrong, Smalltalk would probably do similarly. > > Put another way: there must be a non-contrived case of composition in > Ruby? Yes? > What are you looking for? Composition is basically accomplished by instance variables, even for less contrived cases. As for the interface, to say TMTOWTDI is an understatement. require 'forwardable' class Engine def vroom puts "vroom" end end class MustangEngine def vroom puts "rumble" end end class Vehicle extend Forwardable def_delegator :@engine, :vroom attr_accessor :engine def initialize(engine) @engine=engine end end v=Vehicle.new(Engine.new) v.vroom v.engine=MustangEngine.new v.vroom As far as comparison to Java, this example uses duck typing. As long as it vrooms, you can use it as an engine for your vehicle.