Programação
 › Algoritmo  › C/C++  › Java
Web
 › HTML/XHTML  › JavaScript  › PHP
Sistema Operacional
 › Comandos de DOS  › Windows  › Linux  › Mac/BSD
Office
 › Word / Writer  › Excel / Calc
Áreas do Site
 › Download  › Fórum  › Blog
Recomendamos
Computadores e Informática em Lisboa
TI Expert » Programação » Java » Interfaces

Interfaces

Interface é um recurso da orientação a objeto utilizado em Java que define ações que devem ser obrigatoriamente executadas, mas que cada classe pode executar de forma diferente.

Interfaces contém valores constantes ou assinaturas de métodos que devem ser implementados dentro de uma classe.

E por que isso?

Isso se deve ao fato que muitos objetos (classes) podem possuir a mesma ação (método), porém, podem executá-la de maneira diferente.

Usando um exemplo bem drástico, podemos ter uma interface chamada aéreo que possui a assinatura do método voar(). Ou seja, toda classe que implementar aéreo deve dizer como voar(). Portanto, se eu tenho uma classe chamada pássaro e outra chamada avião, ambas implementando a interface aéreo, então, nestas duas classes devemos codificar a forma como cada um irá voar().

Uma interface é criada da mesma forma que uma classe, mas utilizando a palavra-chave interface no lugar de class.

interface nomeDaInterface { métodoAbstrato (argumentos); }

Usando uma Interface em uma Classe

Como vimos anteriormente, uma classe pode extender suas funcionalidades obtendo as características de outra classe num processo que chamamos de herança. Uma interface não é herdada, mas sim, implementada. Porque todo o código dos métodos da interface deve ser escrito dentro da classe que o chama. Dessa forma, obtemos as assinaturas dos métodos da interface em uma classe usando a palavra-chave implements.

A vantagem principal das interfaces é que não há limites de quantas interfaces uma classe pode implementar. O que ajuda no caso de heranças múltiplas que não é possível ser feito em Java, pois uma classe apenas pode herdar as características de uma outra classe.

Trazendo ao exemplo já usado por nós, teríamos o seguinte conceito.

1) Teríamos a classe principal que caracteriza a TV.

public class TV {
    private int tamanho;
    private int canal;
    private int volume;
    private boolean ligada;

    public TV(int tamanho) {
        this.tamanho = tamanho;
        this.canal = 0;
        this.volume = 0;
        this.ligada = false;
    }

    // abaixo teríamos todos os métodos construtores get e set...
}

2) Teríamos as ações que comumente toda televisão executa, mas que cada modelo pode executar de forma diferente. Como geralmente toda ação da TV é executada pelo controle remoto, então chamaremos esta interface de controle remoto.

public interface ControleRemoto {
    /*
     * Perceba que apenas a assinatura dos métodos estão aqui.
     * E cada método termina com um ponto-e-vírgula (;)
     */
    void mudarCanal(int canal);
    void aumentarVolume (int taxa);
    void diminuirVolume (int taxa);
    boolean ligar();
    boolean desligar();
}

3) Agora que temos nossa interface e a definição do que é a TV, vamos desenvolver duas TVs diferentes, imaginando que fossem duas marcas completamente distintas e que uma não tem nenhuma relação com a outra.

Como ambas as TVs irão implementar a interface ControleRemoto, então, no corpo das duas classes devem conter todos os métodos da interface. No exemplo usado abaixo, apenas implementaremos os métodos ligar e desligar.

A TV modelo 001 é uma TV simples, sem muitos recursos que quando acionarmos o comando desligar irá simplesmente desligar.

public class ModeloTV001 extends TV implements ControleRemoto {
    public final String MODELO = "TV001";

    public ModeloTV001(int tamanho) {
        super(tamanho);
    }

    public void desligar() {
        super.setLigada(false);
    }

    public void ligar() {
        super.setLigada(true);
    }

    public void aumentarVolume(int taxa) { }
    public void diminuirVolume(int taxa) { }
    public void mudarCanal(int canal) { }
}

O modelo SDX é uma TV mais moderna, que quando acionarmos o comando desligar irá apresentar uma mensagem dizendo "tchau!".

public class ModeloSDX extends TV implements ControleRemoto {
    public final String MODELO = "TV-SDX";

    public ModeloSDX(int tamanho) {
        super(tamanho);
    }

    public void desligar() {
        System.out.println("Tchau!");
        super.setLigada(false);
    }

    public void ligar() {
        super.setLigada(true);
    }

    public void aumentarVolume(int taxa) { }
    public void diminuirVolume(int taxa) { }
    public void mudarCanal(int canal) { }
}

Como pode ser visto, ambos possuem a mesma ação que é desligar, porém cada um executa de forma diferente.

public class ExemploInterfaceamento {
    public static void main(String[] args) {
        ModeloTV001 tv1 = new ModeloTV001(21);
        ModeloSDX tv2 = new ModeloSDX (42);

        tv1.ligar();
        tv2.ligar();

        System.out.print("TV1 - modelo " + tv1.MODELO + " está ");
        System.out.println(tv1.isLigada() ? "ligada" : "desligada");
        System.out.print("TV2 - modelo " + tv2.MODELO + " está ");
        System.out.println(tv1.isLigada() ? "ligada" : "desligada");

        // ambas as TVs estão ligadas e vamos desligá-las
        System.out.println("Desligando modelo " + tv1.MODELO);
        tv1.desligar();
        System.out.println("Desligando modelo " + tv2.MODELO);
        tv2.desligar();
    }
}
Faça o Download deste Código

Se prestarmos atenção, apenas a TV2 mostrará uma mensagem quando for desligada.

Para visualizar melhor este exemplo, baixe o código exemplo e implemente os métodos que faltam.

Creative Commons License
Autor: Denys William Xavier
Este artigo está sob Licença Creative Commons.

Faça o download da versão em PDF Indique nosso site Gostou?
Indique nosso site!
Este artigo foi
lido 107983 vezes
Bookmark e Compartilhe

Páginas Relacionadas

Enquete
O Google Chrome OS irá desbancar o Microsoft Windows 7?
» ProgramaçãoAlgorítmo | C/C++ | Java

» WebHTML/XHTML | JavaScript | PHP

» Sistema OperacionalComandos de DOS | Windows | Linux | Mac/BSD

» OfficeWord/Wirter | Excel/Calc

» Áreas do SiteDownloads | Fórum | Blog