Dificuldade para entender interface

Dae pessoal!

Gente é o seguinte… já li vários tutoriais por ai explicando o que é uma inteface no Java… na Wikipédia, todos foruns que encontrei sobre Java, apostila da Caelum e outras que baixei… mas não consigo entender de jeito nenhum pra que serve a tal da inteface!.. pelo que vi parece que é só uma classe com métodos sem ações, só estão declarados lá mas não fazem nada, dai tem que dar um implements pra usar reescrever aquele método que está sem função nenhuma na inteface. Sei lá mas está muito confuso isso!..

Meu pedido é: Me ajudem com uma explicação sobre isso, alguma coisa esclarecedora pra ver se acende uma luz! :arrg:

Valeu :joia:

A interface é um contrato…imagina que todas as suas classes DAO deverão implementar os seguintes metodos:

  • save
  • find
  • findAll
  • delete

Como cada classe DAO vai implementar é problema exclusivo da classe…vc só quer ter certeza que eles serão implementados.
Então vc define uma interface e declara os métodos acima…

public class ColaboradorDAO implements InterfaceDAO{
}
...
public class ProdutoDAO implements InterfaceDAO{
}

Tanto ColaboradorDAO quanto ProdutoDAO obrigatoriamente terão que reescrever os métodos acima…porque? Porquê implementam a interface que tem esses métodos…“aceitaram o contrato”…

entendeu?
Não? Posta aí…

t+

Cara creio que a origem de suas dúvidas sobre interfaces devem ser questionamentos do tipo:

“Se uma interface é composta de métodos que possuem somente as suas assinaturas e não implementam nada, então porquê raios me serve essa tal de interface se terei que implementá-la em outra classe?”

Bem, se eu consegui acertar a sua dúvida (me baseio no seu post anterior) então a resposta para ela é:

“Interfaces são úteis para resolver problemas de herança múltipla (de modo bem resumido).”

Como em Java não é possível herdar mais de uma classe, o seu projeto de classes deve contemplar uma interface para que as outras classes possam implementar os seus métodos no momento mais oportuno. Mas o momento mais oportuno é uma questão de projeto.

Agora se você quer somente enteder o funcionamento de uma interface, o seu post você já disse mais de 80% da questão. Interfaces são exatamente o que você escreveu, ou seja, uma interface é composta de declarações de métodos sem ações para que os mesmos sejam implementados em outras classes.

Espero que eu tenha ajudado a clarear as suas idéias.

interface é um conceito, um padrao, nao queira q ela tenha uma funcionalidade como uma classe pq o proposito é outro, imagine uma tomada, isso… uma tomada eletrica, ela é uma interface, pra todos os aparelhos eletronicos, imagine se cada aparelho tivesse um plug de tomada, caos total né… interface é somente um meio generico de se utilizar um recurso, eu entendi ou melhor compreendi melhor interface quando comecei a mexer com Collections, tem um tutorial muito interessante no portal sobre Collections talvez ajude.

Obrigado por responderem!..
Então pelo que entendi uma interface é só implementada para que o programador daquela classe que está recebendo ela não esqueça de utilizar aquele método?.. e vocês usam isso mesmo ou não tem tanta importância? Ah!.. e a luz já está começando acender :lol:

Valeu :joia:

Interface é um dos 3 tipos existentes em Java. Os outros são Classe e Enum.

Uma interface declara apenas assinaturas dos métodos públicos e/ou constantes publicas globais. Ela pode também declarar interfaces aninhadas que são interfaces usadas pela interface mae (veja Map e Map.Entry para um exemplo)

Uma interface pode não ter métodos declarados, caso em que se diz que é uma interface marcadora, como Serializable.

Interfaces servem para:

  1. Declarar os métodos que são necessários independemente de como eles serão implementados. Isto é uma forma de encapsulamento.
  2. Declarar variáveis de objeto tendo em vista o que elas representam no escopo e não como funcionam internamente. Isto é polimorfismo e tb uma forma de encapsulamento.

Vc ja deve ter ouvido falar “programe para interfaces”. Isto significa que todos os seus métodos devem aceitar interfaces e retornar interfaces sempre que possivel e que as suas variáveis devem ter como tipo uma interface e não uma classe.

Por exemplo:

public String toTitleCase(String titulo);

