https://medium.com/@hamzaijaz-dev/object-oriented-programming-oop-concepts-with-real-world-examples-ebe8a513b8d