PythonPOOintermediario

Polimorfismo

Em sistemas reais, você frequentemente trabalha com listas de objetos que compartilham a mesma interface, mas têm implementações diferentes — por exemplo, desenhos, formas geométricas ou pagamentos. Usar polimorfismo permite que seu código trate todos eles de forma uniforme, sem precisar verificar o tipo de cada um. Isso torna o código mais flexível e fácil de estender: basta adicionar uma nova classe que implemente o método area() sem alterar o loop existente.

O PROBLEMA

Forma com area(). Lista mista de Circulo e Quadrado, calcule área total.

EXEMPLO

sum(f.area() for f in formas) → 122.12

SOBRE O CONCEITO

Polimorfismo é a capacidade de diferentes classes responderem ao mesmo método de maneira específica. Aqui, Circulo e Quadrado herdam (ou simplesmente implementam) um método area(), mas cada um calcula sua área de forma diferente: math.pi * r ** 2 para círculo e lado ** 2 para quadrado. O erro comum é tentar verificar o tipo com isinstance para decidir como calcular a área — isso quebra o polimorfismo, tornando o código rígido e difícil de manter. Em vez disso, você pode percorrer a lista e chamar f.area() diretamente em cada objeto, pois o Python resolve qual método executar em tempo de execução. O exemplo sum(f.area() for f in formas) já faz isso corretamente: ele usa uma generator expression para somar todas as áreas sem qualquer verificação de tipo.

RESOLUÇÃO

Mais exercícios de POO

PYPOI2I · IntermediárioHerança simplesPYPOI1I · IntermediárioProperty e setterPYPOI5I · IntermediárioClasse abstrataPYPOO7B · BásicoMétodo estático
Ver todos os exercícios de Python