quarta-feira, 7 de julho de 2010

Polimorfismo

Este post irá resolver dois exercícios sobre polimorfismo.

Exercício 1: Crie uma classe Automovel e duas especializações: Carro e Moto. Implemente o método andar com mensagem diferente para cada classe.


Agora que as classes Carro e Moto implementaram a interface Automovel elas poderão ser referenciadas pelo tipo de classe Automovel e não mais apenas pelo tipo de classe específica delas. Logo abaixo está um exemplo demonstrando esse aspecto do polimorfismo que nos permite isolar e alterar as implementações (neste casso as classes Carro e Moto) mantendo as funcionalidades do sistema (neste casso o método andar) sem sofrerem nenhum tipo de alteração ou ajuste para se adequar as novas classes.

Saída no console: "Vruuum!!!"

Saída no console: "Pe-péééééé!!!"

Se você não entendeu ainda o conceito, aqui vai um bom exemplo de implementação de interface na vida real.
  • Interface: Governo
  • Método principal da interface: public void cobrarImpostos(long muitoDinheiro);
  • Classes que implementam a interface: Politico e qualquer outra classe que herda Politico
A interface Governo serve para "fechar o acordo" de que a principal funcionalidade do sistema é "cobrar impostos" e que isso deve acontecer independente do tipo específico de político que a implementar. Portanto, graças as interfaces na vida real, a cada ciclo letivo os "objetos" políticos mudam (as vezes para melhor as vezes para pior), mas nem por isso é necessário em todo novo ciclo letivo fazer qualquer modificação ou ajuste na principal funcionalidade do sistema.
Caso a funcionalidade "cobrar impostos" não fosse uma interface, mas estivesse implementada em cada político, então a cada novo ciclo letivo seria necessário que todos novos políticos passassem por um processo demorado de aprendizado da funcionalidade "cobrar impostos" que poderia acabar sendo implementada diferente em cada um deles. E uma grave consequência disso seria a demora para cada novo político por em prática a funcionalidade principal do sistema. Mas podemos ficar tranquilos pois este tipo de interface hoje é muito bem implementada.
OBS: Este exemplo é apenas uma brincadeira saudável.


Exercício 2: Faça um programa que tenha um método que você passa 3 automóveis, ele executa o método andar e informa qual é o automóvel mais rápido.

Note que agora a interface possui 2 métodos novos que permitem capturar a velocidade e a descrição dos automóveis (independente do tipo deles).



Note que esta classe foi feita com a intenção de poder receber mais de 3 automóveis, mas no enunciado está pedindo para testar apenas 3.

Saída no console:
Vruuum!!!
Vruuum!!!
Pe-péééééé!!!
Automóvel mais rápido: Fiat 147 tunado

Um comentário: