POLIMORFISMO – JAVA

10
POLIMORFISMO – JAVA Publicado 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.

Transcript of POLIMORFISMO – JAVA

Page 1: 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

Page 2: POLIMORFISMO – JAVA

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.";

Page 3: POLIMORFISMO – JAVA

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";

Page 4: POLIMORFISMO – JAVA

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";    }}

Page 5: POLIMORFISMO – JAVA

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

Page 6: POLIMORFISMO – JAVA

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);    }}

Page 7: POLIMORFISMO – JAVA

031323334353637383940414243444

Page 8: POLIMORFISMO – JAVA

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….

Page 9: POLIMORFISMO – JAVA

Então é isso ae povo… tomara que tenham entendido… e comenta ai em baixo, é de graça e me deixa feliz