Polimorfismo
O padrão de projeto Polimorfismo
Problema
- Como tratar alternativas baseadas no tipo de objeto?
- Se usar if-then-else ou switch-case, temos que mudar o código sempre que uma nova
alternativa surge
- A modificação tem que ser feita em todo lugar onde a alternativa deve ser tratada
- O resultado é um código pouco extensível
- Como criar componentes plugáveis?
- Como trocar um componente por outro sem afetar os clientes do componente?
- Há uma discussão mais detalhada de componentes em outro capítulo
Solução
- Usar operações polimórficas ao comportamento que varia entre os tipos
- Resultado: não se testa o tipo do objeto, chama-se a operação polimórfica,
simplesmente
Exemplo
- No estudo de caso, quem deveria ser responsável pela autorização de diferentes tipos
de pagamentos?
- Como a forma de obter autorização depende do tipo de pagamento (dinheiro, CC ou
cheque), podemos usar uma operação polimórfica autorize()
- A implementação da operação será diferente em cada subtipo

Discussão
- A idéia é semelhante ao padrão Expert ("eu mesmo faço")
- Polimorfismo é um dos padrões mais importantes no projeto de software
- Extensões são simples
- Exemplo: como adicionar um método de pagamento com débito direto em conta corrente?
Consequências
- Adições futuras e não antecipadas têm pouco efeito no código existente
proj2-1 programa próxima