https://medium.com/@pankajyadav_7739/building-better-software-exploring-the-world-of-object-oriented-programming-17f594a99b47