seria um método que recebe uma string e coloca em maiuscula a primeira letra de cada palavra. Isto limita-me a usar apenas String. Não posso usar StringBuffer ou StringBuilder ou qualquer outra classe que eu sei que contém texto. Mas se eu definir usando interfaces:

public CharSequence toTitleCase(CharSequence titulo);

Faz a mesma coisa, mas agora eu posso passar String, StringBuilder, StringBuffer ou qualquer classe que eu invente e implemente CharSequence.

Note que ao fazer isto, automáticamente vc está tornando o código mais simples de usar, mais eficiente e aplicável em mais situações. Esse é o grande objetivo de POO : reusabilidade , que seria muito limitada se não existissem Interfaces.

Muitas vezes uma interface é chamada de contrato. Ela estabelece um vinculo, um contrato entre a classe que implementa o codigo dos métodos e a classe que os usa sem que que a classe que usa conheça qual a classe que implementa.

É relevante lembrar que uma classe que implemente uma interface tem de possuir todos os métodos definidos nessa interface reescritos.

Entrando meio de gaiato na história…
Alguém tem um exemplo simples do uso de interface, pois ainda não entendi direito a sua utilidade… :frowning:
Obrigado…

exemplo em codigo nao ia ajudar muito, o ideal seria postar um diagrama, mas estou sem nenhum programa pra fazer, bom, vou tentar explicar…

ja foi dito, do “contrato”, uma classe q implementa uma interface, assina um contrato onde existem algumas obrigações, nesse caso a implementação dos métodos declarados na interface.

seria algo como um molde, o molde sozinho não faz muita coisa, apenas define a forma, mas o q for construido seguindo aquele molde, deve ter aquela forma, porém pode ser feito com materiais diferentes, por exemplo.

sera q ajudei nessa? hehehehe

Não necessáriamente. Se a classe é abstract ela pode delegar a implementação dos métodos da interface

[quote=“theze86”]Entrando meio de gaiato na história…
Alguém tem um exemplo simples do uso de interface, pois ainda não entendi direito a sua utilidade… :frowning:
Obrigado…[/quote]


List lista = new ArrayList();

lista.add("Oi");
lista.add(" a Todos");

Estou adicionado os objetos numa variável do tipo list. Eu posso mudar a classe que fica tudo na mesma


List lista = new LinkedList();

lista.add("Oi");
lista.add(" a Todos");

Não necessáriamente. Se a classe é abstract ela pode delegar a implementação dos métodos da interface[/quote]

Exacto, obrigado pela correcção

Bem pessoal… acho que agora acendeu uma lâmpida de 10 watts(é ta meio escurinho ainda, mas já deu uma clareada =P) :lol: :lol: … deu pra entender mais ou menos, obrigado ae!! e se alguém mais tiver alguma coisa pra explicar por favor não se acanhe :wink:

Valeu

[quote=“Uchiha_Itachi”]Bem pessoal… acho que agora acendeu uma lâmpida de 10 watts(é ta meio escurinho ainda, mas já deu uma clareada =P) :lol: :lol: … deu pra entender mais ou menos, obrigado ae!! e se alguém mais tiver alguma coisa pra explicar por favor não se acanhe :wink:

Valeu[/quote]

O Sérgio explicou muito bem, assim como os demais, acho que agora o que você tem a fazer é partir para o código e aprender com os erros.

Imagine que voce tem que fazer um programa que tenha um cadastro de clientes e de produtos.

Para ambos, voce devera poder fazer inclusao, exclusao, alteracao e consulta

Voce cria uma Interface chamada ManipulaDados e coloca dentro dela os metodos:

void gravaDados();
void apagaDados();
void alteraDados();
void consultaDados();

Quando voce cria uma classe que implementa essa interface, voce obrigatoriamente tera que implementar os metodos dessa interface.

por Ex.

Public Class Clientes implements ManipulaDados {

void gravaDados();
// … coloca o seu codigo …

void apagaDados();
// … coloca o seu codigo …

void alteraDados();
// … coloca o seu codigo …

void consultaDados();
// … coloca o seu codigo …

Public Class Produtos implements ManipulaDados {

void gravaDados();
// … coloca o seu codigo …

void apagaDados();
// … coloca o seu codigo …

void alteraDados();
// … coloca o seu codigo …

void consultaDados();
// … coloca o seu codigo …

Qualquer Classe que implementar essa interface, precisa ter esses metodos.
Espero ter ajudado !

}