sábado, 21 de junho de 2008

Padrões GRASP - parte II (Polimorfismo)

Aulas 26 e 27



Na área científica definimos polimorfismo como sendo uma propriedade que possui certas substâncias com a capacidade de se apresentarem sob muitas formas, sem mudarem de natureza, ou seja, de tipo. Em que esse pequeno parágrafo tem a ver com o design pattern polimorfismo? Segundo os autores do livro Core Java, Cornell & Horstmann, polimorfismo é a capacidade de um objeto decidir qual método aplicará a si mesmo, dependendo de onde se encontra na hierarquia de herança.

Complementando a idéia dos autores, podemos dizer em outras palavras que polimorfismo é a capacidade de um objeto de se transformar em outros objetos, dependendo do contexto onde está sendo aplicado, sem mudar o seu tipo, isso ocorre através dos métodos que são herdados de uma superclasse.

O questionamento que leva ao uso do polimorfismo é: como criar componentes de softwares conectáveis com base no tipo? Supomos que temos uma classe que faz três diferentes tipos de ações, imagine que uma outra classe sempre disparasse chamadas a essa classe, solicitando a execução de uma dessas ações, ou seja, quando chega a mensagem, teríamos sempre que testar qual seria o tipo de ação a ser executada, e só então executá-la.
If tipoação 1
...
Else
If tipoação 2
...
O design pattern polimorfimo prega que nunca teste o tipo de um objeto nem use condições lógicas no código para executar alternativas com base no tipo. Por que? Respondo com outra pergunta. E se o tipo mudar?
Com base no exemplo dado pelo Wikipedia vamos considerar a seguinte classe escrita em Java:

Esta é uma classe abstrata que representa qualquer operação matemática. Existem várias operações matemáticas, com isso não podemos ficar testando uma por uma. 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.

Veremos duas subclasses que implementam duas dessas operações matemáticas

O seguinte trecho de código demonstra o uso do polimorfismo:

Embora o método calcular tenha sido chamado duas vezes em mostrarCalculo, o comportamento apresentado variou de acordo com a classe ao qual ele representava no momento.


http://www.mail-archive.com/java-list@soujava.org.br/msg09906.html
http://www.tecnoclasta.com/2007/12/18/aula-11-classes-interfaces-e-polimorfismo/
http://pt.wikipedia.org/wiki/Polimorfismohttp://www.dca.fee.unicamp.br/cursos/PooJava/polimorf/index.html

Nenhum comentário: