https://medium.com/@michal.jaglewicz/modelling-the-world-with-code-first-steps-in-object-oriented-programming-d049f4214a39