05 abril 2013

Polimorfismo - parte 1: programação orientado a objetos com Java

Neste post abordaremos o conceito de programação orientada a objetos conhecido como Polimorfismo. Como aplicar o conceito na prática usando a linguagem Java. Para entendermos estou organizando alguns vídeos para ilustrar melhor duas formas de utilização:
  1. Usando as classes da linguagem Java de algumas bibliotecas que já estão disponíveis;
  2. Construir nossos próprios tipos e então entender como tirar proveito do Polimorfismo.
Neste pequeno artigo veremos o primeiro caso.

Polimorfismo precisa ter uma hierarquia de classes com herança. Fonte imagem 


De acordo com a Wikipédia (fonte), podemos considerar o conceito de Polimorfismo:


"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, é possível tratar vários tipos de maneira homogênea (através da interface do tipo mais abstrato). O termo polimorfismo é originário do grego e significa "muitas formas" (poli = muitas, morphos = formas).

O polimorfismo é caracterizado quando duas ou mais classes distintas tem métodos de mesmo nome, de forma que uma função possa utilizar um objeto de qualquer uma das classes polimórficas, sem necessidade de tratar de forma diferenciada conforme a classe do objeto.[1]"


Vejamos o exemplo que fiz no vídeo:






import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;


public class Polimorfismo_parte1 {

 /**
  * POLIMORFISMO (aula pr‡tica - parte 1)
  * 
  * Objetivos:
  * 
  * 1) Entender o conceito de Polimorfismo na pr‡tica
  *    usando as classes j‡ existentes no Java
  * 
  * @author Douglas Frari
  * @see http://profdouglas.blogspot.com
  */
 
 
 public static void main(String[] args) {
  
  ArrayList lista1 = new ArrayList();
  List lista2 = new ArrayList();
  List lista3 = new LinkedList();
  
  
  lista1.add("Elemento 1");
  lista1.add("Elemento 2");
  lista1.add("Elemento 3");
  
  
  lista2.add("Elemento 1.1");
  lista2.add("Elemento 2.1");
  lista2.add("Elemento 3.1");
  
  lista3.add("Elemento 1.1.1");
  lista3.add("Elemento 2.1.1");
  lista3.add("Elemento 3.1.1");
  
  // imprimir elementos
  imprimirLista(lista1);
  imprimirLista(lista2);
  imprimirLista(lista3);
  
 }
 
 static void imprimirLista(final List lista) {
  
  for (String itemLista : lista) {
   System.out.println(itemLista);
  }
  
 }
 
 
 
}


Conclusões

O conceito de polimorfismo em programação orientada a objetos é bastante útil para compreender como os objetos podem assumir diferentes responsabilidades no programa, dependendo de como foram declarados e como são instanciados pode-se reusar estruturas e operações. O resultado disso pode não ser tão útil assim, mas é. Quando se entende o conceito começamos a pensar de forma a favorecer o reuso e assim minimizamos a quantidade de linhas de código programáveis.

Um comentário:

Flávio Meloti disse...

Douglas, poderia me tirar uma dúvida, por favor?
Se complementar seu código com a linha List lista4 = new List(); é apresentado o erro: List is abstract; cannot be instantiated, o que há de errado? Obrigado desde já.