Duvidas Sobres Interface!

Interface é uma forma de garantir que suas classes não semelhantes (que não “devem” ser estendidas umas das outras pois não obedecem a premissa “é um” básica pra se usar herança) sejam obrigadas a possuir um (ou mais) método/s em comum e mantenham o polimorfismo. Ou de garantir que mesmo classes semelhantes não herdem métodos que são específicos para algumas especialidades e para outras não.

Por exemplo, num contexto de um banco, você tem uma classe Funcionario (genérica) com os atributos básicos de todos os funcionários, você tem classes mais específicas para outros tipos específicos de funcionários, tais como Caixa, Gerente, Secretaria, Estagiario, etc… que estendem a classe Funcionarios e adicionam/subrescrevem métodos e atributos.

Se nessa regra de negócio apenas alguns tipos de funcionários necessitam de um login, voce pode utilizar uma Interface Login e fazer com que apenas as classes especificas (Caixa e Gerente por exemplo) implementem a Interface Login, liberando Secretaria e Estagiario por exemplo de ser obrigada a tratar o login. Neste caso você poderia criar duas classes menos especificas de funcionarios (Funcionario->FuncionarioComLogin) e estender quem precisa de login do segundo (Funcionario->FuncionarioComLogin->Gerente) e quem não precisa do primeiro (Funcionario->Secretaria), porém utilizar interface é bem mais simples e recomendado.

O exemplo fica mais claro se voce adicionar uma classe Cliente que também precisa de um login, porém ela não é um Funcionario, logo você não poderia estender FuncionarioComLogin->Cliente (novamente estaria quebrando a premissa “é um” para se usar herança). Você cria a classe Cliente que implementa a Interface Login e pronto, voce garante que seu Cliente também tenha que tratar o login.

Interfaces também são muito utilizadas para se fazer composição de classes, ao invés de usar herança, reduzindo o acoplamento das classes e mantendo o polimorfismo.

PS: Semelhantes aqui significa “é um”.
PS: Exemplo baseado da aula de Interfaces do curso FJ-11 da Caelum.

Ixi, como faz pra trocar o nome do usuário? Não sabia que não podia por acento :frowning: é Fábio e não F?bio :stuck_out_tongue:

[quote=bcartaxo]Kra antecipadamente vou te dizer q esse é um problema que praticamente todo programador inciante tem. Eu só faltava rachar minha cabeça e n entendia quando ou como usar interfaces. Gostaria também de dizer q esse problema só será resolvido com a pratica, ou seja, vc só vai ter uma compreensão total do assunto qd botar a mão na massa e enfrentar problemas reais. Mas acredito q posso deixar alguma contribuição, deixando claro q ainda sou um programar iniciante e q posso cometer algum erro, e q caso aconteça apontem se alguma colocação for errada. Ai vai a minha explicação:

Interface é um conceito anterior ao java, que é inerente programação orientada a objetos, porém da forma como eh usada em java (com palavra resevada e td mais), se n me engano foi inaugurada com o java mesmo (ai n tenhno certeza).

Mas qual o conceito de interface de OO?

