Вы находитесь на странице: 1из 15

Faculdade de

Computao e Informtica

Linguagem de
Programao II
Aula 4: Polimorfismo

Prof. Ms. Daniel Arndt Alves


http://www.progdan.pro.br

Tpicos da Aula

Polimorfismo
Exemplos de Polimorfismo
Vantaens do Polimorfismo
Mtodos Abstratos
Classes Abstratas

Daniel Arndt Alves Polimorfismo 2

Tpicos da Aula
Vinculao Dinmica
Hierarquia Employee
Classe Employee
Classe HourlyEmployee
Classe CommissionedEmployee
Classe BasePlusComissionedEmployee
Daniel Arndt Alves Polimorfismo 3

Tpicos da Aula

Processamento Polimrfico
Operador instanceof
A classe Class
Exemplo de Polimorfismo

Daniel Arndt Alves Polimorfismo 4


Tpicos da Aula
Casting
Cast
Upcast
Downcast
Mtodos final
Classes final
Daniel Arndt Alves Polimorfismo 5

Polimorfismo

Permite que um mtodo produza


resultados diferentes dependendo do
objeto ao qual aplicado.
A mesma invocao pode produzir
muitas formas de resultados

Daniel Arndt Alves Polimorfismo 6

Exemplos de Polimorfismo

Sobrecarga de um mtodo
Mesmo nome, parmetros diferentes
setData(int dia, int mes, int ano)
setData(int dia, int mes, int ano, int
hora, int minuto, int segundo)

Daniel Arndt Alves Polimorfismo 7

Exemplos de Polimorfismo

Sobrescrita de um mtodo
Uma subclasse redefne um
comportamento de sua superclasse
umaPessoa.toString()
umEmpregado.toString()
umGerente.toString()

Daniel Arndt Alves Polimorfismo 8


Exemplos de Polimorfismo

Vinculao dinmica (ou tardia)


Dynamic binding, late binding
O mtodo a ser chamado s pode ser
determinado em tempo de execuo

Daniel Arndt Alves Polimorfismo 9

Vantagens do Polimorfismo

O polimorfismo permite que


programadores tratem generalidades e
dexem que o ambiente de tempo de
execuo trate as especifidades

Daniel Arndt Alves Polimorfismo 10

Vantagens do Polimorfismo

O polimorfismo promove extensibilidade:


o software que invoca o comportamento
polimrfico independente dos tipos de
objeto para os quais as mensagens so
enviadas.

Daniel Arndt Alves Polimorfismo 11

Mtodos Abstratos

Declarado sem implementao


abstract void moveTo(double X,
double Y);

Daniel Arndt Alves Polimorfismo 12


Classes Abstratas
So classes em que um ou mais dos
mtodos so abstratos

Daniel Arndt Alves Polimorfismo 13

Classes Abstratas

Uma classe abstrata declara atributos e


comportamentos comuns das vrias
classes em uma hierarquia de classes.

Daniel Arndt Alves Polimorfismo 14

Classes Abstratas

As subclasses devem sobrescrever os


mtodos abstratos para se tornarem
concretas.
As classes abstratas no podem ser
instanciadas.

Daniel Arndt Alves Polimorfismo 15

Classes Abstratas

Daniel Arndt Alves Polimorfismo 16


Classes Abstratas

Daniel Arndt Alves Polimorfismo 17

Vinculao Dinmica

Daniel Arndt Alves Polimorfismo 18

Vinculao Dinmica

O compilador no sabe qual mtodo deve


ser chamado.
Isto determinado apenas durante a
execuo do programa.

Daniel Arndt Alves Polimorfismo 19

Vinculao Dinmica

Daniel Arndt Alves Polimorfismo 20


Vinculao Dinmica

Daniel Arndt Alves Polimorfismo 21

Hierarquia Employee

Daniel Arndt Alves Polimorfismo 22

Classe Employee

Superclasse abstract Employee


earnings declarado abstract

Nenhuma implementao pode ser


dada a earnings na classe
abstract Employee

Daniel Arndt Alves Polimorfismo 23

Classe Employee

Daniel Arndt Alves Polimorfismo 24


Classe Employee

Daniel Arndt Alves Polimorfismo 25

Classe Employee

Daniel Arndt Alves Polimorfismo 26

Classe Employee

