Design notes

Abstraction means dealing with the level of detail that is most appropriate to a given task.

Composition is the act of collecting several objects together to create a new one.

Polymorphism is the ability to treat a class differently depending on which subclass is implemented.