evolved with inheritance only, step2
inheritance + composition
inheritance + composition with comments
with full inheritance + composition with comments