From: Steve Klabnik Date: 2012-04-06T06:26:10+09:00 Subject: Re: Design pattern question > Abstract classes are sometimes useful (although rarely). For example, >  how else could you do the kind of database adapter handling Sequel[1] >  does? Use duck typing. This: class Abstract def foo throw NotImplementedException end end class Foo < Abstract def foo puts "in foo!" end end class Bar < Abstract def foo puts "in bar's foo" end end Is the exact same thing as class Foo def foo puts "in foo!" end end class Bar def foo puts "in bar's foo" end end in fact... class Baz end Baz.new.foo # => NoMethodError class Baz < Abstract end Baz.new.foo # => NotImplementedError Almost the exact same thing. Just a different exception.