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