Interface é um meio que a OO criou para se ter acesso a componentes, subsistemas ou classes, já que o paradigma prega o encapsulamento e a ocultação de dados. Pode-se fazer a seguinte comparação com o mundo real: Um controle remoto de tv. Ele é um mecanismo eletrônico q tem seus circuitos e funciona baseado em conceitos q um leigo n tem como entender e utilizar (e poderia danificar caso resolvesse mexer), por essa razão o controle tem uma capa que cobre todo o sistema eletrônico (analogamente essa capa seria o encapsulamento de dados, essa capa q esconderia o funcionamento do controle), nessa capa existem botões q são de fácil entendimento para todos, são botões que te oferecem uma funcionalidade, ao apertar o botão de ON, vc sabe q o dispositivo vai ligar, mas n sabe como o controle fez pra operacionalizar tal ação, isso seria o encapsulamento. Mas note q vc utilizou uma “interface” para usar o controle remoto, e q interface seria essa? Os botões. Através da interface vc teve acesso a funcionalidades q estão perfeitamente encapsuladas, sem essa interface n seria possível ter acesso as funcionalidades de um determinado dispositivo. Porém note qualquer dispositivo q seja disponibiliza uma interface bem definida. A interface oferecida por um controle remoto seria o conjunto de todos os seus botões, se um controle tem um botão de FF (fast-forward “adiantar”) esse controle garante q vc pode adiantar, um dvd por exemplo, mas se vc desejar voltar (REW) e esse controle n tiver o dito botão, n será possível utilizar essa funcionalidade, já q a interface do dispositivo n oferece tal funcionalidade, assim sendo, a interface é algo restritivo, logo bem definido.
Trazendo agora termos de classes, oq seria a dita interface?
Objetivamente falando seriam as assinaturas dos métodos de uma classe. Pq as assinaturas dos métodos? Pq os métodos em OO são os dispositivos q executam um determinada funcionalidade(analogamente os botões do controle remoto oferecem uma funcionalidade), logo o conjunto de todas as assinaturas de métodos de uma classe seria a interface dessa classe, note q esse conceito de interface está desligado da palavra chave interface em java, afinal toda classe oferece uma interface para q possa ser usada, independente de vc implementar uma interface (do java) ou n.
Então o conceito de OO para interface seria resumidamente esse: O conjunto de funcionalidades q um dispositivo oferece ao mundo exterior (seja ela uma classe componente ou subsistema).

E oq é interface em java?

Antes de mais nada, claro q n é uma idéia dissociada da idéia de interface de OO, como vc vai notar a seguir.
Interface em java é um conjunto de declarações de métodos (funcionalidades), sem implementação. Mas pra que alguém declararia métodos sem implementação?
Vamos supor q vc queira criar um conceito de objetos q podem ser abertos, ou seja, objetos “abríveis” (sei a palavra não existe, mas entenda a idéia =P ). Daí vc criaria um interfafe “Abrível” q, por exemplo, declararia dois métodos, abrir() e fechar(). Toda classe q implementasse essa interface (implements) teria q declarar e implementar esses dois métodos. E q classes seriam essas? Inúmeras. Vc poderia ter uma classe janela ou uma classe arquivo, ou porta, ou oq quer q seja q possa ser aberto. Daí todas as classes q implementassem a interface ?Abrível? teriam o compromisso de oferecer as funcionalidades de abrir e fechar, mesmo q cada um abra e feche de forma diferente.
Preste bem atenção na frase anterior, na colocação ?de forma diferente?. Isso n seria polimorfismo??? Exato, a interface em java é um meio de viabilizar o polimorfismo. Por exemplo: Se vc tivesse varias classes de tipos diferentes, mas q implementassem a interface ?Abrível?, todas essas classes seriam do tipo ?Abrível?, assim sendo vc pode ter um array do tipo ?Abrível? q armazenaria classes do tipo janela, porta, arquivo, gaveta, ou oq quer q seja q implemente a interface ?Abrível?, notou o polimorfismo???
E oq o polimorfismo traz de bom? Flexibilidade. Imagine q vc define a dita interface ?Abrível? e depois q todo o código do sistema esteja pronto vc queira criar uma nova entidade, loja por exemplo, uma loja apresenta a característica abrível, afinal ela abre e fecha numa determinada hora, então ela poderia perfeitamente implementar a interface ?Abrível?. Então se vc criou a interface ?Abrível?, e num método de uma classe vc passa como parâmetro um objeto do tipo da interface ?Abrível?, vc pode usar o polimorfismo e passar uma loja no lugar de uma janela, mesmo q no momento q vc criou o sistema n existisse a entidade loja, note q como loja implemeta a interface ?Arível?ela pode ser utilizada em qualquer local q um outro objeto ?Abrível?. Notou a flexibilidade e a facilidade na hora de atualização de um sistema?
A interface tb é uma idéia do java para solucionar a questão da herança múltipla. Como vc deve saber java n suporta herança múltipla, mas existem casos q se faz necessário caracterizar uma classe como sendo de mais de um tipo, então a solução foi criar a idéia de interface do java, onde vc pode herdar de uma classe e implementar uma ou mais (qts vc bem entender) interfaces, podendo assim caracterizar uma classe como sendo de inúmeros tipos (o tal polimorfismo).
Resumindo: Eu diria interface em java é um dispositivo q fornece flexibilidade, viabiliza o polimorfismo e permite herança múltipla ?DE TIPO?.

