Aula 37-38 Programação Orientação Objeto em Java-Polimorfismo

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 22

LINGUAGEM DE

PROGRAMAÇÃO II

POO em JAVA
[Polimorfismo]
Cursos de Computação

Prof. Sérgio Roberto Costa Vieira, M.Sc.


Linguagem de Programação II
POO em Java

Polimorfismo

– A palavra polimorfismo significa “várias formas”.

– É originário do grego: poli (muitas) morphos (formas)

– Na programação orientada à objetos indica a realização de uma tarefa


de formas diferentes.

– No Java, em particular, o polimorfismo se manifesta claramente na


chamada de métodos, quando objetos de tipos diferentes são
capazes de acionar um mesmo método, mas produzindo resultados
diferentes.

2 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo

– Permite que um método produza resultados diferentes, dependendo


do objeto ao qual é aplicado.

– A mesma invocação pode produzir “muitas formas” de resultados.

– É a capacidade de um objeto poder ser referenciado de várias formas.

– A ideia de polimorfismo só tem sentido com a existência do


paradigma de herança.

3 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo

– A característica de chamar métodos de um objeto sem especificar o


tipo exato dele é conhecido como polimorfismo.

– O polimorfismo permite escrever programas que processam objetos


que compartilham a mesma superclasse em uma hierarquia de
classes como se todas fossem objetos da superclasse;

– Ele permite que classes pertencentes a uma mesma linha de herança


possuam comportamentos diferentes para o mesmo método;

– Não confundir com sobrecarga (overload)

4 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo

– Um nome para varias formas, ou ainda, um nome e várias


implementações (vários métodos com o mesmo nome).

– Capacidade de uma referência de variável mudar seu comportamento


de acordo com o objeto a que ela esta conectada.

• Isto permite que objetos diferentes, de subclasses distintas, sejam vistos como
objetos de uma mesma superclasse – o método apropriado a ser executado será
escolhido automaticamente, baseado na subclasse a qual o objeto pertence.

– Vamos ver um exemplo básico.

5 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo

6 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo
public class Pessoa { public class PessoaFisica extends Pessoa {

private String nome; private String rg;

public void setNome(String nome){ public void setRg(String rg){


this.nome = nome; this.rg = rg;
} }

public String getNome( ){ public String getRg( ){


return this.nome; return this.rg;
} }
public void mostraClasse( ){
public void mostraClasse( ){
System.out.println(“Classe Pessoa Fisica”);
System.out.println(“Classe Pessoa”);
}
}
}
}

7 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo
public class PessoaJuridica extends Pessoa { public class Funcionario extends PessoaFisica {

private String cnpj; private String cartao;

public void setCnpj(String cnpj){ public void setCartao(String cartao){


this.cnpj = cnpj; this.cartao = cartao;
} }

public String getCnpj( ){ public String getCartao( ){


return this.cnpj; return this.cartao;
} }

public void mostraClasse( ){ public void mostraClasse( ){


System.out.println(“Classe Pessoa Juridica”); System.out.println(“Classe Funcionário”);
} }
} }

8 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo
public class PessoaPolimorfa {
public static void main(String[] args){
Pessoa pessoa = null;
int tipo = Integer.parseInt(JOptionPane.showInputDialog(“Forneça um número de 1 a 4”));
switch( tipo ) {
case 1: pessoa = new Pessoa(); break;
case 2: pessoa = new PessoaFisica(); break;
case 3: pessoa = new PessoaJuridica(); break;
case 4: pessoa = new Funcionario(); break;
default: {
System.out.println(“Tipo desconhecido”);
System.exit(0);
}
}
pessoa.mostraClasse();
}
}
9 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018
Linguagem de Programação II
POO em Java

Polimorfismo

– Polimorfismo é a capacidade de um objeto poder ser referenciado de


várias formas

– CUIDADO: polimorfismo não quer dizer que o objeto fica se


transformando.

– Muito pelo contrário, um objeto nasce de um tipo e morre daquele


tipo, o que muda é a maneira como nos referenciamos a ele.

– É a criação de múltiplas classes com os mesmos métodos e


propriedades, mas com funcionalidades e implementações diferentes
(sobrescrita).

10 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo

– Quando um programa invoca um método por meio de uma variável de


superclasse, a versão correta de subclasse do método é chamada
com base no tipo da referência armazenada na variável da
superclasse.

– Com o polimorfismo, o mesmo nome e assinatura de método podem


ser utilizados para fazer com que diferentes ações ocorram,
dependendo do tipo de objeto em que o método é invocado.

– Facilita a adição de novas classes a um sistema com o mínimo de


modificações no código do sistema.

11 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo

– Existem três tipos de aplicação do Polimorfismo:

