Practical Object-Oriented Design in Ruby