Demorei umas meia hora pra escrever tudo isso, não sei se fui claro e se cometi algum erro de conceito, mas isso é oq tenho a passar pra vc ou qualquer outro q tenha duvida nesse tema. Me solidarizei bastante com sua duvida pq quebrei muito minha cabeça pra conseguir entender a idéia de interface. Espero ter sido útil.
[/quote]

:lol: ESPETACULAR SUA EXPLICAÇÃO CARA!!! NOTA 10 PRA VOCÊ…

[quote=Raff]Ai pessoal eu estou com muita duvida sobre Interface

Lá vai…

Tipo pessoal eu não to sabendo quando Usar… eu naun to sabendo enteder no que ela irá me ajudar… quando usar implements e/ou extends, e ainda estou com duvida de saber quando criar uma interface ao invez de uma classe e vice - versa… se voces tiverem DOCUMENTOS SOBRE INTERFACE PASSEM O LINKS PARA MIM EU AGRADEÇO…

BOM PESSOAL GOSTARIA DE APRENDER MESMO POR FAVOR ME AJUDEM []'s :?:[/quote]

Calma. Interface tem haver com polimorfismo. Dá uma olhada aqui: http://javafree.uol.com.br/topic-11507-Polimorfismo.html

Geralmente uma interface descreve um comportamento. Ex: Comedor terá um método come().

Quando vc tem uma classe abstrata, geralmente descreve uma entidade: Ex: Inseto e Mamífero. Ambos podem implementar a classe comedor, pois ambos comem.

Assim vc pode ter um método:

processa(Comedor comedor) {

}

que poderá receber qualquer Inseto ou Mamífero.

[quote=bcartaxo]Kra antecipadamente vou te dizer q esse é um problema que praticamente todo programador inciante tem. Eu só faltava rachar minha cabeça e n entendia quando ou como usar interfaces. Gostaria também de dizer q esse problema só será resolvido com a pratica, ou seja, vc só vai ter uma compreensão total do assunto qd botar a mão na massa e enfrentar problemas reais. Mas acredito q posso deixar alguma contribuição, deixando claro q ainda sou um programar iniciante e q posso cometer algum erro, e q caso aconteça apontem se alguma colocação for errada. Ai vai a minha explicação:

Interface é um conceito anterior ao java, que é inerente programação orientada a objetos, porém da forma como eh usada em java (com palavra resevada e td mais), se n me engano foi inaugurada com o java mesmo (ai n tenhno certeza).

Mas qual o conceito de interface de OO?

