12 abril 2013

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

Neste post abordamos a continuidade da aula anterior (parte 1) sobre o conceito do Polimorfismo aplicado na prática. Desta vez mostramos como criar as próprias classes para utilizar o conceito.

Fonte imagem






// Animal.java
package entidades;

public class Animal {

 private String nome;

 // opera›es
 public void emitirSom() {
  
 }

 public String getNome() {
  return nome;
 }

 public void setNome(String nome) {
  this.nome = nome;
 }
 
}

// Cachorro.java
package entidades;

public class Cachorro extends Animal {

 @Override
 public void emitirSom() {
  super.emitirSom();
  
  System.out.println("Latindo...");
 }
 
}

// Gato.java
package entidades;

public class Gato extends Animal {

 @Override
 public void emitirSom() {
  super.emitirSom();
  
  System.out.println("Miando...");
 }
 
}


// PetShop.java
import entidades.Animal;
import entidades.Cachorro;
import entidades.Gato;


public class PetShop {

 /**
  * POLIMORFISMO (aula pratica - parte 2)
  * 
  * Objetivos:
  * 
  * 1) Entender o conceito de Polimorfismo na pr‡tica
  *    usando as classes definidas pelo usu‡rio.
  *    
  *    - definicao de hierarquia classes
  *    - implementacao de exemplos
  * 
  * @author Douglas Frari
  * @see http://profdouglas.blogspot.com.br
  */

 
 public static void main(String[] args) {

  // criar dois objetos
  Cachorro cachorro1 = new Cachorro();
  Gato gato1 = new Gato();
  
  Animal animal1 = gato1;
  
  cachorro1.setNome("Totoh");
  gato1.setNome("Lu");
  
  cachorro1.emitirSom();
  gato1.emitirSom();
  
  // qual eh o metodo que serah usado? (cachorro ou gato)?
  animal1.emitirSom();
  
  animal1 = cachorro1;
  animal1.emitirSom();
  
  
  
  
 }

}





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.