Seja bem vindo ao Fórum do JavaFree.org
Aqui você irá encontrar respostas para TUDO o que você precisa sobre java.
Deseja participar? Crie sua conta ou efetue seu login
Para que servem as Interfaces? sinceramente nao vejo motivo de elas existirem, ou melhor, não consigo enchergar esse motivo, me ajudem? me mostrem exemplos na qual uma interface seria indispensavel e seu funcionamento? Obrigado
Outra questão interessantíssima em relação ao uso das interfaces é no design do sistema. Se você usá-las adequadamente, você elimina o acoplamento direto entre as classes, fazendo com que o seu código seja modificável e, consequentemente, garantindo escalabilidade para que o seu sistema cresça sem grandes crises
As interfaces fornecem um meio que permite que você lide com os objetos sabendo apenas a assinatura de seus métodos, ou seja, seus comportamentos, sem que você dependa da (ou precise saber sobre a) implementação de determinadas classes. Tipo uma caixa-preta: você sabe o que deve entrar e o que deve sair, mas não se importa de como esse processamento é realizado.
E você deve estar perguntando: mas qual a diferença entre depender de uma classe 'normal' e depender de uma interface?? Simples: Você pode substituir a criação dos objetos por objetos de outras classes que implemente as interfaces dependentes e, sem muito esforço, você é capaz de modificar o seu sistema da maneira que desejar!
Dê uma lida sobre Design Patterns e acredito que a utilidade das interfaces ficará evidente para você!
Para que servem as Interfaces? sinceramente nao vejo motivo de elas existirem, ou melhor, não consigo enchergar esse motivo, me ajudem? me mostrem exemplos na qual uma interface seria indispensavel e seu funcionamento? Obrigado
1 - Exemplo indispensável, isso existe mesmo na Orientação a Objeto? Se v.c escrever uma classe com um só método "Faz Tudo", como a classe abaixo:
class Legal{ void fazTudo(){ /*Tudo mesmo, JDBC, Logger, Transacion....Legal*/ }
public static void main(String args[]){ new Legal().fazTudo(); } }
Encontraria uma razão indispénsavel para programar orientado a Objetos? não acha que continua programando a eventos?
2 - Mudando a pergunta, para algo mais real. Por que utilizar Interfaces? R: A saber o mesmo de escrever Classes: criar programas que sejam mais legíveis e mais adaptaveis ao problema.
Vamos análizar como se escreve programas melhores com qualquer metódologia ou linguagem:
1 - Coesão - Se v.c trabalha em projetos de grande porte e não é um He-Man, ou seja, trabalha em equipes, as pessoas normais de sua equipe pensam que ao escrever uma classe Produto , v.c colocou nela somente informações de produtos, ou seja atributos de Produto e Operações relativas a Produtos.
Se v.c colocar uma operação como pagarFuncionario() em Produto, que geralmente está na classe Pagamento, deixará sua equipe confusa quanto ao que este metódo significa. V.c estará diminuido a coesão sobre sua Classe de Produto:
Coesão por Coercibilidade - Exemplo de Interfaces
Se ao invéz de eu, como gerente do projeto, não deixar que v.c escolha a assinatura das operações de sua classe, lhe obrigando por contrato a seguir a assinatura padronizada pela equipe? Isso é possível, sim trabalhando com interfaces.
Eu lhe daria uma interface como está:
interface ProdutoContrato{
void venderProduto();
void comprarProduto();
}
Está interface seria distribuida aos membros da equipe, então ao invés de trabalhar com sua Classe Produto, eles trabalhariam com a interface ProdutoContrato, o que lhe obrigaria em sua classe a implementar a mesma, algo como:
class Produto implements ProdutoContrato{ }
Ao lhe obrigar a implementar a Interface ProdutoContrato, estou garantindo que os clientes de sua classe, semprem vão "Vender o Produto" acessando o método venderProduto(), não adianta que v.c mude a implementação, nunca poderá "De boa fé" alterar a assinatura do método que v.c implementa da Interface.
Vale a receita de bolo aprendida na Faculdade:
"Quanto maior a coesão melhor a legibilidade do programa"
2 - Acoplamento - Alto acoplamento é quando sua classe depende de tantas outras, as vezes até recursivamente, que para alguém utilizar sua classe de Produto (por exemplo), v.c teria que disponibilizar uma dezena de outras com ela correlacionadas.
A formula aqui é outra:
"Quanto menor o acoplamento mais sua classe poderá ser reu-tilizado em outras situações.".
Baixo Acoplamento usando Interfaces e Padrões de Projeto
Como os seus colegas desenvolvedores irão utlizar o seu produto através da Interface ProdutoContrato, veja que já diminuimos o acoplamento dos mesmos com os detalhes relativos a implementação da classe Produto, porém ainda dependemos da mesma classe, sem a qual não teremos uma instancia concreta do objeto.
Em certa parte do código, teriamos:
ProdutoContrato produto = new Produto();
Para isolar está dependencia explícita, poderíamos usar um padrão de projeto como o Factory (Fábrica).
Teriamos uma classe Factory, responsável por escolher qual instancia concreta disponibilizar aos clientes da interface, teriamos algo como:
class Factory{ static ProdutoContrato create(){ return new Produto(); } }
Imagine que mudamos a classe de Produto para ProdutoParcelado e temos 50 programadores, Em quantos locais de código teriamos que mudar no modelo antigo:
ProdutoContrato produto = new Produto();
Para:
ProdutoContrato produto = new ProdutoParcelado();
Seria uma tarefa ardua!!!!
Porém se tivessemos todos os programdores acessando seu produto somente através da Factory, deste modo:
ProdutoContrato produto = Factory.create();
Então mudariamos a instanciação do produto apenas em um ponto, na Factory:
class Factory{ static ProdutoContrato create(){ return new ProdutoParcelado(); //Mudei so aqui. } }
O que v.c acha, não e muito mais simples?
Conclusão:
Escrever código não é só realizar uma tarefa. Principalmente em projetos com equipes, uma decisão para um componente de software afeta todos os membros que utlizam o mesmo.
Se tomarmos as lições dos Mestres em Requisitos: "Requisitos vão mudar, não importa se v.c goste disto!", logo o software que os implementa também mudará, e isto poderá levar um sistema que está "Perfeito" a ruína.
PS: Em seu Livro, Análise Orientada a Objetos, Yourdon conta a história de um projeto de grande porte que foi arruínado por que seus membros esqueceram de programar apenas UM componente, que no caso era o componente central, e suas classes estavam tão acopladas que era impossível acrescentar o novo vomponente ao programa.
Sempre lembrando as aulas de Lógica da programação, um programa com qualidade e uma dosagem correta de:
Gostaria de fazer uma pergunta. estou trabalhando com programação em 3 camadas: View, Controle e Precistencia. Nas minhas telas eu tenho a Interface q implemento na classe da Tela. Eu vi um esquema de arquitetura de software em vb.NET onde na classe de controle da tela tem uma função chamada CTYPE que faz um link da classe tela com a minha interface. Ex:
Interface{ public getNome(); }
classe controleTela{ metodo getTela(obj_Tela, Interface){ return function_link_Tela_Interface(obj_Tela, Interface); }
//acessa metodo da Interface getTela().getNome(); }
Com isso eh possivel obter e setar valores na tela sem acessa-las diretamente. Até hoje, todos os exemplos de INTERFACE em java q já vi soh mostram a questão da implementação da interface na classe, e não mostra outras utilidades da INTERFACE. Você saberia como posso fazer esse exemplo que mostrem de vb.NET, em JAVA?? Existe alguma função que faz esse tipo de link??
Desde já agradeço pela atenção!
_________________
Luiz Carlos Machado Graduating Computer Science - UCG Developer: Desktop - JAVA; Mobile - J2ME; Web - PHP. Laboratory of Processing and Analysis of Images of the Area of Health - LAPIMED
Descupem-me a pregunta eu estou a começar no java e hoje decidi, ver a parte das interfaces, mas não funcionaria tudo se tirasse-mos as interfaces?
Toda a implementação do código da própria interface é feita na classe principal...
Recomendo fortemente que você aprenda Orientação a Objetos antes de dar seus primeiros passos no Java.
_________________ Daniel F. Martins Website, Blog
Penso que já apanhei a utilidade das interfaces: - Código mais organizado; - E serve como um padrão, já que a classe que implemente uma dada interface tem de utilizar os seus métodos e atributos.
igoroliveira Offline
Posts: 144
Para que servem as Interfaces? sinceramente nao vejo motivo de elas existirem, ou melhor, não consigo enchergar esse motivo, me ajudem? me mostrem exemplos na qual uma interface seria indispensavel e seu funcionamento? Obrigado
ertauil Offline
Posts: 2
Edited
_________________
Erick
TriTonE Offline
Posts: 1566
Outra questão interessantíssima em relação ao uso das interfaces é no design do sistema. Se você usá-las adequadamente, você elimina o acoplamento direto entre as classes, fazendo com que o seu código seja modificável e, consequentemente, garantindo escalabilidade para que o seu sistema cresça sem grandes crises
As interfaces fornecem um meio que permite que você lide com os objetos sabendo apenas a assinatura de seus métodos, ou seja, seus comportamentos, sem que você dependa da (ou precise saber sobre a) implementação de determinadas classes. Tipo uma caixa-preta: você sabe o que deve entrar e o que deve sair, mas não se importa de como esse processamento é realizado.
E você deve estar perguntando: mas qual a diferença entre depender de uma classe 'normal' e depender de uma interface?? Simples: Você pode substituir a criação dos objetos por objetos de outras classes que implemente as interfaces dependentes e, sem muito esforço, você é capaz de modificar o seu sistema da maneira que desejar!
Dê uma lida sobre Design Patterns e acredito que a utilidade das interfaces ficará evidente para você!
Abraços!
_________________
Daniel F. Martins
Website, Blog
"In JavaDoc we trust."
danielgatis Offline
Posts: 318
interface é a alma do oo.
como diria aquela galera que escreveu esse livrivinho aqui:
"programe para interface e não para implementação"
beijinhos =*
_________________
viva a turma jovem!
micheldemontalvao Offline
Posts: 229
1 - Exemplo indispensável, isso existe mesmo na Orientação a Objeto? Se v.c escrever uma classe com um só método "Faz Tudo", como a classe abaixo:
class Legal{
void fazTudo(){
/*Tudo mesmo, JDBC, Logger, Transacion....Legal*/
}
public static void main(String args[]){
new Legal().fazTudo();
}
}
Encontraria uma razão indispénsavel para programar orientado a Objetos? não acha que continua programando a eventos?
2 - Mudando a pergunta, para algo mais real. Por que utilizar Interfaces?
R: A saber o mesmo de escrever Classes: criar programas que sejam mais legíveis e mais adaptaveis ao problema.
Vamos análizar como se escreve programas melhores com qualquer metódologia ou linguagem:
1 - Coesão - Se v.c trabalha em projetos de grande porte e não é um He-Man, ou seja, trabalha em equipes, as pessoas normais de sua equipe pensam que ao escrever uma classe Produto , v.c colocou nela somente informações de produtos, ou seja atributos de Produto e Operações relativas a Produtos.
Se v.c colocar uma operação como pagarFuncionario() em Produto, que geralmente está na classe Pagamento, deixará sua equipe confusa quanto ao que este metódo significa. V.c estará diminuido a coesão sobre sua Classe de Produto:
Coesão por Coercibilidade - Exemplo de Interfaces
Se ao invéz de eu, como gerente do projeto, não deixar que v.c escolha a assinatura das operações de sua classe, lhe obrigando por contrato a seguir a assinatura padronizada pela equipe? Isso é possível, sim trabalhando com interfaces.
Eu lhe daria uma interface como está:
interface ProdutoContrato{
void venderProduto();
void comprarProduto();
}
Está interface seria distribuida aos membros da equipe, então ao invés de trabalhar com sua Classe Produto, eles trabalhariam com a interface ProdutoContrato, o que lhe obrigaria em sua classe a implementar a mesma, algo como:
class Produto implements ProdutoContrato{
}
Ao lhe obrigar a implementar a Interface ProdutoContrato, estou garantindo que os clientes de sua classe, semprem vão "Vender o Produto" acessando o método venderProduto(), não adianta que v.c mude a implementação, nunca poderá "De boa fé" alterar a assinatura do método que v.c implementa da Interface.
Vale a receita de bolo aprendida na Faculdade:
"Quanto maior a coesão melhor a legibilidade do programa"
2 - Acoplamento - Alto acoplamento é quando sua classe depende de tantas outras, as vezes até recursivamente, que para alguém utilizar sua classe de Produto (por exemplo), v.c teria que disponibilizar uma dezena de outras com ela correlacionadas.
A formula aqui é outra:
"Quanto menor o acoplamento mais sua classe poderá ser reu-tilizado em outras situações.".
Baixo Acoplamento usando Interfaces e Padrões de Projeto
Como os seus colegas desenvolvedores irão utlizar o seu produto através da Interface ProdutoContrato, veja que já diminuimos o acoplamento dos mesmos com os detalhes relativos a implementação da classe Produto, porém ainda dependemos da mesma classe, sem a qual não teremos uma instancia concreta do objeto.
Em certa parte do código, teriamos:
ProdutoContrato produto = new Produto();
Para isolar está dependencia explícita, poderíamos usar um padrão de projeto como o Factory (Fábrica).
Teriamos uma classe Factory, responsável por escolher qual instancia concreta disponibilizar aos clientes da interface, teriamos algo como:
class Factory{
static ProdutoContrato create(){
return new Produto();
}
}
Imagine que mudamos a classe de Produto para ProdutoParcelado e temos 50 programadores, Em quantos locais de código teriamos que mudar no modelo antigo:
ProdutoContrato produto = new Produto();
Para:
ProdutoContrato produto = new ProdutoParcelado();
Seria uma tarefa ardua!!!!
Porém se tivessemos todos os programdores acessando seu produto somente através da Factory, deste modo:
ProdutoContrato produto = Factory.create();
Então mudariamos a instanciação do produto apenas em um ponto, na Factory:
class Factory{
static ProdutoContrato create(){
return new ProdutoParcelado(); //Mudei so aqui.
}
}
O que v.c acha, não e muito mais simples?
Conclusão:
Escrever código não é só realizar uma tarefa. Principalmente em projetos com equipes, uma decisão para um componente de software afeta todos os membros que utlizam o mesmo.
Se tomarmos as lições dos Mestres em Requisitos: "Requisitos vão mudar, não importa se v.c goste disto!", logo o software que os implementa também mudará, e isto poderá levar um sistema que está "Perfeito" a ruína.
PS: Em seu Livro, Análise Orientada a Objetos, Yourdon conta a história de um projeto de grande porte que foi arruínado por que seus membros esqueceram de programar apenas UM componente, que no caso era o componente central, e suas classes estavam tão acopladas que era impossível acrescentar o novo vomponente ao programa.
Sempre lembrando as aulas de Lógica da programação, um programa com qualidade e uma dosagem correta de:
"Alta coesão e baixo acoplamento"
Flos.
_________________
Michel de Montalvão
mrncurses Offline
Posts: 1
Gostaria de fazer uma pergunta.
estou trabalhando com programação em 3 camadas: View, Controle e Precistencia. Nas minhas telas eu tenho a Interface q implemento na classe da Tela. Eu vi um esquema de arquitetura de software em vb.NET onde na classe de controle da tela tem uma função chamada CTYPE que
faz um link da classe tela com a minha interface. Ex:
Interface{
public getNome();
}
classe controleTela{
metodo getTela(obj_Tela, Interface){
return function_link_Tela_Interface(obj_Tela, Interface);
}
//acessa metodo da Interface
getTela().getNome();
}
Com isso eh possivel obter e setar valores na tela sem acessa-las diretamente. Até hoje, todos os exemplos de INTERFACE em java q já vi soh mostram a questão da implementação da interface na classe, e não mostra outras utilidades da INTERFACE. Você saberia como posso fazer esse exemplo que mostrem de vb.NET, em JAVA?? Existe alguma função que faz esse tipo de link??
Desde já agradeço pela atenção!
_________________
Luiz Carlos Machado
Graduating Computer Science - UCG
Developer: Desktop - JAVA; Mobile - J2ME; Web - PHP.
Laboratory of Processing and Analysis of Images of the Area of Health - LAPIMED
NoStress Offline
Posts: 7
Descupem-me a pregunta eu estou a começar no java e hoje decidi, ver a parte das interfaces, mas não funcionaria tudo se tirasse-mos as interfaces?
Toda a implementação do código da própria interface é feita na classe principal...
TriTonE Offline
Posts: 1566
Recomendo fortemente que você aprenda Orientação a Objetos antes de dar seus primeiros passos no Java.
_________________
Daniel F. Martins
Website, Blog
"In JavaDoc we trust."
NoStress Offline
Posts: 7
Penso que já apanhei a utilidade das interfaces:
- Código mais organizado;
- E serve como um padrão, já que a classe que implemente uma dada interface tem de utilizar os seus métodos e atributos.
Sadjow Offline
Posts: 1
http://labs.sadjow.com/2008/08/23/java-o-que-e-interface/
Relacionados
JDeveloper http://javafree.uol.com.br/topic-2135-JDeveloper.html Apoio da UNIFIL. http://javafree.uol.com.br/topic-2456-Apoio-da-UNIFIL.html Teste NetBeans http://javafree.uol.com.br/topic-2855-Teste-NetBeans.html Tem como rodar direto do CD http://javafree.uol.com.br/topic-853516-Tem-como-rodar-direto-do-CD.html Sou novo aqui http://javafree.uol.com.br/topic-2231-Sou-novo-aqui.html Tecnologias do projeto, o pq de cada uma? http://javafree.uol.com.br/topic-638-Tecnologias-do-projeto-o-pq-de-cada-uma.html Prevayler - Promessa ou Ilusão? http://javafree.uol.com.br/topic-14290-Prevayler-Promessa-ou-Ilusao.html Domínio do JUG http://javafree.uol.com.br/topic-4374-Dominio-do-JUG.html Comunicado http://javafree.uol.com.br/topic-6705-Comunicado.html
Anunciante