One example I can find is Integer class, it is primarily used to represent a number, but it can do some math operations on itself. This may not seem to be a lot yet, but then it can actually act like iterators(the downto, upto and times methods) for simple statement. It feels cool, but on the other hand I wonder if such implementation of Integer class is actually violating the single responsibility principle for good OO design. After all, the integer class seems to be doing value representation/conversion, math operation and iteration/loop at the same time, thats a total of three different responsibilities. Any Rubyists mind explaining this? Are there good reasons for this possible violation of single responsibility principle?