https://medium.com/@anderson.buenogod/applying-the-open-closed-principle-ocp-in-c-with-a-practical-example-de4c890de3b9