CLASSES ABSTRATAS E INTERFACES

 

Classes abstratas e interfaces são facilidades importantes da linguagem Java. A seguir irão ser mostrados alguns detalhes a respeito de cada uma.

   
Classes abstratas
 

Classes abstratas são declaradas com o propósito de representar uma espécie de esqueleto para suas subclasses, sem permitir instâncias, ou seja, são classes que não são completamente definidas.

 

Métodos também podem ser declarados como abstract e, com isso, não possuem implementação. De qualquer modo, classes que estendem classes abstratas podem implementar os métodos de modo específico.

 

No próximo exemplo, irá ser declarada uma classe abstrata Animal que possui dois construtores e o método abstrato caminha().

 
/**
 *Síntese
 *  Atributos: pernas
 *  Métodos: Animal(), Animal(int) e caminha()
 */

public abstract class Animal {
	//atributos
	protected int pernas;
	
	//construtores
	public Animal(){
		pernas = 0;
	}
	
	public Animal(int pernas){
		this.pernas = pernas;
	}
	
	public abstract void caminha();
}

 

Como pode-se ver, o fato do método caminha() ser abstrato determina que a classe Animal deve ser declarada como abstrata e que as subclasses desta devem implementar tal método.

   
Interfaces
 

Herança múltipla é uma facilidade de uma classe herdar atributos e métodos de duas ou mais superclasses. Java, objetivando simplicidade, não permite herança múltipla e define interfaces – uma alternativa para herança múltipla.

 

Em síntese, interfaces compreendem atributos constantes (públicos, estáticos e finais) e métodos abstratos (sem implementação) – não possuindo portanto, construtores. Todos os atributos e métodos têm visibilidade pública, porém, não é necessário declarar isso explicitamente. Também não é preciso declarar os atributos com static e final, explicitamente.

 

Por outro lado, as classes que implementam uma interface estabelecem uma relação de compromisso, na qual é obrigatória a implementação de cada método da interface.

 

A seguir segue exemplo sobre interfaces:

 
   
Diagrama de Classes
 

O diagrama apresenta a hierarquia de classes que compreende a superclasse Animal e as subclasses Formiga, Cachorro e Peixe. Verifica-se ainda que a interface AnimalDeEstimacao é implementada por Cachorro e Peixe, em termos dos métodos abstratos declarados: getNome(), setNome() e brinca().

 

Em termos de código, exemplifica-se a implementação da classe Peixe.

 
/**
 *Síntese
 *   Atributos: nome
 *   Métodos: Peixe(), getNome(), setNome(String), brinca() e come()
 */

public class Peixe extends Animal 
					implements AnimalDeEstimacao{
	//atributos
	private String nome;
	
	//construtor
	public Peixe(){
		super();
	}

	//métodos
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public void brinca(){
		//brinca
	}
	
	public void come(){
		//come ração
	}
}

 

Uma classe pode implementar uma ou mais interfaces, através do uso da palavra reservada implements, como exemplificado na linha 2, na classe Peixe – que estende Animal e implementa AnimalDeEstimacao. Em especial, deve-se atentar para o fato dos métodos da interface serem obrigatoriamente implementados nas linhas 12 a 20, no código anterior.

 

Mas, e quando é melhor utilizar classes abstratas em relação a interfaces?

   
Classes Abstratas versus Interfaces
 

Lembre-se de que se deve ser cauteloso ao aplicar classes abstratas e interfaces em um domínio de problema. Uma classe pode estender apenas uma única classe (não há possibilidade de herança múltipla) – esta pode ser abstrata ou não, todavia, pode implementar várias interfaces.

 

Sendo assim, classes Abstratas estão relacionadas à implementação, enquanto Interfaces ao comportamento. Quando uma classe tem implementação de apenas alguns métodos, utilizam-se Classes Abstratas. Já, quando for possível escolher, Interfaces são preferíveis, uma vez que permitem maior flexibilidade e expansão.

 
Com intuito de apoiar o aprendizado sobre Orientação a Objeto, sugere-se assistir a videoaula para o aperfeiçoamento no conhecimento deste conteúdo.
 

 

   
ORDENAÇÃO
 

Entre os importantes serviços oferecidos pela computação encontra-se a facilidade e velocidade na manipulação de um volume considerável de dados. Como já foi estudado em Java, as Coleções permitem o agrupamento eficiente de dados e objetos na memória do computador, sendo interessante organizar a apresentação destes dados aos seus usuários, tendo esta apresentação uma forma lógica e organizada para facilitar as suas ações, tornando-as mais ágeis.

 

Na programação Orientada a Objeto o uso das interfaces Comparable e Comparator, mais conhecidas como Comparadores em Java, permitem uma implementação eficiente e atendendo as propriedades desse paradigma de programação (Orientado a Objeto).

   
 

Para compreender melhor a implementação dessas interfaces, com o objetivo de ordenar os objetos armazenados em coleções de dados, assista a videoaula a seguir que explica, inclusive com exemplos, a implementação das interfaces Comparable e Comparator.

   
Com intuito de apoiar a aprendizagem sobre os Comparadores e a Ordenação, sugere-se assistir esta videoaula para o aperfeiçoamento no conhecimento deste conteúdo.
 

 

   

Atividade de Fixação

 

No intuito de fixar a aprendizagem iniciada por meio deste módulo e verificar como seu entendimento sobre este conteúdo está, estão sendo sugeridos alguns exercícios de fixação para serem resolvidos. Clique no link de exercícios ao lado, pois será por meio dele iniciada a lista de exercícios sobre os conteúdos estudados até este momento nesta disciplina.