Java: Classes Abstratas, Anônimas, Interface

25
Classes Abstratas, Anônimas, Interface Arthur Emanuel de Oliveira Carosia

Transcript of Java: Classes Abstratas, Anônimas, Interface

Page 1: Java: Classes Abstratas, Anônimas, Interface

Classes Abstratas, Anônimas, Interface

Arthur Emanuel de Oliveira Carosia

Page 2: Java: Classes Abstratas, Anônimas, Interface

Classes Abstratas• Um caso em que não faz sentido ter um objeto, apesar da

classe existir: – imagine a classe Pessoa 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 as classes abstratas.

Page 3: Java: Classes Abstratas, Anônimas, Interface

Classes Abstratas

• Usamos a palavra chave abstract para impedir que uma classe possa ser instanciada.

• Ela é uma classe que apenas idealiza um tipo, define apenas um rascunho.

Page 4: Java: Classes Abstratas, Anônimas, Interface

Classes Abstratas

Page 5: Java: Classes Abstratas, Anônimas, Interface

Classes Abstratas

Page 6: Java: Classes Abstratas, Anônimas, Interface

Classes Abstratas

• Servem para aplicar o polimorfismo e herança dos atributos e métodos, que são recursos muito poderosos.

Page 7: Java: Classes Abstratas, Anônimas, Interface

Métodos Abstratos

• Cada classe filha terá um método diferente de bonificação – Queremos que cada pessoa que escreve a classe

de um Funcionario diferente (subclasses de Funcionario) reescreva o método getBonificacao de acordo com as suas regras.

Page 8: Java: Classes Abstratas, Anônimas, Interface

Métodos Abstratos

• Existe um recurso em Java que, em uma classe abstrata, podemos escrever que determinado método será sempre escrito pelas classes filhas. Isto é, um método abstrato.

• Ele indica que todas as classes filhas (concretas, isto é, que não forem abstratas) devem reescrever esse método ou não compilarão. É como se você herdasse a responsabilidade de ter aquele método

Page 9: Java: Classes Abstratas, Anônimas, Interface

Classes Abstratas + Métodos Abstratos

Page 10: Java: Classes Abstratas, Anônimas, Interface

Classes Abstratas + Métodos Abstratos

• Repare que não colocamos o corpo do método e usamos a palavra chave abstract para definir o mesmo.

• Esse método nunca vai ser chamado, sempre que alguém chamar o método getBonificacao, vai cair em uma das suas filhas, que realmente escreveram o método.

• Qualquer classe que estender a classe Funcionario será obrigada a reescrever este método, tornando-o "concreto". Se não reescreverem esse método, um erro de compilação ocorrerá.

• Uma classe abstrata não precisa necessariamente ter um método abstrato.

Page 11: Java: Classes Abstratas, Anônimas, Interface

Exercício

• Implemente com o uso de interface gráfica em Swing e classes abstratas um programa que modele a seguinte situação:– Uma Conta Corrente possui seu saldo atual, que corresponde

a 99% do valor corrente disponível, devido a impostos cobrados.

– Uma Conta Poupança possui seu saldo atual, que corresponde a 102% do valor corrente disponível, devido à aplicação valorizada.

• Crie uma classe abstrata Conta com um método abstrato determinarSaldo() para representar essa situação.

Page 12: Java: Classes Abstratas, Anônimas, Interface

Exercício

• O seguinte diagrama é válido?

Page 13: Java: Classes Abstratas, Anônimas, Interface

Interface

• Toda classe define 2 itens:– o que uma classe faz (as assinaturas dos métodos)– como uma classe faz essas tarefas (o corpo dos

métodos e atributos privados)

• Podemos criar um "contrato" que define tudo o que uma classe deve fazer se quiser ter um determinado status.

• A classe que quiser, pode "assinar" esse contrato.

Page 14: Java: Classes Abstratas, Anônimas, Interface

Interface

