public abstract class OperacaoMatematica { public abstract double calcular(double x, double y); }
Está é uma classe abstrata que representa qualquer operação matemática. Podemos imaginar diversas operações que se encaixam na sua interface, como soma, subtração, multiplicação ou divisão, entre outras. Note que, embora que a natureza do cálculo mude, a semântica do método calcular não muda, ou seja, ele sempre calculará o resultado da operação matemática que está sendo trabalhada.
Definamos então, duas subclasses, Soma e Subtracao, que implementam a classe OperacaoMatematica:
public class Soma extends OperacaoMatematica { public double calcular(double x, double y) { return x+y; } }
public class Subtracao extends OperacaoMatematica { public double calcular(double x, double y) { return x-y; } }
O seguinte trecho de código demonstra o uso do polimorfismo:
public class Contas { public static double mostrarCalculo(OperacaoMatematica operacao, double x, double y) { system.out.println("O resultado é: " + operacao.calcular(x, y); } public static void main(String args*) { //Primeiro calculamos uma soma Contas.mostrarCalculo(new Soma(), 5, 5); //Imprime o resultado é: 10 Contas.mostrarCalculo(new Subtracao(), 5, 5); //Imprime o resultado é: 0 } }
Note que, embora o método calcular tenha sido chamado duas vezes no interior de mostrarCalculo, o comportamento apresentado variou de acordo com a classe ao qual ele representava no momento.
public void mostrarCalculo (int operacao, double x, double y) { System.out.print("O resultado é: "); switch (operacao) { case SOMA: System.out.print(""+(x+y)); break; case SUBTRACAO: System.out.print(""+(x-y)); break; //... outras operacoes default: throw new UnsupportedOperationException() } }
Além do código ser maior e mais difícil de ler, essa implementação tem outros problemas. Provavelmente esse não será o único método a utilizar operações matemáticas e, portanto, pode-se esperar não um, mas vários switchs como esse pelo código. O que acontece, então, se uma nova operação for adicionada ao sistema? Será necessário que todos os switchs sejam encontrados e substituídos. Com o polimorfismo, a modificação restringiria-se apenas a criação de uma nova classe.
O polimorfismo também é usado em uma série de refatorações, como substituir condicional por polimorfismo.
Programação orientada a objetos
Polymorphie (Programmierung) | Polymorphism (computer science) | Polimorfismo (programación orientada a objetos) | Polümorfism (informaatika) | Polymorphisme | פולימורפיזם | Polimorfizmas (programavime) | Polimorfizm (informatyka) | Полиморфизм в языках программирования
This article is licensed under the GNU Free Documentation License.
It uses material from the
"Polimorfismo".
Home Page • arts • business • computers • games • health • hospitals • home • kids & teens • news • physicians • recreation• reference • regional • science • shopping • society • sports • world