Suponha que queremos modelar diferentes tipos de comida; pizzas e tortas. Tanto pizzas quanto tortas têm um tipo de cobertura, mas suas coberturas são diferentes.
Implementamos uma classe abstrata Baked
, e duas classes concretas Pizza
e Pie
. Também implementamos uma classe abstrata Topping
, e duas classes concretas PizzaTopping
e PieTopping
.
Por definição, qualquer implementação concreta de Baked
deve ter um Topping
, então Baked
deve ter um atributo do tipo Topping
. Além disso, esse atributo de cobertura específico deve ser do tipo PizzaTopping
em Pizza
, e PieTopping
em Pie
.
Se entendi corretamente a resposta anterior , o LSP é violado nessa situação, porque se deixarmos de lado o fato de que Baked
é abstrato, seria possível instanciar um Baked
contendo a PieTopping
, mas isso não é possível se substituirmos Baked
por Pizza
.
Minha pergunta é: existe uma maneira de implementar esse modelo sem violar o LSP?