LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS CLASSES ABSTRATAS Prof. Thiago Pereira Rique

Preview:

Citation preview

LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

CLASSES ABSTRATAS

Prof. Thiago Pereira Rique

<thiagorique2011@gmail.com>

http://thiagorique.wordpress.com/

AGENDA

Classes abstratas Métodos abstratos

CLASSES ABSTRATAS

Vamos recordar um possível estado da classe Funcionario

CLASSES ABSTRATAS

Considere agora a classe ControleDeBonificacoes

CLASSES ABSTRATAS

O método registra recebe qualquer referência do tipo Funcionario. Funcionario ou seus subtipos (Gerente, Diretor,

etc.). Estamos utilizando a classe Funcionario para o

polimorfismo. Em alguns sistemas (como é o nosso caso),

usamos uma classe com o objetivo de economizar código e ganhar polimorfismos para criar métodos genéricos.

“Faz sentido ter um objeto do tipo Funcionario?” X “Faz sentido ter uma referência do tipo Funcionario?”

CLASSES ABSTRATAS

Polimorfismo de referência Utilizar new em Funcionario pode não fazer

sentido. Queremos algo mais concreto que Funcionario.

CLASSES ABSTRATAS

Outro caso: Classe Pessoa

Classe PessoaFisica Classe PessoaJuridica

A classe Pessoa estaria sendo usada apenas para ganhar o polimorfismo. Não faz sentido permitir instanciá-la.

Solução para este problema? Classes abstratas!!!

CLASSES ABSTRATAS

Suponha que nossa empresa tenha apenas gerentes, diretores, secretárias, etc.

O que vem a ser exatamente nossa classe Funcionario? Idealização de um tipo (um rascunho)

Para nosso sistema, é inadmissível que um objeto seja apenas do tipo Funcionario.

Palavra-chave abstract Impede a classe Funcionario de ser instanciada.

CLASSES ABSTRATAS

Classe abstrata Funcionario.

CLASSES ABSTRATAS

Considere o código:

O problema é instanciar a classe. Criar referência é permitido.

CLASSES ABSTRATAS

Podemos então herdar da classe Funcionario, reescrevendo o método getBonificacao.

OBS.: “Fique claro que a decisão de transformar Funcionario em uma classe abstrata dependeu do nosso domínio!”

MÉTODOS ABSTRATOS

Se getBonificacao não fosse reescrito, seria herdado da classe mãe. Retornaria o salário + 20%

Não existe uma regra para a bonificação de funcionários.

Poderíamos então jogar fora o método getBonificacao da classe Funcionario? Funcionario f f.getBonificacao(); //não poderíamos fazer isto

Em uma classe abstrata, podemos determinar que um método será sempre escrito pelas classes filhas.

MÉTODOS ABSTRATOS

Um método abstrato indica que todas as subclasses (classes filhas, concretas) devem reescrever o método.

MÉTODOS ABSTRATOS

Voltando ao método registra na classe ControleDeBonificacoes.

MÉTODOS ABSTRATOS

Voltando ao método registra na classe ControleDeBonificacoes. A chamada f.getBonificacao() não vai falhar! O método é abstrato, logo suas subclasses

reescrevem o método (concreto).

REFERÊNCIA

Apostila caelum-java-objetos-fj11 http://www.caelum.com.br/apostilas/

Recommended