Interface é um meio que a OO criou para se ter acesso a componentes, subsistemas ou classes, já que o paradigma prega o encapsulamento e a ocultação de dados. Pode-se fazer a seguinte comparação com o mundo real: Um controle remoto de tv. Ele é um mecanismo eletrônico q tem seus circuitos e funciona baseado em conceitos q um leigo n tem como entender e utilizar (e poderia danificar caso resolvesse mexer), por essa razão o controle tem uma capa que cobre todo o sistema eletrônico (analogamente essa capa seria o encapsulamento de dados, essa capa q esconderia o funcionamento do controle), nessa capa existem botões q são de fácil entendimento para todos, são botões que te oferecem uma funcionalidade, ao apertar o botão de ON, vc sabe q o dispositivo vai ligar, mas n sabe como o controle fez pra operacionalizar tal ação, isso seria o encapsulamento. Mas note q vc utilizou uma “interface” para usar o controle remoto, e q interface seria essa? Os botões. Através da interface vc teve acesso a funcionalidades q estão perfeitamente encapsuladas, sem essa interface n seria possível ter acesso as funcionalidades de um determinado dispositivo. Porém note qualquer dispositivo q seja disponibiliza uma interface bem definida. A interface oferecida por um controle remoto seria o conjunto de todos os seus botões, se um controle tem um botão de FF (fast-forward “adiantar”) esse controle garante q vc pode adiantar, um dvd por exemplo, mas se vc desejar voltar (REW) e esse controle n tiver o dito botão, n será possível utilizar essa funcionalidade, já q a interface do dispositivo n oferece tal funcionalidade, assim sendo, a interface é algo restritivo, logo bem definido.
Trazendo agora termos de classes, oq seria a dita interface?
Objetivamente falando seriam as assinaturas dos métodos de uma classe. Pq as assinaturas dos métodos? Pq os métodos em OO são os dispositivos q executam um determinada funcionalidade(analogamente os botões do controle remoto oferecem uma funcionalidade), logo o conjunto de todas as assinaturas de métodos de uma classe seria a interface dessa classe, note q esse conceito de interface está desligado da palavra chave interface em java, afinal toda classe oferece uma interface para q possa ser usada, independente de vc implementar uma interface (do java) ou n.
Então o conceito de OO para interface seria resumidamente esse: O conjunto de funcionalidades q um dispositivo oferece ao mundo exterior (seja ela uma classe componente ou subsistema).

E oq é interface em java?

Antes de mais nada, claro q n é uma idéia dissociada da idéia de interface de OO, como vc vai notar a seguir.
Interface em java é um conjunto de declarações de métodos (funcionalidades), sem implementação. Mas pra que alguém declararia métodos sem implementação?
Vamos supor q vc queira criar um conceito de objetos q podem ser abertos, ou seja, objetos “abríveis” (sei a palavra não existe, mas entenda a idéia =P ). Daí vc criaria um interfafe “Abrível” q, por exemplo, declararia dois métodos, abrir() e fechar(). Toda classe q implementasse essa interface (implements) teria q declarar e implementar esses dois métodos. E q classes seriam essas? Inúmeras. Vc poderia ter uma classe janela ou uma classe arquivo, ou porta, ou oq quer q seja q possa ser aberto. Daí todas as classes q implementassem a interface ?Abrível? teriam o compromisso de oferecer as funcionalidades de abrir e fechar, mesmo q cada um abra e feche de forma diferente.
Preste bem atenção na frase anterior, na colocação ?de forma diferente?. Isso n seria polimorfismo??? Exato, a interface em java é um meio de viabilizar o polimorfismo. Por exemplo: Se vc tivesse varias classes de tipos diferentes, mas q implementassem a interface ?Abrível?, todas essas classes seriam do tipo ?Abrível?, assim sendo vc pode ter um array do tipo ?Abrível? q armazenaria classes do tipo janela, porta, arquivo, gaveta, ou oq quer q seja q implemente a interface ?Abrível?, notou o polimorfismo???
E oq o polimorfismo traz de bom? Flexibilidade. Imagine q vc define a dita interface ?Abrível? e depois q todo o código do sistema esteja pronto vc queira criar uma nova entidade, loja por exemplo, uma loja apresenta a característica abrível, afinal ela abre e fecha numa determinada hora, então ela poderia perfeitamente implementar a interface ?Abrível?. Então se vc criou a interface ?Abrível?, e num método de uma classe vc passa como parâmetro um objeto do tipo da interface ?Abrível?, vc pode usar o polimorfismo e passar uma loja no lugar de uma janela, mesmo q no momento q vc criou o sistema n existisse a entidade loja, note q como loja implemeta a interface ?Arível?ela pode ser utilizada em qualquer local q um outro objeto ?Abrível?. Notou a flexibilidade e a facilidade na hora de atualização de um sistema?
A interface tb é uma idéia do java para solucionar a questão da herança múltipla. Como vc deve saber java n suporta herança múltipla, mas existem casos q se faz necessário caracterizar uma classe como sendo de mais de um tipo, então a solução foi criar a idéia de interface do java, onde vc pode herdar de uma classe e implementar uma ou mais (qts vc bem entender) interfaces, podendo assim caracterizar uma classe como sendo de inúmeros tipos (o tal polimorfismo).
Resumindo: Eu diria interface em java é um dispositivo q fornece flexibilidade, viabiliza o polimorfismo e permite herança múltipla ?DE TIPO?.

