• Nenhum resultado encontrado

97Todos os direitos reservados a 3Way Networks

No documento Linguagem Java COMPLETA (páginas 97-99)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 86

Vejamos como utilizar essas classes. A Listagem 7.33 não compilará, porque não podemos instanciar classes abstratas (Listagem 7.33, linhas 4 e 6). Mas perceba que mesmo não podendo ter instâncias de classes abstratas, podemos ter variáveis de referência do tipo da classe abstrata (Listagem 7.33, linha 11):

public class Zoo {

public static void main(String[] args) { //errado - abstrata não instancia

Animal bicho = new Animal("sem ruido"); //errado - abstrata não instancia

Felino bichanos = new Felino("sem ruido"); Gato gato = new Gato();

gato.fazerRuido(); //qualquer Gato

bichanos = gato; //Gato é um Felino - up-casting bichanos.fazerRuido();//polimofirmo de referência bicho = bichanos;//Felino é um Animal - up-casting bicho.fazerRuido();//polimofirmo de referência }

}

Listagem 7.33 – Reunindo a bicharada

7.10 Interfaces

Uma interface, a grosso modo, é um tipo de classe abstrata que só pode conter métodos abstratos ou

atributos marcados com o modificador final. Interfaces, por natureza, são

abstratas, não necessitando do modificador abstract.

Quando você cria uma interface, está definindo um contrato. Este contrato reza o que uma classe, que aceita o contrato, deverá ter como comportamento definido pela interface implementado.

7.10.1 Porque utilizar Interfaces?

Utilizamos interfaces quando queremos uma relação entre classes não

relacionadas (semelhante a uma herança) que implementem métodos similares.

Através de interfaces, podemos compartilhar esse comportamento entre as classes, mas sem forçar um relacionamento entre elas.

Tome como exemplo a classe Linha, ela contém métodos que obtém o tamanho da linha e compara o objeto Linha com objetos de mesma classe. Considere também que tenhamos outra classe, MeuInteger, que contém métodos que comparam um objeto MeuInteger com objetos da mesma classe. Você pode ver que ambas as classes têm métodos similares que comparam objetos do mesmo tipo, entretanto eles não estão relacionados. Para ter certeza de que as classes implementam os mesmos métodos com as mesmas assinaturas, utilizamos

as interfaces. Você pode criar uma interface Relacao que têm alguns métodos de comparação. A Figura 7.10 mostra o diagrama UML desta interface Relacao e sua utilização pelas classes Linha e MeuInteger:

Interface é uma classe abstrata que só pode conter métodos abstratos

e/ou atributos marcados com o modificador final.

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

Figura 7.10 – UML interface Relacao

Existem outros motivos para você querer utilizar interfaces em seus programas:

 Usar referências de objetos sem saber qual a classe que a implementa. Como veremos mais adiante, podemos utilizar uma interface como tipo de dados.

 Utilizar interfaces como mecanismo alternativo para herança múltipla, que permite às classes ter mais de uma superclasse. Herança múltipla não está implementada em Java.

7.10.2 Interface vs. Classe Abstrata

A principal diferença entre uma interface e uma classe abstrata é que a classe abstrata pode possuir métodos implementados (concretos) ou não implementados (abstratos). Na interface, todos os métodos são definidos com abstratos e públicos, sendo que a palavra-chave abstract e public sendo opcional na declaração.

7.10.3 Criando Interfaces

Para criarmos uma interface, utilizamos a sintaxe abaixo:

[public] [abstract] interface <NomeDaInterface> {

< [public] [static] [final] <tipoAtributo> <atributo> = <valorInicial>; >* < [public] [abstract] <retorno> <nomeMetodo>(<parametro>*); >*

}

Como exemplo, criaremos uma interface que define o relacionamento entre dois objetos de acordo com a "ordem natural" dos objetos:

public interface Relacao {

public boolean maiorQue(Object a, Object b); public boolean menorQue(Object a, Object b); public boolean igualA(Object a, Object b); }

Listagem 7.34 – Interface Relacao em Java

Para implementar esta interface você deve usar a palavra chave implements na definição da classe. Por exemplo, esta é a implementação da interface Relacao pela classe Linha (Figura 7.10):

public class Linha implements Relacao { private double x1;

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

99

No documento Linguagem Java COMPLETA (páginas 97-99)

Documentos relacionados