I threw this together last night. If you don't understand OO programming, it will make no sense. Heck, it will still probably make no sense, but them's the breaks. This is not a tutorial. It's primarily an exploration of why inheritance is such an awful idea and how roles solve the problems found.
Roles are also known as "traits" in SmallTalk, but these are not the same thing as traits in C++. They are also not abstract classes, Java interfaces or Ruby mixins. I really wish people would stop saying they're the same. It's like saying a Lamborghini and a tricycle are both modes of transportation.