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

Java: Classes Abstratas, Anônimas, Interface

  • 1.
  • 2.
    Classes Abstratas • Umcaso 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.
  • 3.
    Classes Abstratas • Usamosa palavra chave abstract para impedir que uma classe possa ser instanciada. • Ela é uma classe que apenas idealiza um tipo, define apenas um rascunho.
  • 4.
  • 5.
  • 6.
    Classes Abstratas • Servempara aplicar o polimorfismo e herança dos atributos e métodos, que são recursos muito poderosos.
  • 7.
    Métodos Abstratos • Cadaclasse 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.
  • 8.
    Métodos Abstratos • Existeum 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
  • 9.
    Classes Abstratas +Métodos Abstratos
  • 10.
    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.
  • 11.
    Exercício • Implemente como 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.
  • 12.
    Exercício • O seguintediagrama é válido?
  • 13.
    Interface • Toda classedefine 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.
  • 14.
    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.
  • 15.
    Interface • Uma classedeve 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
  • 16.
  • 17.
    Interface • A partirde agora, podemos tratar um Gerente como sendo um Autenticavel. • Mais uma forma de referenciar a um Gerente. • Polimorfismo
  • 18.
    Exercício • Crie ainterface 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.
  • 19.
    Classes Internas • Classesinternas são classes declaradas dentro de outras classes. • Uma classe interna tem nome Externa.Interna pois faz parte do objeto da classe externa.
  • 20.
    Classes Internas • Avantagem é 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.
  • 21.
    Classe Anônima • Umaforma 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.
  • 22.
    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.
  • 23.
    Classe Anônima • Comocriamos 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.
  • 24.
    Exercícios • Desenvolva umainterface 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.
  • 25.