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:
1 2 3 |
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”.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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.
1 2 3 4 5 6 7 8 9 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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).