Java: Classes Abstratas, Anônimas, Interface
Post on 09-Jan-2017
45 Views
Preview:
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