Conceito de interface.

Java

13/10/2016

O que é e pra que serve uma interface?
Wellington

Wellington

Curtidas 0

Melhor post

Hélio Devmedia

Hélio Devmedia

13/10/2016

Tem a resposta complexa e tem a resposta simples...

[Não escreverei códigos de exemplos porque existem aos montes na internet cada qual para uma linguagem, mas abaixo vai as explicações]

Na Wikipedia que tem uma resposta similar aos demais autores interface e em seguida colocarei a minha definição que é mais simples porém enchi de exemplos:

[i]
"Em algumas linguagens de programação, o termo interface (ou protocolo[1][2]) é uma referência à característica que permite a construção de interfaces que isolam do mundo exterior os detalhes de implementação de um componente de software...

...O princípio da interface é um alicerce da programação modular que, por sua vez, é precursora e parte da programação orientada a objeto. Na programação orientada a objeto, a interface de um objeto consiste de um conjunto de métodos que um objeto deve suportar. É importante notar que as variáveis de instância não fazem parte da interface de um objeto pois devem ser acessadas somente pelos "métodos de acesso". Historicamente, as interfaces são derivadas dos arquivos de cabeçalho da Linguagem C (normalmente arquivos com extensão ".h") que separam o contexto sintático de um módulo (ou protótipos de funções) da sua implementação..."
[/i]

Agora a Resposta Simples... Que é a minha definição.

Interface é um recurso para permitir fazer códigos mais flexíveis, desenvolver algorítmicos mais bem elaborados e diminuir a amarração de código, visto que a interface permite acessar atributos e métodos de outra classe sem acessar esta classe diretamente.
A Interface se parece com uma classe mas só contem assinatura de métodos e não a implementação deles porque a implementação será feita dentro da classe que se relacionar com a interface.
Se você cria um atributo (ou propriedade) de um determinado tipo de interface, qualquer classe que implementou esta interface poderá ser atribuída neste atributo.

Entre as possibilidades de uso da interface temos:

1 - Acessar propriedades ou métodos de classes que não fazem parte de um Package, que por outro lado, se fossem essas classes acessadas diretamente deixariam o código muito amarrado. Ex: Imagine que você tem um package com várias classes que pegam os Dados do banco e gera um arquivo TXT do sintegra. Então você precisa acessar os dados, porém os dados vem de outro package, se você acessar diretamente o outro package "você amarra muito o código", então, você:
1.1- Cria uma interface, independente dos packages com um método do tipo pegarDados;
1.2 - Implementa essa interface nas classes do package que acessa o banco colocando um algoritmo que retorna os Dados;
1.3 - Nas classes do package que gera o sintegra, cria um atributo do mesmo tipo da interface;
1.4 - E dentro do sistema, seta o atributo com a classe de Dados que implementou a interface, que agora é possível;
1.5 - Quando o package do sintegra precisar dos dados do outro package, ele acessará o atributo que terá o método pegarDados;

2 - Separar Tecnologias de implementação: Imagine o mesmo exemplo acima, e você tem dois packages de dados, um para acessar Oracle e outro para acessar MySQL, e você ainda desenvolverá para outros bancos. Se todas as classes destes packages implementarem a mesma interface em comum, você pode setar o atributo da interface qualquer das classes diferentes em tempo de execução, porque todas elas terão os mesmos métodos das interfaces. Isto é, a tecnologia de acesso a dados não fica amarrada ao código do sistema.

- Criar algorítmicos Flexíveis mesmo com classes em heranças diferentes (ou sem herança nenhuma): As vezes as heranças não ajudam, porque você pode ter classes com o método Salvar, todas em herança, e outras classes com um método gravar, mas através da interface você pode fazer um algoritmo genérico que receba todas estas classes e execute os métodos diferentes.
3.1 - Crie uma interface com um método Persistir;
3.2 - implemente a interface nas classes com método salvar e faça o método "persistir" da interface chamar o método salvar.
3.3 - implemente a interface nas classes com método gravar e faça o método "persistir" da interface chamar o método gravar.
3.4 - crie um atributo do mesmo tipo da interface tipo IPersistencia i;
3.5 - Agora você pode setar o atributo tanto com as classes do método salvar como gravar, que quando chamar i.persistir, o método será executado independentemente se é gravar ou salvar.

4 - Facilitar o desenvolvimento do código ao programar pensando na interface. Ao invés de elaborar as classes primeiro, você pode elaborar pensando em interfaces e depois você encaixa as interfaces nas classes. Imagine que você está desenvolvendo um aplicativo mobile e que grava logs de depuração, mas você ainda não decidiu se vai gravar num servidor MySQL ou localmente no dispositivo ou mandar para o e-mail. Então você cria uma interface com o método salvar log e outros métodos (para receber os dados) e faz o algoritmo todo pensando só na interface, ou seja, dentro do algoritmo você só chamará os métodos da interface. Depois você cria as classes e dentro de cada uma diz o que elas vão fazer, faz uma pra gravar localmente, outra pra gravar na internet e por assim diante. Ao final você programou mais rápido e tem um algoritmo mais flexível e de fácil manutenção.

Esses foram os exemplos que me lembrei agora. Estou certo que tem mais.

Se gostou da explicação marque um joinha pra eu saber.
GOSTEI 1
POSTAR