• Interface é a maneira através da qual conversamos com um objeto.

• Uma interface pode definir uma série de métodos, mas nunca conter implementação deles. Ela só expõe o que o objeto deve fazer, e não como ele faz, nem o que ele tem. Como ele faz vai ser definido em uma implementação dessa interface.

Page 15: Java: Classes Abstratas, Anônimas, Interface

Interface

• Uma classe deve implementar essa interface, escrevendo os métodos pedidos pela interface– Semelhante com o efeito de herdar métodos abstratos– Métodos de uma interface são públicos e abstratos

Page 16: Java: Classes Abstratas, Anônimas, Interface

Interface

Page 17: Java: Classes Abstratas, Anônimas, Interface

Interface

• A partir de agora, podemos tratar um Gerente como sendo um Autenticavel.

• Mais uma forma de referenciar a um Gerente. • Polimorfismo

Page 18: Java: Classes Abstratas, Anônimas, Interface

Exercício• Crie a interface AreaCalculavel, com o método abstrato

calculaArea, que quando implementado deve calcular a área geométrica da classe.

• Desenvolva as seguintes classes implementando a interface AreaCalculavel: – a classe Quadrado, com o atributo lado– Retangulo, com largura e altura• Teste ambas as classes utilizando o polimorfismo de

AreaCalculavel.• Crie uma inteface gráfica em Swing que calcule tanto a área do

quadrado como de um retângulo utilizando o código desenvolvido.

Page 19: Java: Classes Abstratas, Anônimas, Interface

Classes Internas

• Classes internas são classes declaradas dentro de outras classes.

• Uma classe interna tem nome Externa.Interna pois faz parte do objeto da classe externa.

Page 20: Java: Classes Abstratas, Anônimas, Interface

Classes Internas

• A vantagem é não precisar de um arquivo separado e que classes internas podem acessar tudo que a externa possui (métodos, atributos etc).

• É possível até encapsular essa classe interna marcando-a como private. Dessa forma, apenas a externa pode enxergar.

• São classes normais, que podem implementar interfaces, ter métodos, ser instanciadas etc.

Page 21: Java: Classes Abstratas, Anônimas, Interface

Classe Anônima

• Uma forma mais específica de classe interna é a chamada classe anônima que é muito vista em códigos com Swing.

• De forma simples, cria-se uma classe sem mesmo declarar seu nome em momento algum.

Page 22: Java: Classes Abstratas, Anônimas, Interface

Classe Anônima• É necessário um objeto do tipo ActionListener para passar

para nosso botão. • Normalmente criaríamos uma nova classe para isso e

daríamos new nela. • Usando classes anônimas damos new e implementamos a

classe ao mesmo tempo, usando a sintaxe a seguir.

Page 23: Java: Classes Abstratas, Anônimas, Interface

Classe Anônima

• Como criamos uma classe no momento que precisamos, é comum nos perguntarmos qual é o nome dessa classe criada.

• Ninguém definiu o nome para essa implementação particular de um ActionListener, então, por não ter nome definido, classes como essas são chamadas de classes anônimas.

Page 24: Java: Classes Abstratas, Anônimas, Interface

Exercícios• Desenvolva uma interface gráfica em Swing para o seguinte

problema.• Em um jogo, existem aviões e pássaros.• Ambos são Objetos do Jogo e possuem em comum o seu

tamanho, ponto x e ponto y.• No entanto, Aviões podem atirar e pássaros não. Desenvolva

uma interface, denominada Atirador, com o método atirar, que deve ser obrigatoriamente implementado por avião como uma linha que se tornará visível entre o avião e um pássaro no jogo.

• Obs: na interface, o avião e o pássaro podem ser definidos como botões de diferentes tamanhos. O avião irá atirar quando seu botão for pressionado.

Page 25: Java: Classes Abstratas, Anônimas, Interface

Classes Abstratas, Anônimas, Interface

Arthur Emanuel de Oliveira Carosia