Polimorfismo

9 respostas
henry.everton

Bom dia

Bom eu estou dando uma lida sobre Polimorfismo na apostila da Caelum, porém não entendi muito bem assim sobre… to dando uma procurada mais aqui… bom mas minha dúvida é o seguinte, quando utilizar o polimorfismo em um algoritmo?

9 Respostas

rbamartins

"Na programação orientada a objetos, o polimorfismo permite que referências de tipos de classes mais abstratas representem o comportamento das classes concretas que referenciam. Assim, um mesmo método pode apresentar várias formas, de acordo com seu contexto. O polimorfismo é importante pois permite que a semântica de uma interface seja efetivamente separada da implementação que a representa. O termo polimorfismo é originário do grego e significa “muitas formas” (poli = muitas, morphos = formas).
Exemplos

Suponha a seguinte classe escrita em Java:

public abstract class OperacaoMatematica {

public abstract double calcular(double x, double y);

}

Esta é 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, mesmo 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 void 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. É comum definir sobrecarga de métodos ou simplesmente sobrecarga como uma forma de polimorfismo embora esta definição deixe lacunas conceituais.

[editar] Benefícios do polimorfismo

[editar] Clareza e manutenção do código

Em linguagens de programação não polimórficas, para implementar o método mostrarCalculo, seria necessário recorrer a uma enumeração com o tipo de operação e, dentro do método, testar o valor da enumeração com um case, como no exemplo abaixo:

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.

[editar] Divisão da complexidade

Com o polimorfismo pode-se separar métodos genéricos de métodos mais específicos, dividindo a aplicação de acordo com o seu grau de abstração. Bibliotecas que usam esse recurso (herança+polimorfismo) são chamadas frameworks. Exemplos de frameworks conhecidas sao a VCL do Delphi, o Swing do Java.

[editar] Aplicações flexíveis

O polimorfismo combinado à reflexão permite facilmente a criação de plugins. A aplicação original cria interfaces e classes que tem muito conhecimento semântico, mas a sua implementação efetiva ficará a cargo de terceiros. Uma aplicacao gráfica, por exemplo, poderia ser implementada de forma a desenhar linhas, formas e gráficos precisos de acordo com operacões matemáticas fornecidas. Enquanto isso, empresas terceiras, nos diversos campos de sua atuação, implementariam as operações matemáticas específicas para o seu empreendimento (cálculos de órbitas para astronomia, cálculos estruturais para engenharia civil, balística para aeronáutica, etc)."

LPJava

http://www.guj.com.br/posts/list/50115.java

ViniGodoy

By the way. Ele recortou e colou isso do Wiki. Eu sei pq fui eu que escrevi lá! hahahahahahaha. :lol:

Para quem quiser ver direto de lá:

henry.everton

Muito obrigado, já sei o que quer dizer poliformismo.

é uma determinada classe saber interpretar e exercutar determinadas funções de acordo com o que ela recebe.

Ex:

tenho uma classe veiculo com seus objetos. Esta classe terá que interpretar veículo como um carro, um buzão, uma bicicleta e executar os métodos necessários.

T

ViniGodoy:
By the way. Ele recortou e colou isso do Wiki. Eu sei pq fui eu que escrevi lá! hahahahahahaha. :lol:

Para quem quiser ver direto de lá:
http://pt.wikipedia.org/wiki/Polimorfismo

E a prova do crime:

Só para encher o saco: sr. Everton, é Polimorfismo, não Poliformismo - as palavras que terminam em formismo na língua portuguesa normalmente não têm boa conotação: transformismo*, conformismo etc.

  • Transformismo, como você devem bem saber, é o hábito de certas pessoas de se vestirem como pessoas do sexo oposto. Não tem nada a ver com polimorfismo; para lembrar como é a forma certa de escrever polimorfismo, só lembrar que não tem nada a ver com transformismo.
Thiago.Oliver

Só uma perguntinha, se acharem ridicula ignorem por favor.

Polimorfismo só existirá quando existir Herança??

Paulo_Silveira

Thiago.Oliver:
Só uma perguntinha, se acharem ridicula ignorem por favor.

Polimorfismo só existirá quando existir Herança??

Herança ou interfaces. Com o tempo você vai ver que com interfaces fica melhor ainda…

rbamartins

ViniGodoy:
By the way. Ele recortou e colou isso do Wiki. Eu sei pq fui eu que escrevi lá! hahahahahahaha. :lol:

Para quem quiser ver direto de lá:
http://pt.wikipedia.org/wiki/Polimorfismo

n quis dizer q eu tinha escrito aquilo ali nao… apenas copiei e colei do wiki mesmo. Se vc postou la era pra q todos possam usar… só recortei e colei pra ca pq acho mais pratico ler direto do post aqui do q abrir outro link…

tanto q n fiz nenhuma referencia como se eu tivesse escrito E AINDA COLOQUEI TODO O TEXTO ENTRE ASPAS “…” O QUE QUER DIZER QUE FIZ REFERENCIA A ALGO ESCRITO POR OUTRA PESSOA
… flw

rbamartins

abraços

Criado 22 de junho de 2007
Ultima resposta 26 de jun. de 2007
Respostas 9
Participantes 7