https://kevin-peery.medium.com/understanding-key-object-oriented-programming-oop-concepts-in-c-ecbc39793085