I think it's worth to mention the component based architecture which is quite attractive.
Basically it says that your main classes are containers of components and components are behaviors or features (like "Render", "Collide", "Controllable").
It's a way to avoid the duplication problem of the inheritance and big base classes.
However even if it solves the problem of the inheritance, it brings new problem (as the communication between components) but at least your code is more independent and intuitive.
A very nice article:
Also please note that there are many different ways to implement this solution but the idea stays the same : you create some components which represent behaviors or features and you create your final object by assembling the components you need.