Demorei umas meia hora pra escrever tudo isso, não sei se fui claro e se cometi algum erro de conceito, mas isso é oq tenho a passar pra vc ou qualquer outro q tenha duvida nesse tema. Me solidarizei bastante com sua duvida pq quebrei muito minha cabeça pra conseguir entender a idéia de interface. Espero ter sido útil.
[/quote]

To aprendendo isso na faculdade agora e é complicado pra caramba. Mas gostei muito da seu post, obrigado.

[quote=bcartaxo]Kra antecipadamente vou te dizer q esse é um problema que praticamente todo programador inciante tem. Eu só faltava rachar minha cabeça e n entendia quando ou como usar interfaces. Gostaria também de dizer q esse problema só será resolvido com a pratica, ou seja, vc só vai ter uma compreensão total do assunto qd botar a mão na massa e enfrentar problemas reais. Mas acredito q posso deixar alguma contribuição, deixando claro q ainda sou um programar iniciante e q posso cometer algum erro, e q caso aconteça apontem se alguma colocação for errada. Ai vai a minha explicação:

Interface é um conceito anterior ao java, que é inerente programação orientada a objetos, porém da forma como eh usada em java (com palavra resevada e td mais), se n me engano foi inaugurada com o java mesmo (ai n tenhno certeza).

Mas qual o conceito de interface de OO?

Interface é um meio que a OO criou para se ter acesso a componentes, subsistemas ou classes, já que o paradigma prega o encapsulamento e a ocultação de dados. Pode-se fazer a seguinte comparação com o mundo real: Um controle remoto de tv. Ele é um mecanismo eletrônico q tem seus circuitos e funciona baseado em conceitos q um leigo n tem como entender e utilizar (e poderia danificar caso resolvesse mexer), por essa razão o controle tem uma capa que cobre todo o sistema eletrônico (analogamente essa capa seria o encapsulamento de dados, essa capa q esconderia o funcionamento do controle), nessa capa existem botões q são de fácil entendimento para todos, são botões que te oferecem uma funcionalidade, ao apertar o botão de ON, vc sabe q o dispositivo vai ligar, mas n sabe como o controle fez pra operacionalizar tal ação, isso seria o encapsulamento. Mas note q vc utilizou uma “interface” para usar o controle remoto, e q interface seria essa? Os botões. Através da interface vc teve acesso a funcionalidades q estão perfeitamente encapsuladas, sem essa interface n seria possível ter acesso as funcionalidades de um determinado dispositivo. Porém note qualquer dispositivo q seja disponibiliza uma interface bem definida. A interface oferecida por um controle remoto seria o conjunto de todos os seus botões, se um controle tem um botão de FF (fast-forward “adiantar”) esse controle garante q vc pode adiantar, um dvd por exemplo, mas se vc desejar voltar (REW) e esse controle n tiver o dito botão, n será possível utilizar essa funcionalidade, já q a interface do dispositivo n oferece tal funcionalidade, assim sendo, a interface é algo restritivo, logo bem definido.
Trazendo agora termos de classes, oq seria a dita interface?
Objetivamente falando seriam as assinaturas dos métodos de uma classe. Pq as assinaturas dos métodos? Pq os métodos em OO são os dispositivos q executam um determinada funcionalidade(analogamente os botões do controle remoto oferecem uma funcionalidade), logo o conjunto de todas as assinaturas de métodos de uma classe seria a interface dessa classe, note q esse conceito de interface está desligado da palavra chave interface em java, afinal toda classe oferece uma interface para q possa ser usada, independente de vc implementar uma interface (do java) ou n.
Então o conceito de OO para interface seria resumidamente esse: O conjunto de funcionalidades q um dispositivo oferece ao mundo exterior (seja ela uma classe componente ou subsistema).

