Tip:
Highlight text to annotate it
X
Olá pessoal, tudo bem? Meu nome é Douglas Frari
e iremos começar a segunda parte
da aula sobre polimorfismo, de programação orientada a objetos
como vocês podem ver, passei uma
rapei o cabelo para ficar “mais bonito” :)
[ risos ] entre aspas… bom, vamos focar em nossa
aula onde o objetivo dela é entender
o conceito de Polimorfismo na prática, só que desta vez usando
as classes que nós mesmos defimos
na aula anterior fizemos um exemplo de Polimorfismo, onde
utilizamos as classes já existentes do Java. Neste caso
agora estamos na parte 2 onde temos uma hierarquia
Temos um projeto com 3 classes (já criadas)
sem nada ainda para que possamos discutir aqui
como seria esse exemplo para simular um Petshop
onde a ideia seria criar itens que o Petshop possui
vamos abrir aqui ...
o post que fiz para o meu blog que trata de
Polimorfismo, que estará relacionado
com essa vídeo aula. Podemos observar a figura
na hipótese de termos
um Petshop ...
… e
neste Petshop possuir cadastros de cães e gatos
podemos ter uma hierarquia
de coisas em comum entre os dois elementos ou entidades
no caso do exemplo estou (emitindo som)
então existe uma classe mais alta onde
iremos colocar coisas que são comuns para as
entidades filhas, ou seja, a ideia da herança
o reuso. Vamos fazer na prática e codificar aqui
abrindo a classe Animal, o que essa tem em comum? o que todos os animais tem
em comum? Normalmente tem um nome
vamos codificar rapidamente o que eles tem
todo Animal deve ter um nome, todo animal pode ter
uma idade ...
podendo representar como Date?
[pensando …] vamos fazer o seguinte, não iremos codificar um
sistema completo, apenas um nome por enquanto
e as operações em comum ...
seguindo o exemplo uma operação
em comum é emitirSom()
[codificando … ]
esse emitirSom()
a ideia dele é ser um método em comum
para a hierarquia envolvida (Cachorro e Gato)
poderia chamar um método privado ...
porém neste caso não precisa fazer isso agora
quem pode ter seria as classes filhas
agora podemos dizer que Cachorro herda
de Animal
e posso dizer que Gato, da mesma maneira,
herda de Animal também
assim sendo, ambos tem
o método emitirSom()
poderíamos re implementar os métodos aqui
[codificando … ]
[codificando … fazendo Override ]
para diferenciar
podemos colocar aqui que o som
representando através de log para nível de
acompanhamento em tempo de execução, dizemos que o gato está
miando somente para
o emitorSom()
e fazemos outro override do emitirSom()
quando utilizamos Override,
com herança, estamos chamando o método do pai
opcionalmente podemos chamar o método do pai para ser
executado para em seguida executar o atual. Se
ocultarmos o método super, não chamaria o do pai e chamaria
apenas o do filho. Mas queremos que chame o do pai
então vou deixar. No caso o cachorro ele
late, portanto “Latindo…”
Agora que criei minha hierarquia básica
podemos criar apenas o get e set para o nome
[codificando … ]
selecionando opção “generate Getter and Setters”
Na classe Petshop
vamos fazer uns exemplos
Como podemos
exemplificar o Polimorfismo aqui? Podemos criar
dois objetos, então vamos
criar um objeto do tipo Cachorro
chamando de “cachorro1”
e vamos alocar memória para ele
e em seguida setar o nome do cachorro
[codificando … ]
vamos chamá-lo de “Totó”
Vamos criar também um objeto Gato
chamado “gato1”
[codificando … ]
e setar o nome do gato ...
[tentando lembrar o nome de um gato …]
[ pensando …]
“estou sem criatividade no momento :(”
o gato vai se chamar “Lu” mesmo, pois estou sem ideias
após criar os dois objetos
agora podemos testar… usando o cachorro
chamando o método emitirSom()
e a mesma coisa com o objeto gato
chamando o método emitirSom()
Estou usando Polimorfismo até o momento?
Não. Estamos usando o conceito de Herança. Mas vamos rodar
para perceber o que irá acontecer
ao executar o programa
vai mostrar respectivamente, o som do cachorro e gato
“Latindo” (cachorro) e “Miando” (gato)
O programa foi executado com sucesso.
Onde estaria o Polimorfismo? Neste caso,
o Polimorfismo estaria quando, por exemplo,
[ajeitando código ...]
Poderíamos criar então
um objeto do tipo animal
chamado de “animal1”, que receberá a instância de
Gato.
O que aconteceu? Se pegarmos
a variável “animal1” e chamar
o método emitirSom()
neste momento, qual
é o método
que será usado? (cachorro ou gato)
É isso que o Polimorfismo consegue tratar. Neste caso
o Polimorfismo
consegue
chamar o método respectivamente de Animal
veja que o atributo animal1 é do tipo Animal, mas
ele está recebendo a instância de quem? de gato. Então
qual será que o método irá chamar?
Vamos verificar.
[rodando o programa ...]
como “animal1” recebeu a instância de Gato
ele pode “Miar” :)
Agora se nós ...
fizéssemos o objeto “animal1”
receber a instância de cachorro1
[acabou o tempo do despertador, mas já irei encerrar…]
se mandar emitirSom
[codificando … ]
qual que irá chamar? (miar ou latir)
do cachorro. Então se
executarmos podemos ver que
recebeu a instância de cachorro e portanto quando o método foi
chamado emitirSom do respectivo método correto
da classe certa. Então o que é Polimorfismo aqui neste caso?
Polimorfismo é a capacidade que um objeto têm
de receber a instância de outra. Então
fiz com que o atributo “animal1”
esse objeto fosse declarado como tipo Animal
e assim ele pode receber as referências dos seus
filhos, ou seja, pode receber a instância do Gato ou do Cachorro
e o Java consegue, através deste conceito de Polimorfismo
saber chamar o respectivo método de maneira
correta. Bom pessoal, o objetivo desta aula
realmente foi fazer um exemplo muito simples do uso de Polimorfismo
usando as classes que a nós mesmos criamos para entender como fazer
esse processo. Existem outras utilizações interessantes
que poderiam ser feitos, uma dela é
reusando o método passando como parâmetro o tipo Animal
assim poderia ser útil tanto para Gato como para Cachorro, tal qual
o exemplo de List da aula
anterior (parte 1 de Polimorfismo). Bom pessoal, é isso
espero que você tenha aprendido
o conceito de Polimorfismo, pratique um pouco
e tente fazer alguns exemplos. Leia o post
relacionado aqui no vídeo. Inclusive irei acrescentar
esse vídeo com o código fonte deste projeto
que fizemos aqui. Qualquer coisa deixe seu comentário aqui
neste vídeo. Se gostou clique em “Gostei”
divulgue esse link e
assim você ajuda na audiência deste projeto. Em breve veremos
os próximos assuntos sobre classes abstratas e interfaces em Java
Grande abraço e até a próxima aula!
[ fim do vídeo] :D