java: classes abstratas, anônimas, interface

Post on 09-Jan-2017

45 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Classes Abstratas, Anônimas, Interface

Arthur Emanuel de Oliveira Carosia

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.

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.

Classes Abstratas

Classes Abstratas

Classes Abstratas

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

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.

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

Classes Abstratas + Métodos Abstratos

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.

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.

Exercício

• O seguinte diagrama é válido?

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.

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.

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

Interface

Interface

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

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

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.

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.

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.

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.

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.

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.

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.

Classes Abstratas, Anônimas, Interface

Arthur Emanuel de Oliveira Carosia

top related