https://tungdevpro.github.io/posts/solid-liskov-substitution-principle/