#!/usr/bin/ruby -w # Dr. Dobb's Journal August 1998, C++ Interfaces # # Machine Person # | MakeFries | # FrenchFryMaker-o o-Chef # # interface, includers must define makeFries module MakeFriesInterface # define all public members and methods # member: attr_accessor x # method: def f(); raise; end def makeFries(); raise; end end class Person end class Chef < Person include MakeFriesInterface def makeFries print "Chef making fries\n" end end class HoopyDude < Person include MakeFriesInterface # calling makeFries on this class causes an unhandled exception end class Machine end class FrenchFryMaker < Machine include MakeFriesInterface def makeFries print "FrenchFryMaker making fries\n" end end frymakers = [] frymakers << Chef.new #frymakers << HoopyDude.new # raises exception frymakers << FrenchFryMaker.new frymakers.each{ |fm| fm.makeFries }