Polimorfirmo – POO

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).