A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador."— Transcrição da apresentação:

1 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)

2 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.

3 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.

4 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:

5 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();

6 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.

7 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);

8 Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Exemplo public 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étodo public void sound() { }

9 Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Exemplo public 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); }

10 Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Exemplo public 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); }

11 Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Exemplo public 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); }

12 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() ); mascote = bichos[indice]; // Escolhe um bicho do array System.out.println(\nSua escolha:); mascote.show(); mascote.sound(); }

13 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 instanceOf Retorna um valor booleano É útil quando se necessita selecionar um método específico a ser executado baseado no tipo do objeto.

14 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 !

15 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 constante final 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{}

16 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.

17 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

18 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.

19 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); }

20 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.

21 Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Exemplo Classe Animal

22 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"); }

23 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

24 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 }

25 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 }

26 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.


Carregar ppt "Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Polimorfismo Exemplo Operador instanceOf Modificador."

Apresentações semelhantes


Anúncios Google