Você está na página 1de 19

Polimorfismo

Desenvolvimento de Aplicações
Aula 07
Correção da Prova…
Destrutores
Ao contrário dos construtores, como o próprio nome sugere,
os destrutores são responsáveis por liberar os recursos
usados pelos objetos durante a execução do programa.

Enquanto construtores alocam um espaço na memória, os


***** JAVA ****** destrutores liberam esse espaço.
Televisor tv;
tv = new Televisor(40); Ambos os trechos de códigos ao lado (nas linguagens Java e
tv = new Televisor(50); Object Pascal) instanciam duas vezes o objeto Televisor, com
isso, o espaço alocado fica perdido na memória.

Isso NÃO representa uma ameaça na linguagem Java, pois


***** OBJECT PASCAL ****** existe um processo chamado automatic garbage collection
try que faz a limpeza de objetos não utilizados. Por outro lado,
tv := Televisor.Create(40); em algumas outras linguagens, como Object Pascal, isso é
tv := Televisor.Create(50); um problema, pois não existe limpeza automática, ou seja, a
finally memória ficará alocada até a finalização do programa.
tv.Free;
end;
Uso da palavra reservada this

A palavra reservada this faz referência ao objeto O parâmetro “c” é local, enquanto a variável “canal” é
corrente, isto é, ao objeto que chamou o método. global à classe e se refere ao atributo da classe.

Nesse caso, o valor a ser atribuído ao atributo “canal” é


Vamos analisar o método “setCanal” da classe recebido por meio do parâmetro “c”.
Televisor, mas inicialmente sem utilização da
Isso está perfeitamente correto, no entanto, na maioria
palavra this.
das aplicações, é desejável manter o mesmo nome da
variável tanto para o parâmetro quanto para o atributo
Outra declaração possível para esse método seria: da classe.

Na verdade isso é um padrão de construção em java, o


public void setCanal(int c){ que produziria o código:
canal = c;
}
public void setCanal(int canal){
canal = canal;
}
Uso da palavra reservada this

Ess código traira problemas, porque o parâmetro Isso permite diferenciar as duas variáveis, a local
local "canal" (que está dentro dos parênteses) tem o (do parâmetro do método) e a global (referente à
mesmo nome do atributo da classe. variável do atributo).

Isso faria com que as duas variáveis fossem Como dissemos, o uso da palavra reservada this faz
consideradas locais, isto é, do próprio método referência ao objeto corrente, então this.canal é o
"setCanal". mesmo que tv.canal, pois usamos o objeto “tv” para
invocar o método “setCanal” (linha 5 do Exemplo
Para resolver esse problema, basta inserir a palavra 7.6).
reservada this ao lado do nome do atributo,
conforme código É como se estivesse escrito tv.canal = canal.

public void setCanal(int canal){


this.canal = canal;
}
Pilares da
POO
Polimorfismo
POLI = Muitas Exemplo: prepararArroz()
MORFO = Formas
Definição
Polimorfismo permite que um mesmo nome
represente vários comportamentos diferentes
Relembrando o
Uma vez que uma classe herda características de
conceito de outra, ela pode implementar partes específicas não

Herança
contempladas na classe original (superclasse),
tornando-se especializada em algum processo.

Com isso podemos dizer que herança é um


poderoso mecanismo de especialização.
Assinatura de Método
public int somar(int v1, int v2) { … }
A assinatura de um
public Double somar(int v1, int v2) { … }
método é definido
public int somar(int v1, int v2, int v3) { … }
pela quantidade e os
public int somar(int v1, int v2, Double v3) { … }
tipos dos
public int somar(int v1, int v2, int v3, int v4) { … }
parâmetros.
Polimorfismo
Por meio das técnicas de encapsulamento e
herança novas funcionalidades podem ser
adicionadas às classes.

A ideia geral do polimorfismo é de que uma


Um poderoso mecanismo para a determinada classe mais genérica (a superclasse)
generalização. possa assumir diferentes comportamentos,
gerando objetos diferentes, dependendo de certas
condições.

Na prática isso quer dizer que um mesmo objeto


pode executar métodos diferentes dependendo do
momento de sua criação.
Exemplo de
Hierarquia de
Classes

Hierarquia de classes relacionadas ao


conceito de pessoa que serão utilizadas
nos exemplos a seguir.
Polimorfismo de
Sobreposição
Acontece quando substituímos um método de
uma superclasse na sua subclasse usando a
mesma assinatura.
Exemplos Práticos

Para os próximos exemplos, Exemplo Didático Exemplo Prático


implemente as classes Pessoa,
PessoaFisica, PessoaJurica, Na classe main, declare uma Na classe Pessoa, crie um
Funcionario, conforme variável do tipo Pessoa, método estático genérico
diagrama anterior (diagrama inicializando com null, e validarPessoa() que tenha um
7.8). conforme uma opção de parâmetro do tipo pessoa, e
usuário (pergunta) teste a execução do programa
Implemente passando variáveis de todos os
System.out.println em JOptionPane.showInputDi tipo de classes criadas no
todos os métodos criados. alog(“Informe…”) exemplo anterior (Pessoa,
instancie classes diferentes PessoaFisica, PessoaJurica,
dentro da mesma variável. Funcionario)
Prática

Criação de uma estrutura de classe herdando de


uma classe chamada Animal, com os atributos
idade e peso, além dos métodos andar() e
emitirSom()
Polimorfismo de
Sobrecarga
Acontece quando substituímos um método de
uma superclasse na sua subclasse usando
assinaturas diferentes.
Sobrecarga com a ● falar frase
○ agradável: abanar e latir
classe Cachorro ●
○ agressiva: rosnar
horário do dia
○ manhã: abanar
○ tarde: abanar e latir
○ noite: ignorar
● dono
○ é dono: abanar
○ não é: rosnar e latir
● idade e peso
○ novo e leve: abanar
○ novo e pesado: latir
O método reagir() representa a reação ○ velho e leve: rosnar
do cachorro dependendo de algumas ○ velho e pesado: ignorar
condições.
Prática

Codificar a classe cachorro de acordo com o


exemplo anterior…
Bibliografia

DEITEL, Harvey;DEITEL, Paul. Java: como programar. 6. ed. Pearson Education, São Paulo, p.256-369 , 2006

FURGERI, Sérgio. Java 8 - Ensino Didático - Desenvolvimento e Implementação de Aplicações. São Paulo:
Editora Saraiva, 2015. E-book. 9878536519340.

Você também pode gostar