polimorfismo - desenvolvido pela profa. luciana porcher nedel e alterado pela profa. isabel harb...

26
Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador final Classes Abstratas Exemplo Exercício Abstratas Profa. Isabel Harb Manssour (Material adaptado das aulas dos Profs: Luciana Nedel, Júlio Machado e Bernardo Copstein)

Upload: internet

Post on 17-Apr-2015

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

▐Polimorfismo▐Exemplo▐Operador instanceOf▐Modificador final▐Classes Abstratas▐Exemplo▐Exercício

Polimorfismo e Classes Abstratas Profa. Isabel Harb Manssour(Material adaptado das aulas dos Profs: Luciana Nedel, Júlio Machado e Bernardo Copstein)

Page 2: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Polimorfismo

“Polimorfismo é a característica única de linguagens orientadas a objetos que permite que diferentes objetos respondam a mesma mensagem cada um a sua maneira.”

Page 3: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Polimorfismo

▐ Capacidade de assumir formas diferentes. ▐ Em termos de programação, polimorfismo representa a

capacidade de uma única variável chamar métodos diferentes, dependendo do que a variável contém.

▐ Polimorfismo libera o programador de ter que saber a classe específica do objeto que recebe uma mensagem

▐ Forma de escrever programas de forma genérica que permite a manipulação de uma grande variedade de classes.

Page 4: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Polimorfismo

Cachorro

Spaniel

latido( )

Chihuahua

latido( )

Collie

latido( )

cão.latido( )

Chama um dos métodos acima, dependendo do tipo do objeto

Cachorro cão; // Cria objeto cão, do tipo Cachorro

▐ Exemplo 1:

Page 5: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Polimorfismo▐ Exemplo 2:

■ Em uma aplicação temos uma classe Conta, a qual pode ser de três tipos diferentes (subclasses) ContaCorrente ContaPoupança ContaSuper

■ Cada tipo de conta possui um método calculaJuros() implementado de formas diferentes.

■ Em Java, podemos chamar o método calculaJuros() sobre uma variável conta que será selecionado automaticamente o método correto das subclasses! double juros = umaconta.calculaJuros();

Page 6: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Polimorfismo

▐ Aspectos importantes:■ Usa-se uma variável de um tipo único (normalmente do

tipo da superclasse) para armazenar objetos variados do tipo das subclasses.

■ Envolve o uso automático do objeto armazenado na super-classe para selecionar um método de uma das sub-classes. O tipo do objeto armazenado não é conhecido até a execução do programa. A escolha do método a ser executado é feita dinamicamente.

Page 7: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Polimorfismo

▐ Polimorfismo é uma das ferramentas mais poderosas da programação orientada a objetos. Mais do que isso, é fundamental para o paradigma de OO.

▐ Exemplo:Animal bicho;// Declara uma variável animal

bicho = new Cachorro(“Lessie”);

ou

Animal bicho = new Cachorro(“Lessie”);

Page 8: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Exemplopublic class Animal{ private String tipo;

public Animal(String tipo1) { tipo = new String(tipo1); }

public void show() { System.out.println(“Eu sou um ” + tipo); }}

// Método a ser implementado nas sub-classes // Cada subclasse irá sobrescrever o métodopublic void sound() { }

Page 9: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Exemplopublic class Animal{ private String tipo;

public Animal(String tipo1) { tipo = new String(tipo1); }

public void show() { System.out.println(“Eu sou um ” + tipo); }}

// Método a ser implementado nas sub-classes

public void sound() { }

