This model of a Music Shop structure demonstrates:
- unit testing as part of a TDD approach
- composition to realistically illustrate the type of association between accessory and instrument classes
- appropriate use of packages for organisation of code.
- use of interfaces to abstract out behaviours and distinguish between accessory and instrument classes
- abstract classes to keep the code DRY
- meaningfully named methods and variables to ensure clean code
- method overriding to reveal the polymorphic possibilities of the interface choice