Vimos num artigo anterior como dividir um programa java em classes, para explorar ainda mais as funcionalidades da orientação á objectos. Mas como é que estas classes interagem umas com as outras? A comunicação entre classes e a divisão de responsabilidades entre elas são aspectos fundamentais de uma linguagem orientada á objectos como Java. Este facto torna-se mais real quando a classe possui muitos usuários(utilizadores). Tipicamente, uma classe pode ser usada por vários utilizadores diferentes, ou por um mesmo utilizador, mas com objetivos diferentes. Na verdade o conceito de classes surgiu da necessidade da partilha de funções em programação! Por exemplo, alguém pode precisar usar a classe MeuArray do artigo anterior para armazenar os números de séries dos seus bilhetes de viagem. Esta classe pode fazer isso normalmente, como pode ser usada para armazenar os números de estudantes.
Se uma classe é usada por muitos programadores, então a classe deve ser desenhada de modo a que seja fácil de usar para todos os programadores que irão usa-la. O modo como um utilizador de uma classe se relaciona com a classe chama-se interface de classe. Como os atributos de uma classe são geralmente declarados como privados, então, quando falamos de interface de uma classe estamos falando muitas vezes dos seus métodos, ou seja, o que eles fazem e quais são os seus argumentos. Isto é, na interface indicamos quais métodos estão contidos na classe e como o utilizador irá interagir com um objecto desta classe. Uma das vantagens da orientação á objectos é que podemos desenhar uma interface e implementa-la de modo a que seja o mais eficiente possível, ou seja, uma única interface pode ter várias classes de implementação.
Criando uma Interface em Java
Vamos neste artigo criar uma interface para a nossa classe MeuArray.java, que apesar de ser pequena vai dar para ilustrar o uso de interfaces no Java e quem sabe em qualquer linguagem que use um processo similar. Aqui vai a interface para a aplicação MeuArray.java:
public interface MeuArrayI{
public void setElem(int indice,double valor);
public double getElem(int indice);
}
Há alguns pontos importantes á considerar neste exemplo:
- Uma interface declara-se usando a palavra reservada interface no lugar de class
- Os métodos são declarados e não são implementados, ou seja, terminam por ponto e vírgula
- O nome dos métodos deve ser igual ao nome usado na classe, bem como a sua assinatura( valor de retorno e número de argumentos)
- O nome dos argumentos não precisam ser iguais aos que serão usados na classe.
Ligando a Interface a sua classe Java
Uma vez criada a interface, precisamos ter uma classe onde serão implementados os métodos ai declarados. No nosso caso, a classe é exatamente a classe MeuArray do artigo anterior sobre arrays em Java. Mas temos de indicar na classe de implementação que estamos implementando uma interface, e dizer também qual a interface ou quais as interfaces( Pois é, o java suporta múltiplas interfaces numa única classe). Isso indica-se na inicialização da classe usando a palavra reservada implements. Veja como ficaria a nossa classe MeuArray:
public class MeuArray implements MeuArrayI{......}
Como dissemos acima, uma interface pode ter várias implementações, assim, poderiamos ter uma outra classe que implementasse a mesma interface, duma forma diferente, e quem sabe, mais eficiente.Uma nota importante a tomar em consideração é o facto de todos os métodos declarados na interface terem de ser implementados na classe que implemente a interface, obrigatoriamente. Caso não necessite implementar todos os métodos, pode declarar a classe como sendo abstrata(Veremos este conceito num próximo artigo).
Usando classes que implementam interfaces
Uma vantagem do uso de interface, é que podemos declarar objectos de interfaces e depois escolher uma classe de implementação para instancia-la. Veja este artigo sobre a declaração e instanciação de objectos em Java. Por exemplo, para o caso da nossa classe de arrays, poderíamos fazer o seguinte na classe MinhaApp:
MeuArrayI a; //Criando uma um objecto cujo tipo é a interface
A seguir escolheríamos qualquer das classes de implementação que tivêssemos para instanciar ao objecto da interface que criamos. No nosso caso faríamos:
a=new MeuArray(...);
Num próximo artigo veremos mais sobre interfaces, falando de classes abstratas. Por agora fique atento ao próximo artigo assinando ao nosso RSS Feed, ou subscrevendo no formulário presente na sidebar deste blog para receber as atualizações no seu e-mail.










Comentários Recentes