"Practical Object-Oriented Design in Ruby"
by Sandy Metz