[RESOLVIDO]Dúvida sobre o conceito de Interface

6 respostas
mi.rodrigues

Olá, li num livro que o conceito de interface é, pelas minhas palavras: Interface é uma espécie de superclasse, onde ela deve informar quais métodos as subclasses devem suportar, porém, ela não sabe como esse suporte vai ser feito.

Isso é o “pra quê” que interface serve. Queria saber o “por quê” da sua existência… ou estou trocando as coisas? :shock: Eu não consegui entender 100% de interface. Onde estou errando? Grato pela compreensão! :expressionless:

6 Respostas

drsmachado

Interface pode ser entendida como um contrato, ou seja, qualquer classe concreta que a implemente se compromete a implementar os métodos que existem nesta interface.
Por exemplo

public interface Sonambulo{
    public void andarEnquantoDorme();
}

E

public class Pessoa implements Sonambulo{
    
    @Override
    public void andarEnquantoDorme(){
        System.out.println("Não o acorde!");
    }
}

A idéia de interface é permitir que tenhamos uma extensão da orientação a objetos. Como assim? Conceitos como herança, polimorfismo e encapsulamento passam pelo uso da interface.
Herança? Sim, a classe Pessoa possui uma relação “é um” com Sonambulo. Tanto que podemos fazer

Sonambulo pes = new Pessoa();

Polimorfismo? Sim, veja que Sonambulo não sabe como o método andarEnquantoDorme é executado. Tantas quantas forem as classes que implementem Sonambulo são as possibilidades de sobrescrita deste método.
Encapsulamento? Sim, afinal, se você criar um método public na classe Pessoa e instanciar um objeto de Pessoa a partir de

Sonambulo s = new Pessoa();

O objeto s só conseguirá utilizar o que existe mapeado na interface Sonambulo.

x111

mi.rodrigues:
Olá, li num livro que o conceito de interface é, pelas minhas palavras: Interface é uma espécie de superclasse, onde ela deve informar quais métodos as subclasses devem suportar, porém, ela não sabe como esse suporte vai ser feito.

Isso é o “pra quê” que interface serve. Queria saber o “por quê” da sua existência… ou estou trocando as coisas? :shock: Eu não consegui entender 100% de interface. Onde estou errando? Grato pela compreensão! :expressionless:


Eu acredito que o melhor jeito de se pensar em uma interface é como um contrato! Quando se faz um contrato, cada cláusula diz exatamente o que deve ser feito, mas não é feito ali. O contrato é sua interface e as cláusulas seriam os métodos dela!

A interface deve ser documentada, ou seja, dizer a responsabilidade da classe e de cada método, o que se espera como resultado ao chama-lo e como um método altera o estado da classe que implementa a interface.

A finalidade da interface é o polimorfismo. Eu posso ter várias implementações de uma interface, mas todas fazem a mesma operação. Como exemplo posso citar as impressoras fiscais. Existe no mercado cerca de um duzia de impressoras fiscais e todas elas realizam as mesmas operações, porém cada uma de uma forma diferente. Uma impressora pode ter o metodo bematechInsereItem e uma outra para fazer a mesma coisa pode necessitar de dois métodos diferentes.

Sendo assim, você teria que criar uma classe para cada impressora e encher o seu código de IFs! A cada impressora que você adiciona-se ficaria pior. O que vc faz então? Cria uma interface para seu sistema utilizar! Cada classe de uma impressora diferente implementaria essa interface e você desacoplaria o seu código a implementação dessas classes.

Para quem está começando isso é um pouco complicado. Existe uma regra que diz “programe para uma interface, não para uma implementação” porém o pessoal acha que isso significa que deve-se criar uma interface para cada classe implementada e isso está errado. Você deve criar uma interface apenas quando necessitar de duas ou mais implementações totalmente distintas. O que a regra quer dizer é que se existe uma interface não use uma implementação concreta dessa interface. Isso se aplica a qualquer coisa. Se você for utilizar um ArrayList, declare a variável como um List! Se você em algum momento necessitar trocar o tipo da variável, digamos por uma LinkedList, só necessita alterar uma linha de código e não em todos os lugares que a variável foi utilizada. É o mesmo principio da impressora fiscal. Se você quiser trocar de impressora, adicionar uma nova, etc. não necessita alterar o código todo!

mi.rodrigues

Relacionar o termo “interface” com “contrato” esclareceu bastante minhas dúvidas. Ainda estou um pouco confuso, mas isso se resolve programando. Eu não consigo entender 100% sem colocar em prática tudo o que li. Obrigado!

mi.rodrigues

Onde posso marcar este tópico como resolvido?

B

Boa tarde,
Edita o titulo do seu post [RESOLVIDO]Dúvida sobre o conceito de Interface

mi.rodrigues

BTO:
Boa tarde,
Edita o titulo do seu post [RESOLVIDO]Dúvida sobre o conceito de Interface

KKKKKKKKKKKKKKKKKKKKKK vish --’

Criado 18 de março de 2013
Ultima resposta 18 de mar. de 2013
Respostas 6
Participantes 4