Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Interface

Gostaria entender de fato pra que serve e quando devo utilizar e quando não devo utilizar a interface, eu entendi o conceito, mas não ficou claro ainda. Desculpa pela pergunta mas realmente estou com dúvida.

2 respostas
solução!

Diogo,

Para entender o conceito de interface você teria que entender sua utilidade. Eu vou tentar explicar aqui de outra forma, mas eu recomendaria que você visse novamente o vídeo ou então lesse o texto que tem logo abaixo do vídeo para tentar entender novamente.

Pense na interface ao pé da letra. Quais exemplos de interfaces temos no mundo real? Podemos pensar na interface de um celular, na interface de um carro (o painel com volante, pedais, marcha, etc), entre tantos outros exemplos. O mesmo propósito serve em orientação a objetos.

Uma interface de um celular não faz dele um celular propriamente dito. O que define um celular é a especificação dos aparelhos (que seria a classe). Mas, o que há em comum entre os celulares para utilizarmos eles? O que há de comum entre iPhone, Android, Windows Phone, etc.? A interface.

Todos eles possuem comportamentos em comum. Você pode desbloquear, fazer ligação, aumentar e diminuir volume, abrir o menu, etc. Porém, o que muda é a implementação deles. Eles possuem hardwares diferentes entre si, tamanhos diferentes, peso diferentes. Isso está na especificação, deles.

Depois de ler tudo isso, ficaria:

public class Android implements TouchScreen  {
    private int tamanhoX;
    private int tamanhoY;
    private String modelo;
    private float peso;
    private String processador;
    (...)
    @Override
    public void TocouUmaVezNaTela() {
        (...)
    }
    @Override
    public void ToqueLongo() {
        (...)
    }
}

public interface TouchScreen {
    void TocouUmaVezNaTela();
    void ToqueLongo();
    (...)
}

Ou seja, sempre que você tiver comportamentos (Métodos) em comum entre mais de uma especificação classe é interessante você trabalhar com interfaces para garantir que todos tenham o comportamento necessário para realizar ações com um celular.

Outra vantagem é que você não precisa lidar com a especificação propriamente dita se quiser, por exemplo, chamar o método ToqueLongo do seu celular. Imagine que você tem uma classe que dispara esses métodos:

public class Clicador {
    public void AcaoDeClicarLongo(Android android) {
        android.ToqueLongo();
    }

    public void AcaoDeClicarLongo(Iphone iphone) {
        iphone.ToqueLongo();
    }
}

Clicador clicador = new Clicador();
Android android = new Android();
Iphone iphone = new Iphone();

clicador.AcaoDeClicarLongo(android);
clicador.AcaoDeClicarLongo(iphone);

Pra que repetir o código, se ambos tem a mesma interface?

public class Clicador {
    public void AcaoDeClicarLongo(TouchScreen celularComTouchScreen) {
        celularComTouchScreen.ToqueLongo();
    }
}

Clicador clicador = new Clicador();
Android android = new Android();
Iphone iphone = new Iphone();

clicador.AcaoDeClicarLongo(android);
clicador.AcaoDeClicarLongo(iphone);

O código acima vai funcionar da mesma forma!!! E escrevi menos coisa!!! Isso graças ao polimorfismo. Veja que também poderíamos ter escrito:

Clicador clicador = new Clicador();
TouchScreen android = new Android();
TouchScreen iphone = new Iphone();

clicador.AcaoDeClicarLongo(android);
clicador.AcaoDeClicarLongo(iphone);

Que funcionaria da mesma forma.

Espero que tenha ajudado.

Diogo,

Ficou mais alguma dúvida em relação a este assunto?

Abraço!