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

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

Polimorfismo e Classes Abstratas Profa

Apresentações semelhantes


Apresentação em tema: "Polimorfismo e Classes Abstratas Profa"— Transcrição da apresentação:

1 Polimorfismo e Classes Abstratas Profa
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 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 Cachorro cão; // Cria objeto cão, do tipo Cachorro
Polimorfismo Exemplo 1: Cachorro cão; // Cria objeto cão, do tipo Cachorro Cachorro Spaniel latido( ) Chihuahua latido( ) Collie 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) 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) 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 Animal { private String tipo;
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) 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) 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() ); 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: Conta é superclasse de ContaSuper
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) { 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.


Carregar ppt "Polimorfismo e Classes Abstratas Profa"

Apresentações semelhantes


Anúncios Google