Forum Main Page > Java Básico

Vamos Discutir - Interfaces

Goto page 1

New Topic    Reply Message
  1. Comment Arrow




  1. igoroliveira
    Offline
    Posts: 144

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    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. ertauil
    Offline
    Posts: 2

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    Edited
    _________________
    Erick




  1. TriTonE
    Offline
    Posts: 1566

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    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."




  1. danielgatis
    Offline
    Posts: 318

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    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!




  1. micheldemontalvao
    Offline
    Posts: 229

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    igoroliveira:
    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:

    "Alta coesão e baixo acoplamento"

    Flos.


    _________________
    Michel de Montalvão




  1. mrncurses
    Offline
    Posts: 1

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    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




  1. NoStress
    Offline
    Posts: 7

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    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...




  1. TriTonE
    Offline
    Posts: 1566

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    NoStress:
    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

    "In JavaDoc we trust."




  1. NoStress
    Offline
    Posts: 7

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    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.




  1. Sadjow
    Offline
    Posts: 1




  1. Relacionados




  1. Anunciante





New Topic    Reply Message     Forum Main Page -> Java Básico


Goto page 1