https://medium.com/@stefanhebuaa/understanding-the-has-a-and-is-a-relationship-in-object-oriented-programming-80bb5bd66b2d