Daniel Arndt Alves Polimorfismo 27

Hierarquia Employee

Daniel Arndt Alves Polimorfismo 28


Classe HourlyEmployee

Daniel Arndt Alves Polimorfismo 29

Classe HourlyEmployee

Daniel Arndt Alves Polimorfismo 30

Classe HourlyEmployee

Daniel Arndt Alves Polimorfismo 31

Classe SalariedEmployee

Daniel Arndt Alves Polimorfismo 32


Classe SalariedEmployee

Daniel Arndt Alves Polimorfismo 33

Classe
CommissionedEmployee

Daniel Arndt Alves Polimorfismo 34

Classe
CommissionedEmployee

Daniel Arndt Alves Polimorfismo 35

Classe
CommissionedEmployee

Daniel Arndt Alves Polimorfismo 36


Classe
BasePlusCommissionedEmployee

Daniel Arndt Alves Polimorfismo 37

Classe
BasePlusCommissionedEmployee

Daniel Arndt Alves Polimorfismo 38

Classe
BasePlusCommissionedEmployee

Daniel Arndt Alves Polimorfismo 39

Processamento Polimrfico

Vinculao Dinmica
Tambm conhecida como Vinculao
Tardia
Chamadas aos mtodos sobrescritos,
so resolvidas em tempo de execuo,
com base no tipo de objeto referenciado.

Daniel Arndt Alves Polimorfismo 40


Operador instanceof

Determina se um objeto uma instncia


de um certo tipo.

Daniel Arndt Alves Polimorfismo 41

A Classe Class

Mtodo getClass
Herdado de Object
Retorna um objeto do tipo Class

Daniel Arndt Alves Polimorfismo 42

A Classe Class
Mtodo getName
Retorna o nome da classe:

Daniel Arndt Alves Polimorfismo 43

A Classe Class

Daniel Arndt Alves Polimorfismo 44


Exemplo de Polimorfismo

Daniel Arndt Alves Polimorfismo 45

Exemplo de Polimorfismo
Vinculao Tardia - Late Binding

Daniel Arndt Alves Polimorfismo 46

Casting
Cast: converter de um tipo de dados para
outro

Daniel Arndt Alves Polimorfismo 47

Casting
Upcast: converter sem perda de
informao

Daniel Arndt Alves Polimorfismo 48


Casting
Downcast: converter com perda de
informao

Java Warning: Possible loss of precision

Daniel Arndt Alves Polimorfismo 49

Casting

Cast: Converso dentro de uma


hierarquia de classes

Daniel Arndt Alves Polimorfismo 50

Casting
Upcast: subir na hierarquia
CommissionEmployee -> Employee
BasePlusCommissionEmployee ->
CommissionEmployee
Downcast: descer na hierarquia
CommissionEmployee ->
BasePlusCommissionEmployee

Daniel Arndt Alves Polimorfismo 51

Casting

Superclasse <- Superclasse


Subclasse <- Subclasse

Daniel Arndt Alves Polimorfismo 52


Casting
Superclasse <- Subclasse
Upcast ocorre implicitamente

Referenciar membros exclusivos de


subclasses a partir da superclasse
gera um erro de compilao
Daniel Arndt Alves Polimorfismo 53

Casting
Subclasse <- Superclasse
Erro de Compilao

O downcasting explcito pode evitar


esse erro.

Porm, gera uma ClassCastException


(em tempo de execuo)
Daniel Arndt Alves Polimorfismo 54

Casting
Antes de realizar esta coero, utilizar o
operador instanceof, para assegurar que
o objeto de fato um objeto de um tipo de
subclasse apropriado.

Daniel Arndt Alves Polimorfismo 55

Mtodos final
No podem ser sobrescritos em uma
subclasse.
Mtodos private e static so
implicitamente final
Mtodos final so resolvidos em tempo
de compilao, isso conhecido como
vinculao esttica.
Daniel Arndt Alves Polimorfismo 56
Classes final

Classes final
No podem ser estendidas por uma
subclasse.
Todos os mtodos em uma classe
final so implicitamente final.

Daniel Arndt Alves Polimorfismo 57

Faculdade de
Computao e Informtica

Obrigado

Prof. Ms. Daniel Arndt Alves


http://www.progdan.pro.br

58

Вам также может понравиться