Este é o primeiro artigo sobre Programação Orientada a Objetos, de uma série que pretendo publicar.
Polimorfismo:
Polimorfismo é o princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma identificação (assinatura), mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referência a um objeto do tipo da superclasse. A decisão sobre qual o método que deve ser selecionado, de acordo com o tipo da classe derivada, é tomada em tempo de execução, através do mecanismo de ligação tardia (Wikipedia).
Para demonstrar os conceitos de polimorfismo e método estático (método que pode ser aplicado à classe e não necessariamente a um objeto), suponhamos as seguintes classes java:
public abstract class Operacao {
public abstract double calcular(int x, int y);
}
A classe Operacao (acima) é uma classe abstrata que representa qualquer operação matemática (soma, subtração, divisão e multiplicação).
Definiremos a seguir as subclasses Soma, Subtracao, Divisao e Multiplicacao que têm a classe Operacao como “classe pai”.
public class Soma extends Operacao {
public double calcular(int x, int y){
double soma = x+y;
return soma;
}
}
public class Subtracao extends Operacao {
public double calcular(int x, int y){
return x-y;
}
}
public class Divisao extends Operacao {
public double calcular(int x, int y){
return x/y;
}
}
public class Multiplicacao extends Operacao {
public double calcular(int x, int y ){
return x * y;
}
}
A classe Contas (abaixo) como o método estático (static) mostrarCalculo.
public class Contas {
public static void mostrarCalculo(Operacao operacao, int x, int y){
System.out.println(“O resultado da é: ” + operacao.calcular(x, y));
}
}
Na classe Executa (abaixo) é demonstrado o uso do polimorfismo e do uso dos métodos estáticos.
public class Executa {
// Método principal (executável)
public static void main(String[] args) {
// Mostra a soma
Contas.mostrarCalculo(new Soma(), 8, 9); //Imprime o valor: 17.0
// Mostra a subtracao
Contas.mostrarCalculo(new Subtracao(), 12, 10); //Imprime o valor: 2.0
// Mostra a divisao
Contas.mostrarCalculo(new Divisao(), 12, 2); //Imprime o valor: 6.0
// Mostra a multiplicação
Contas.mostrarCalculo(new Multiplicacao(),23,23); //Imprime o valor: 529.0
}
}
O método calcular está sendo chamando quatro vezes dentro do método mostrarCalculo, mas o tipo utilizado como parâmetro é diferente ( o objeto operação “assume diferentes formas”, o que equivale ao conceito do Polimorfismo em POO).
O método calcular está sendo chamando quatro vezes dentro do método mostrarCalculo, mas o tipo utilizado como parâmetro é diferente ( o objeto operação “assume diferentes formas”, o que equivale ao conceito do Polimorfismo em POO).