POLIMORFISMO – JAVA
-
Upload
euzinho-granfino -
Category
Documents
-
view
7 -
download
1
Transcript of POLIMORFISMO – JAVA
POLIMORFISMO – JAVAPublicado em 24 de outubro de 2012 por fagianijunior
Dai você diz: -”Poli… pol… polinor… POLI O QUÊ????”
Calma calma meu jovem, polimorfismo não é tão complicado assim, é só um nome estranho mesmo. Eu morria de
medo desse trem ai também…
Olhando a raiz da palavra no grego:
POLI = Muitas
MORPHOS = Formas (Agora eu entendi o porque os Power ranger Morpham )
Então, já deu pra entender que ele pode se transformar em coisas diferentes não é?
Um controle remoto universal para televisão, é um bom exemplo de polimorfismo, ele contem uma classe
TELEVISÃO e outras classes que estendem dela, como: Sansung, CCE, Sony, Philco. E toda vez que você apertar o
botão ligar, ele irá criar uma única instancia do objeto do tipo televisão para a televisão selecionada, e esse mesmo
objeto será criado para qualquer outra das televisões. Não precisando assim instanciar todas as marcas de
televisão, se você só irá utilizar o controle em uma marca de televisão.
Para que o polimorfismo funcione, as assinaturas dos métodos devem por obrigação serem do mesmo tipo, você
não pode passar argumentos na assinatura do método para uma marca de tv específica.
12345
//Para tv CCE sem assinaturatv.liga();//Para TV Philco com assinatura passo um número de canal (int)tv.liga(10);//Isso vai fazer tudo dar errado, já que vai ser a mesma chamada para todas as televisões, se for passar argumentos ele tem que ser entendível para todas os métodos devem receber esse argumento...
Na figura acima temos o “objeto pai” televisão e suas filhas que possuem as mesmas funções de teclas, só que
com codificações diferentes. (Obs. Isso é um sistema de classe ‘pai’ e ‘filhas’ ainda não chegamos no polimorfismo
em sí.)
Vamos ao código:
A classe Pai vai se chamar “Televisao.java” os métodos dessa classe não precisam retornar nada, mas precisam
existir. No caso estou utilizando-os para retornar uma mensagem de erro.
classe Pai Televisao.java12345
public class Televisao {//Criei dois métodos, ligar e desligar, se fosse um controle remoto de verdade teria os métodos//para os botões numéricos, menus, extras e assim vai. public String ligar() { //Simplesmente ele retornará uma String (texto simples), se for chamado. return "Televisor não selecionado.";
6789101112
}
public String desligar() { return "Televisor não selecionado."; }}
Esse código foi basicamente replicado nas classes filhas, com suas devidas alterações. Lembrando que as classes
filham devem estender da classe pai.
Classe filha Cce.java12345678910
//public class Cce extends Televisao { public String ligar() { return "Ligando TV CCE com código CCEa6ed7pon"; }
public String desligar() { return "Desligando TV CCE com código CCEa6ed7pof"; }}
Classe filha Philco.java12
public class Philco extends Televisao { public String ligar() { return "Ligando TV Philco com código PHg56depon";
3456789
}
public String desligar() { return "Desligando TV Philco com código PHg56depof"; }}
Classe filha Sansung.java123456789
public class Sansung extends Televisao { public String ligar() { return "Ligando TV Sansung com código SAf6d99pon"; }
public String desligar() { return "Desligando TV Sansung com código SAf6d99pof"; }}
Classe filha Sony.java123456789
public class Sony extends Televisao { public String ligar() { return "Ligando TV Sony com código SOhg56dpon"; }
public String desligar() { return "Desligando TV Sansung com código SOhg56dpof"; }}
Até agora o que nos fizemos foi criar uma classe Pai e quatro classes Filhas com os mesmo métodos idênticos. Nós
só podemos alterar o que estiver dentro dos métodos, adicionando cálculos e chamando outras funções, somente o
nome e a assinatura devem ser iguais.
Agora vamos criar a nossa classe Principal.java, ela que vai fazer tudo funcionar. aqui é onde a mágica acontece.
Classe Principal.java12345678910111213141
import java.util.Scanner;import javax.swing.JOptionPane;
public class Principal { public static void main(String[] args) { //cria um objeto para receber o que o usuário digitar Scanner teclado = new Scanner(System.in);
//Aqui começa a ser criado o polimorfismo. criei o objeto 'tv' que é do tipo 'Televisao' //(Lembra da nossa primeira classe, é aquela mesmo, a classe Pai), pois então o objeto //vai ser do tipo Pai, mas vai poder assumir a postura de qualquer filha, e até mesmo //a do próprio Pai. No momento ela está como ninguem, por isso esse 'null'. Televisao tv = null;
//solicitamos qual o tipo de televisor o usuário tem em casa. System.out.println("Configure o controle universal de acordo com a sua televisão:\n\n 1 - Sansung\n 2 - CCE\n 3 - SONY\n 4 - Philco"); //Armazenamos a opção escolhida int opcao = teclado.nextInt(), acao = 0;
//E com a ajuda de um switch case instanciamos o objeto no tipo da filha escolhida pelo usuário //apartir desse momento, ela só será utilizada com esse tipo de televisão. switch (opcao) { //Caso seja Sony
516171819202122232425262728293
case 1: tv = new Sony(); break; //Caso seja CCE case 2: tv = new Cce(); break; //Caso seja Sansung case 3: tv = new Sansung(); break; //Caso seja Philco case 4: tv = new Philco(); break; //Caso o usuário digite a opção errada, instancio o próprio pai, que apesar de ser do tipo //'Telivisao' ele não é uma televisão propriamente dita, então utilizei ela como controle de erro default: tv = new Televisao(); break; }
//Aqui criei um loop só pra ficar divertida a brincadeira. Só finaliza o programa quando digitar 0 do { //Exibe as opções para o usuário utilizar, no caso só temos ligar e desligar, e o fechar //aplicativo System.out.println(" 1 - Ligar\n 2 - Desligar\n\n 0 - Fechar aplicativo"); acao = teclado.nextInt();
switch (acao) { //quando a opção ligar é acionada ele chama a classe que ele foi instanciado e exibe a //informação que a televisão foi ligada o mesmo pro desligar case 1: JOptionPane.showMessageDialog(null, tv.ligar()); break; case 2: JOptionPane.showMessageDialog(null, tv.desligar()); break; default: System.out.println("Opção inválida"); break; } } while(acao != 0); }}
031323334353637383940414243444
546474849505152
- Interessante não é?? E para que serve isso??
Presta atenção meu jovem mancebo, se fosse instanciar todos as classe para utilizar somente em um aparelho ia
dar um trabalho tremendo, e mais, você agora só precisa mexer nas classes de casa marca para corrigir ou
adicionar algo, bem mais prático mais limpo, e o estagiário vai conseguir ler e entender melhor o seu código em
Java…
Imaginem uma empresa que possui 20 impressoras diferentes, HP na sala do chefe, 5 Kyocera na geral, 5
matriciais no financeiro, 3 epson no almoxarifado, e sei lá uma 6 epson dentro do banheiro feminino o.0??
Para o seu programa funcionar em todas essas impressoras, trabalhar com polimorfismo seria uma bela escolha….
Então é isso ae povo… tomara que tenham entendido… e comenta ai em baixo, é de graça e me deixa feliz