Aprenderemos também uma importante palavra reservada do Java, o implements.
O que é uma Interface
Podemos definir interface como uma face, um plano, uma divisa que faz a comunicação entre dois meios diferentes.
Por exemplo, quando trabalhamos com eletrônica, basicamente é tudo estado alto ou estado baixo, que são nada mais que níveis de voltagem ou corrente elétrica. Lá se usa registros, CI (circuitos integrados), portas lógicas, equipamentos de elétrica e eletrônica.
Mas quem usa computador como simples usuário, não precisa saber nem se preocupar com eletricidade ou bits se movendo. Por quê?
Porque há uma interface que interpreta essas coisas em baixo nível. Em vez de te mostrar uma série de bits ou voltagens, te mostra textos que você, humano, compreende.
O responsável por isso é o sistema operacional. É como se ele traduzisse: "Opa, recebi um código aqui do hardware "0011100101001011010", isso quer dizer que tenho que fechar a janela".
Ou seja, estamos fazendo uma comunicação entre dois meios: o meio do hardware (em baixo nível, onde se trabalha com bits) e o meio do usuário (que quer ler textos, ver imagens).
Então, há uma interpretação. No fundo, a mensagem é a mesma, só é dita de maneira diferente para que você possa entender.
Interface em Java
No rigor do termo, uma interface em Java nada mais é que uma classe abstrata composta somente por métodos abstratos. E como tal, obviamente não pode ser instanciada.
Ou seja, ela só contém as declarações dos métodos e constantes, nenhuma implementação, só o 'molde'.
E para que raios serve uma classe sem implementação?
Ela serve para que outras classes, baseadas nessa interface, implementem esses métodos para fins específicos.
Parece confuso e complicado, mas é como explicado anterior sobre interface: ela será uma espécie de comunicação entre meios.
Geralmente entre o que é pedido (das funções que ela executa) e a implementação.
Vamos dar alguns exemplos mais práticos.
Interface de um restaurante
Um exemplo de interface em nosso dia-a-dia, é o cardápio de um restaurante.No menu do restaurante tem dizendo todas as refeições existentes naquele local, inclusive com os ingredientes.
Os clientes que lá forem vão pedir uma determinada comida, e querem receber exatamente aquilo que pediram. Porém, eles não vão ver e nem se importar de como foi feito o prato, só querem receber aquilo que foi solicitado.
Então, o cardápio é uma interface de comunicação entre o cliente os cozinheiros.
Interface de um programa real
Vamos supor que cientistas te contratem para criar um aplicativo Java para uma universidade, para fazer cálculos com matrizes. Eles irão te passar o que você tem que fazer, porém, muito provavelmente não vão estar interessados em COMO você vai fazer isso, só querem saber se vai funcionar.E é aí que entra a interface, ela servirá de comunicação entre seu código e os cientistas.
Sua interface vai se comunicar com eles, é como se ela dissesse: "Para criar uma matriz, forneçam isso que te devolvo a matriz. Já para calcular o traço da matriz, nos forneça a matriz. Já para calcular a transposta, faça isso que retorno isso. Ah quer essa informação? Ok, me forneça esses dados que te retorno tudo pronto"
Ou seja, vai haver uma comunicação entre a sua implementação em Java e entre os cientistas.
Provavelmente eles nem sabem programar em Java, por isso eles não devem ter acesso ao código, pois não iriam entender, e nem querem entender, só querem que o programa faça o que eles pedem, e essa mediação é feita através da classe abstrata, a interface Java do programa.
Como declarar uma Interface
Embora seja uma classe abstrata, ela é uma classe abstrata especial, pois só possui métodos abstratos e nada de implementação. Só as estruturas, o cabeçalho dos métodos.E como tal, vamos usar uma palavra reservada do Java para declarar tais tipos de classe: interface.
Por exemplo, para declarar uma interface pública de nome "JavaProgressivo", fazemos:
public interface JavaProgressivo{
}
Nossa interface do exemplo passado, das matrizes dos cientistas, poderia ser mais ou menos assim:
public interface Matriz { double Traco(Matriz m); Matriz Nula(int linha, int coluna); Matriz Transposta(Matriz m); }
Vejam que não há implementação, só o cabeçalho dos métodos.
Mas vamos ver como essa interface vai se comunicar com os cientistas?
Por exemplo, é fácil ver que se eles quiserem saber o traço de uma matriz, basta invocar o método "Traco()" fornecendo a matriz como argumento.
Como esse traço é calculado? Não sei, não importa, o importante é que retorna uma variável do tipo double com o resultado.
E para criar uma matriz nula de "linha" linhas e de "coluna" colunas?
É só chamar o método Nula() que ele te retorna tal matriz.
E se eles quiserem a matriz transposta de uma matriz 'm', como fazem?
Ué, chamam o método "Transposta()" passando a matriz como argumento, que o programa em Java retorna a matriz transposta.
Implementando uma classe - implements
Porém, de nada adianta ter uma classe abstrata se ela não for implementada.Veja a interface como um molde, um esqueleto do que você deve fazer.
É como se seu chefe te desse uma série de tarefas para fazer:
Crie um método que retorne o traço de uma matriz
Crie outro método que retorne uma matriz nula de tamanho "linha x coluna"
E outro que retorne a transposta de uma matriz
E para essas tarefas serem resolvidas, é necessário implementá-las.
É aí que entra a parte do código Java, onde você vai realmente programar tudo que foi pedido.
Vamos supor que sua implementação será através da classe pública "minhaMatriz", a sintaxe para implementar uma classe derivada de uma interface é:
public class minhaMatriz implements Matriz{
}
Veja como essa sintaxe se assemelha aquela da Herança.
A única diferença que lá a palavra reservada para herdar é extends.
De resto, tudo igual.
Agora você cria sua classe "minhaMatriz".
Você pode definir novas variáveis, novos métodos (como setters e getters) e fazer tudo o que quiser, com somente uma condição:
Tudo que estiver na interface, tem que estar, obrigatoriamente, em sua implementação, e da mesma maneira.
Ou seja, se lá tem um método que recebe argumentos específicos e retorna um tipo específico, sua implementação tem que obedecer esta mesma regra: receber os mesmos argumentos específicos e retornar o tipo que diz lá.
Seria algo assim:
public class minhaMatriz implements Matriz{ Matriz mat; double traco; public double Traco(Matriz m){ //Implementação do traço de uma matriz return traco; } public Matriz Nula(int linha, int coluna){ //Zerando todos os elementos da matriz return mat; } public Matriz Transposta(Matriz m){ //Armazenando a transposta da matriz 'm' na matriz 'mat return mat; } }
No próximo tutorial vamos implementar a famosa interface "Comparable" e seu método "compareTo( )" que serve para comparar dois objetos de quaisquer tipo de classes.
16 comentários:
Melhor site para ensino de Java que ja encontrei. Vocês estão de parabéns!
Gente boa, isso não é só pra quem sabe não. Isso é pra quem sabe o conteúdo e sabe explicar. Gostei e obrigado.
Paulo(Salvador-Ba)
Ótima explicação.
amei a explicacao
se tivesse xaroca, dava para ti
Ué
O quê muda a "interface" em relação à "abstract"?
E o quê muda o "extends" em relação ao "implements"?
Pelo que eu notei parece ser exatamente a mesma coisa. Muda algo?
Parabéns, foi a melhor explicação sobre o assunto que encontrei. Excelente didática!
Parabéns pelo site....... ótimo conteúdo, melhor que a maioria dos cursos pagos.
A interface vai permitir que você altere em apenas um local a resolução de um método. Caso tenha alguma alteração não será necessário que vá em todas as classes que implementam a função, sendo necessário apenas modificar a interface.
Muito bom! Estou gostando muito da metodologia. Textos extremamente didáticos. Parabéns!
Muito bom! Textos extremamente didáticos. Parabéns!
Realmente muito didático.
Terminei de entender só agora o que é uma Interface e para que e usa, apos ter passado por 3 sites diferentes.
Parabéns !!
Ótima explicação e melhor ainda são as comparações com o cotidiano, abrindo ainda mais as vertentes da compreensão da linguagem. Meus parabéns!
Como eu executo isso no netbeans?
que fantástica essa explicação... parabéns
Eu não tava entendendo nada de interface, até agora. Que texto explicativo! Parabéns, vcs são os melhores!
Postar um comentário