E oq é interface em java?

Antes de mais nada, claro q n é uma idéia dissociada da idéia de interface de OO, como vc vai notar a seguir.
Interface em java é um conjunto de declarações de métodos (funcionalidades), sem implementação. Mas pra que alguém declararia métodos sem implementação?
Vamos supor q vc queira criar um conceito de objetos q podem ser abertos, ou seja, objetos “abríveis” (sei a palavra não existe, mas entenda a idéia =P ). Daí vc criaria um interfafe “Abrível” q, por exemplo, declararia dois métodos, abrir() e fechar(). Toda classe q implementasse essa interface (implements) teria q declarar e implementar esses dois métodos. E q classes seriam essas? Inúmeras. Vc poderia ter uma classe janela ou uma classe arquivo, ou porta, ou oq quer q seja q possa ser aberto. Daí todas as classes q implementassem a interface ?Abrível? teriam o compromisso de oferecer as funcionalidades de abrir e fechar, mesmo q cada um abra e feche de forma diferente.
Preste bem atenção na frase anterior, na colocação ?de forma diferente?. Isso n seria polimorfismo??? Exato, a interface em java é um meio de viabilizar o polimorfismo. Por exemplo: Se vc tivesse varias classes de tipos diferentes, mas q implementassem a interface ?Abrível?, todas essas classes seriam do tipo ?Abrível?, assim sendo vc pode ter um array do tipo ?Abrível? q armazenaria classes do tipo janela, porta, arquivo, gaveta, ou oq quer q seja q implemente a interface ?Abrível?, notou o polimorfismo???
E oq o polimorfismo traz de bom? Flexibilidade. Imagine q vc define a dita interface ?Abrível? e depois q todo o código do sistema esteja pronto vc queira criar uma nova entidade, loja por exemplo, uma loja apresenta a característica abrível, afinal ela abre e fecha numa determinada hora, então ela poderia perfeitamente implementar a interface ?Abrível?. Então se vc criou a interface ?Abrível?, e num método de uma classe vc passa como parâmetro um objeto do tipo da interface ?Abrível?, vc pode usar o polimorfismo e passar uma loja no lugar de uma janela, mesmo q no momento q vc criou o sistema n existisse a entidade loja, note q como loja implemeta a interface ?Arível?ela pode ser utilizada em qualquer local q um outro objeto ?Abrível?. Notou a flexibilidade e a facilidade na hora de atualização de um sistema?
A interface tb é uma idéia do java para solucionar a questão da herança múltipla. Como vc deve saber java n suporta herança múltipla, mas existem casos q se faz necessário caracterizar uma classe como sendo de mais de um tipo, então a solução foi criar a idéia de interface do java, onde vc pode herdar de uma classe e implementar uma ou mais (qts vc bem entender) interfaces, podendo assim caracterizar uma classe como sendo de inúmeros tipos (o tal polimorfismo).
Resumindo: Eu diria interface em java é um dispositivo q fornece flexibilidade, viabiliza o polimorfismo e permite herança múltipla ?DE TIPO?.

Demorei umas meia hora pra escrever tudo isso, não sei se fui claro e se cometi algum erro de conceito, mas isso é oq tenho a passar pra vc ou qualquer outro q tenha duvida nesse tema. Me solidarizei bastante com sua duvida pq quebrei muito minha cabeça pra conseguir entender a idéia de interface. Espero ter sido útil.
[/quote]

Valeu mesmo, tirou minha dúvida!!