Sobrecarga (overloading): métodos com o mesmo nome, mas com


objetos, parâmetros ou tipos diferentes.

Sobrescrita (overriding): métodos de subclasses redefinindo


comportamentos de sua superclasse

Vinculação Dinâmica (late binding): chamadas aos métodos


sobrescritos, elas são resolvidas em tempo de execução com base no
tipo de objeto referenciado.

12 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo

– UpCasting
• Tipos genéricos, acima na hierarquia, sempre podem receber objetos de suas
subclasses.

Pessoa pessoa = new Funcionário();

– DownCasting
• Tipos específicos, abaixo na hierarquia, não podem receber explicitamente seus
objetos que foram declarados como referências de suas superclasses.

Funcionario people = pessoa; //incorreto, isso não compila

Funcionario people = (Funcionario) pessoa; //modo correto

13 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo

– Exemplo Simples:
• Em um jogo de xadrez temos várias peças, cada peça se movimenta,
porém cada tipo de peça se movimenta de uma maneira diferente (o peão
vai pra frente, o cavalo anda em L, o bispo em diagonal e assim por
diante).
• Desta maneira, todos (peão, cavalo e bispo) são peças, porém cada um
se movimenta de uma maneira diferente!
• O polimorfismo em Java se manifesta apenas na chamada de
métodos.
• Então ao passar uma mensagem para um objeto peça, dizendo para ele
se mover, o Java identificará que tipo de peça é e fará o movimento de
acordo com o tipo
• Essa decisão é tomada em tempo de execução (runtime) pelo Java
14 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018
Linguagem de Programação II
POO em Java

Polimorfismo (Xadrez) public class Cavalo extends Peca {


@Override
public abstract class Peca {
public void mover( ){
public abstract void mover(); System.out.println(“Andar em L”);
} }
}

public class Peao extends Peca {


@Override public class Bispo extends Peca {
public void mover( ){ @Override
System.out.println(“Andar para Frente”); public void mover( ){
} System.out.println(“Andar na Diagonal”);
} }
}

15 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo (Xadrez)
public class Xadrez {
public static void main(String[] args){
Peca peao = new Peao();

Peca cavalo = new Cavalo();

Peca bispo = new Bispo();

peao.mover();

cavalo.mover();

bispo.mover();
}
}

16 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo

17 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo
public class ClasseAnimal { public class ClasseAves extends ClasseAnimal {

public void emitirSom() { public void emitirSom() {


System.out.println(“Classe Animal”); System.out.println(“Classe Aves”);
} }

public ClasseAnimal() { public ClasseAves() {


super();
}
}
}
}

18 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

Polimorfismo
public class ClasseCaninos extends public class ClasseFelinos extends
Classe Animal { ClasseAnimal {

public void emitirSom() { public void emitirSom() {


System.out.println(“Classe Caninos”); System.out.println(“Classe Felinos”);
} }

public ClasseCaninos() { public ClasseFelinos() {


super();
super();
}
}
}
}

19 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


Linguagem de Programação II
POO em Java

public class ClassePrincipal {


Polimorfismo
final static int TAM_VETOR = 4;
public void executarVetor(ClasseAnimal[] p_objAnimal) {
for (int i=0; i < TAM_VETOR; i ++){
p_objAnimal[ i ].emitirSom(); }
}
public static void main(String[] args) {
ClassePrincipal pObj = new ClassePrincipal();
ClasseAnimal objAnimal[] = new ClasseAnimal[TAM_VETOR];
objAnimal[ 0 ] = new ClasseAnimal();
objAnimal[ 1 ] = new ClasseFelinos();
objAnimal[ 2 ] = new ClasseCaninos();
objAnimal[ 3 ] = new ClasseAves();
pObj.executarVetor(objAnimal);
}
}
20 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018
Linguagem de Programação II
POO em Java

Polimorfismo (Resumindo)

O Polimorfismo nos permite programar genericamente ao invés de


programar especificamente.
O ambiente de tempo de execução se encarrega das especificidades
Nos permite criar programas que processam objetos que compartilham uma
mesma superclasse como se todos fossem daquela classe
Simplifica a programação

É possível fazer com que objetos se comportem de maneira


adequada automaticamente
Sem conhecer o tipo do objeto
Desde que os objetos pertençam a uma mesma hierarquia de herança
O mesmo nome e assinatura de métodos podem ser utilizados para causar
diferentes ações, dependendo do tipo do objeto

21 Prof. Sérgio Roberto Costa Vieira, M.Sc. 2018


LINGUAGEM DE
PROGRAMAÇÃO II

POO em JAVA
[Polimorfismo]
Cursos de Computação

Prof. Sérgio Roberto Costa Vieira, M.Sc.

Você também pode gostar