1 / 26

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). Polimorfismo Exemplo Operador instanceOf Modificador final Classes Abstratas Exemplo Exercício. Polimorfismo.

aldona
Télécharger la présentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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 • 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 • Exemplo 1: Cachorro cão; // Cria objeto cão, do tipo Cachorro Cachorro Collie latido( ) Spaniel latido( ) Chihuahua latido( ) Chama um dos métodos acima, dependendo do tipo do objeto cão.latido( )

  5. 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 • 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 • 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. 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. Exemplo 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”); } } 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() { }

  10. Exemplo 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 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() { }

  11. Exemplo 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”); } } 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”); } }

  12. 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(); }

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

  14. 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. 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. 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. 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. 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. 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. 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. Exemplo • Classe Animal

  22. 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. 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. 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. 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. Exercício • Refaça a modelagem dos professores (Professor, ProfessorRegime, ProfessorHorista) utilizando o conceito de classe abstrata.

More Related