Classes abstratas java

Disponível somente no TrabalhosFeitos
  • Páginas : 6 (1268 palavras )
  • Download(s) : 0
  • Publicado : 22 de abril de 2013
Ler documento completo
Amostra do texto
Classes Abstratas

"Dá-se importância aos antepassados quando já não temos nenhum."

Ao término desse capítulo, você será capaz de utilizar classes abstratas, quando necessário.

9.1 - Repetindo mais código?
Neste capítulo, aconselhamos que você passe a usar o Eclipse. Você já tem conhecimento suficiente dos erros de compilação do javac e agora pode aprender as facilidades que o Eclipse tetraz ao ajudar você no código com os chamados quick fixes e quick assists.

Vamos recordar em como pode estar nossa classe Funcionario:

class Funcionario {

protected String nome;
protected String cpf;
protected double salario;

public double getBonificacao() {
return this.salario * 1.2;
}

// outros métodos aqui

}
Considere o nosso ControleDeBonificacao:class ControleDeBonificacoes {

private double totalDeBonificacoes = 0;

public void registra(Funcionario f) {
System.out.println("Adicionando bonificação do " +
"funcionario: " + f);
this.totalDeBonificacoes += f.getBonificacao();
}

public double getTotalDeBonificacoes() {
return this.totalDeBonificacoes;
}
}
Nosso método registra recebequalquer referência do tipo Funcionario, isto é, podem ser objetos do tipo Funcionario e qualquer de seus subtipos: Gerente, Diretor e, eventualmente, alguma nova subclasse que venha ser escrita, sem prévio conhecimento do autor da ControleDeBonificacao.

Estamos utilizando aqui a classe Funcionario para o polimorfismo. Se não fosse ela, teríamos um grande prejuízo: precisaríamos criar um métodoregistra para receber cada um dos tipos de Funcionario, um para Gerente, um para Diretor, etc. Repare que perder esse poder é muito pior do que a pequena vantagem que a herança traz em herdar código.

Porém, em alguns sistemas, como é o nosso caso, usamos uma classe com apenas esses intuitos: de economizar um pouco código e ganhar polimorfismo para criar métodos mais genéricos, que se encaixema diversos objetos.

Faz sentido ter um objeto do tipo Funcionario? Essa pergunta é diferente de saber se faz sentido ter uma referência do tipo Funcionario: nesse caso, faz sim e é muito útil.

Referenciando Funcionario temos o polimorfismo de referência, já que podemos receber qualquer objeto que seja um Funcionario. Porém, dar new em Funcionario pode não fazer sentido, isto é, não queremosreceber um objeto do tipo Funcionario, mas sim que aquela referência seja ou um Gerente, ou um Diretor, etc. Algo mais concreto que um Funcionario.

ControleDeBonificacoes cdb = new ControleDeBonificacoes();
Funcionario f = new Funcionario();
cdb.adiciona(f); // faz sentido?
Vejamos um outro caso em que não faz sentido ter um objeto daquele tipo, apesar da classe existir: imagine a classePessoa e duas filhas, PessoaFisica e PessoaJuridica. Quando puxamos um relatório de nossos clientes (uma array de Pessoa por exemplo), queremos que cada um deles seja ou uma PessoaFisica, ou uma PessoaJuridica. A classe Pessoa, nesse caso, estaria sendo usada apenas para ganhar o polimorfismo e herdar algumas coisas: não faz sentido permitir instanciá-la.

Para resolver esses problemas, temos asclasses abstratas.

9.2 - Classe abstrata
O que, exatamente, vem a ser a nossa classe Funcionario? Nossa empresa tem apenas Diretores, Gerentes, Secretárias, etc. Ela é uma classe que apenas idealiza um tipo, define apenas um rascunho.

Para o nosso sistema, é inadmissível que um objeto seja apenas do tipo Funcionario (pode existir um sistema em que faça sentido ter objetos do tipo Funcionarioou apenas Pessoa, mas, no nosso caso, não).

Usamos a palavra chave abstract para impedir que ela possa ser instanciada. Esse é o efeito direto de se usar o modificador abstract na declaração de uma classe:

abstract class Funcionario {

protected double salario;

public double getBonificacao() {
return this.salario * 1.2;
}

// outros atributos e métodos comuns a todos...
tracking img