16
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS CLASSES ABSTRATAS Prof. Thiago Pereira Rique <[email protected]> http://thiagorique.wordpress.com/

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

Embed Size (px)

Citation preview

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

LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

CLASSES ABSTRATAS

Prof. Thiago Pereira Rique

<[email protected]>

http://thiagorique.wordpress.com/

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

AGENDA

Classes abstratas Métodos abstratos

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

CLASSES ABSTRATAS

Vamos recordar um possível estado da classe Funcionario

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

CLASSES ABSTRATAS

Considere agora a classe ControleDeBonificacoes

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

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?”

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

CLASSES ABSTRATAS

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

sentido. Queremos algo mais concreto que Funcionario.

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

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!!!

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

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.

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

CLASSES ABSTRATAS

Classe abstrata Funcionario.

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

CLASSES ABSTRATAS

Considere o código:

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

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

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!”

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

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.

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

MÉTODOS ABSTRATOS

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

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

MÉTODOS ABSTRATOS

Voltando ao método registra na classe ControleDeBonificacoes.

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

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).

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

REFERÊNCIA

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