I understand that it makes sense to manipulate pointer to an abstract class in order to decouple the interface from the actual implementation and exploit the benefits of pol