https://medium.com/@marouane.lhamidi/exploring-the-fundamentals-of-object-oriented-programming-with-java-3fa13e2daaff