public class Cachorro extends Animal{ private String nome; // Nome do cachorro private String raça; // Raça do cachorro

public Cachorro(String nome1) { // Chama o construtor da classe base super(“Cachorro”’); nome = nome1; // Nome fornecido raça = “Desconhecida”; // Raça default }

public Cachorro(String nome1, String raça1) { // Chama o construtor da classe base super(“Cachorro”’); nome = nome1; // Nome fornecido raça =raça1; // Raça fornecida }

public void sound() { System.out.println(“Au, au”); }}

Page 10: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Exemplopublic class Animal{ private String tipo;

public Animal(String tipo1) { tipo = new String(tipo1); }

public void show() { System.out.println(“Eu sou um ” + tipo); }}

// Método a ser implementado nas sub-classes

public void sound() { }

public class Gato extends Animal{ private String nome; // Nome do gato private String raça; // Raça do gato

public Gato(String nome1) { // Chama o construtor da classe base super(“Gato”’); nome = nome1; // Nome fornecido raça = “Desconhecida”; // Raça default }

public Gato(String nome1, String raça1) { // Chama o construtor da classe base super(“Gato”’); nome = nome1; // Nome fornecido raça =raça1; // Raça fornecida }

public void sound() { System.out.println(“Miau”); }}

Page 11: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Exemplopublic class Animal{ private String tipo;

public Animal(String tipo1) { tipo = new String(tipo1); }

public void show() { System.out.println(“Eu sou um ” + tipo); }}

// Método a ser implementado nas sub-classes

public void sound() { }

public class Gato extends Animal{ private String nome; // Nome do gato private String raça; // Raça do gato

public Gato(String nome1) { // Chama o construtor da classe base super(“Gato”’); nome = nome1; // Nome fornecido raça = “Desconhecida”; // Raça default }

public Gato(String nome1, String raça1) { // Chama o construtor da classe base super(“Gato”’); nome = nome1; // Nome fornecido raça =raça1; // Raça fornecida }

public void sound(){ System.out.println(“Miau”);}}

public class Cachorro extends Animal{ private String nome; // Nome do cachorro private String raça; // Raça do cachorro

public Cachorro(String nome1) { // Chama o construtor da classe base super(“Cachorro”’); nome = nome1; // Nome fornecido raça = “Desconhecida”; // Raça default }

public Cachorro(String nome1, String raça1) { // Chama o construtor da classe base super(“Cachorro”’); nome = nome1; // Nome fornecido raça =raça1; // Raça fornecida }

public void sound(){ System.out.println(“Au, au”);}}

Page 12: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Exemplo

public class TestaPolimorfismo{ public static void main(String[] args) { // Cria um array de animais Animal[] bichos = { new Cachorro(“Rintintin”, “Pastor Alemão”),

new Gato(“Garfield”, “Gato Amarelo”)}; Animal mascote; // Escolhe 5 mascotes (sorteados) for (int i = 0; i < 5; i++) { // Cria um índice randômico de 0 a bichos.length - 1 int indice = (int)(bichos.length * Math.random() - 0.001);

mascote = bichos[indice]; // Escolhe um bicho do array

System.out.println(“\nSua escolha:”); mascote.show(); mascote.sound(); }

Page 13: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Operador instanceOf

▐ O tipo específico de um objeto pode ser determinado utilizando-se o operador instanceOf■ <varobjeto> instanceOf <classe>

■ Retorna um valor booleano

▐ É útil quando se necessita selecionar um método específico a ser executado baseado no tipo do objeto.

Page 14: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Operador instanceOf

▐ Exemplo:public void operacao(Conta c){ ... if (c instanceOf ContaSuper){ ((ContaSuper c).aumentaLimite(100); } ...}

■ Conta é superclasse de ContaSuper■ Note que a conversão (cast) explícito é necessário, pois

aumentaLimite() é um método de ContaSuper e não de Conta!

Page 15: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Modificador final

▐ Uma variável ou atributo pode ser marcado como final para se tornar uma constantefinal double PI = 3.14;

▐ Um método pode ser marcado como final para impedir que seja sobrescrito.public final void meuMetodo(){}

▐ Uma classe pode ser marcada como final para impedir que possa ser estendida com subclasses.public final class Color{}

Page 16: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Classes Abstratas

“ Uma classe abstrata é uma classe incompleta onde alguns ou todos os seus métodos não possuem implementação,servindo apenas para definir uma interface.”

Page 17: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Classes Abstratas

▐ Classes abstratas são classes que não podem ser instanciadas, mas é possível declarar uma variável (referência) deste tipo.

▐ São utilizadas apenas para permitir a derivação de novas classes

Page 18: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Classes Abstratas

▐ Identificamos uma classe como abstrata pelo modificador abstract■ Um método definido como abstract indica que a classe

não implementa aquele método e que ele deve obrigatoriamente ser implementado nas classes derivadas

■ Todos os métodos não definidos de uma classe abstrata deverão ser definidos nas derivadas ou estas continuarão a ser consideradas abstratas e não poderão ser implementadas.

■ Em uma classe abstrata um ou mais métodos são declarados, mas não implementados.

Page 19: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Classes Abstratas

▐ Exemplo:

public abstract class Animal

{

private String tipo;

public abstract void sound(); // Método abstrato

public Animal (String tipo)

{

tipo = new String(tipo);

}

}

Page 20: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Classes Abstratas

▐ Como o método sound( ) desenvolvido na classe Animal não possui nenhuma instrução, deve ser declarado como abstract (para que não fique sem sentido).

▐ Este tipo de situação (criar uma superclasse a partir da qual subclasses serão derivadas) acontece muito freqüentemente em programação orientada a objetos, quando o objetivo é apenas tirar vantagem do polimorfismo.

▐ A característica do polimorfismo é garantir que o objeto sabe como deve reagir a uma dada mensagem, independente do tipo de referência usada para acessá-lo.

Page 21: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Exemplo

▐ Classe Animal

Page 22: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Exemplo

public class Animal{ private String nome; public Animal(String n) { nome = n; } public void imp() { System.out.println("Nome: "+nome); } public String getName() { return(nome); }

public void talk() { System.out.println("Eu nao falo"); }}

Page 23: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Exemplo

▐ Classe Animal■ Na prática, nunca iremos instanciar um Animal. A

classe serve apenas para a definição de mamíferos e pássaros.

■ Da mesma forma, não instanciamos Mamifero nem Passaro.

■ Somente instanciamos objetos BemTevi, Papagaio, Cachorro e Vaca.

■ Logo, Animal, Mamifero e Passaro são classes abstratas

Page 24: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Exemplo

public abstract class Animal{

private String nome;

public Animal(String n) {

nome = n;

}

public void imp() {

System.out.println("Nome: "+nome);

}

public String getName() { return(nome); }

public abstract void talk();

// talk não foi implementado nesta classe

}

Page 25: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Exemplo

public abstract class Passaro extends Animal{ public Passaro(String n) { super(n); } public void talk() { System.out.println("Piu piu"); }}public abstract class Mamifero extends Animal{ public Mamifero(String n) { super(n); } public abstract void talk(); //talk não foi implementado}

Page 26: Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador

Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Exercício

▐ Refaça a modelagem dos professores (Professor, ProfessorRegime, ProfessorHorista) utilizando o conceito de classe abstrata.