SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
Programação Orientada a Objetos



       Polimorfismo e Classes
             Abstratas



          Ludimila Monjardim Casagrande
                      2012
Polimorfismo e Herança

      O mecanismo de herança permite a criação de
          classes a partir de outras já existentes desde
          que exista a relação “é um” entre a subclasse e
          a superclasse.
      Dessa forma é possível criar classes mais
          especializadas a partir de uma classe genérica.
      A relação “é um” entre classes também permite
          a existência de outra característica fundamental
          das linguagens OO que é o polimorfismo.

Polimorfismo            ©2012 Ludimila Monjardim Casagrande   2
Polimorfismo e Herança
                                                         Uma Figura Geométrica
                                       Figura            é uma generalização de
                                                         múltiplas formas



       Quadrado é uma                                            Círculo é uma
       Figura Geométrica                                         Figura Geométrica

                      Quadrado                            Círculo




Polimorfismo               ©2012 Ludimila Monjardim Casagrande                       3
Polimorfismo

      Polimorfismo, que significa “múltiplas formas”,
          permite a manipulação de instâncias de classes
          que herdam de uma mesma classe ancestral de
          forma unificada:
            Assim, é possível escrever métodos que
             recebam instâncias de uma classe C, e os
             mesmos métodos serão capazes de processar
             instâncias de qualquer classe que herde de C, já
             que qualquer classe que herde de C “é um” C.


Polimorfismo             ©2012 Ludimila Monjardim Casagrande    4
Exemplo de Polimorfismo
                                    public class VetorFiguras{

                                         private Figura[] figuras = new Figura[10];
                                         private int totalDeElementos;

                                         public boolean contem(Figura fig) {
                                            boolean resultado = false;
                                            for(int i = 0; i < this.totalDeElementos; i++){
                                                if(fig.equals(this.figuras[i])){
                                                     resultado = true;
  Quadrado q = new Quadrado(2.0);                    break;
  Circulo c = new Circulo(2.0);                 }
                                            }
  if(vetor.contem(q))                       return resultado;
      ...                                }
  if(vetor.contem(c))               }
      ...

Polimorfismo                ©2012 Ludimila Monjardim Casagrande                           5
Exemplo de Polimorfismo
                       public class Vetor {

                            private Object[ ] objetos = new Object[10];
                            private int totalDeElementos;

                             public boolean contem(Object obj) {
                               boolean resultado = false;
                               for(int i = 0; i < this.totalDeElementos; i++){
                                   if(obj.equals(this.objetos[i])){
                                        resultado = true;
                                        break;
                                   }
                               }
                               return resultado;
                             }
                       }


Polimorfismo   ©2012 Ludimila Monjardim Casagrande                           6
Polimorfismo

      Polimorfismo é o princípio pelo qual duas ou
          mais classes derivadas de uma mesma
          superclasse podem invocar métodos que têm a
          mesma identificação (assinatura) mas
          comportamentos distintos, especializados para
          cada classe derivada, usando para tanto uma
          referência a um objeto do tipo da superclasse.




Polimorfismo            ©2012 Ludimila Monjardim Casagrande   7
Polimorfismo

      Em outras palavras, polimorfismo é a
          capacidade de se enviar a mesma mensagem a
          objetos de classes diferentes, por meio de um
          mesmo tipo base comum a estes objetos.




Polimorfismo           ©2012 Ludimila Monjardim Casagrande   8
Exemplo de Polimorfismo
 public class Figura {
    public double calcularArea( ) {
        return 0;
    }
 }
 public class Quadrado extends Figura {  Herança
    double lado;
    public Quadrado(double lado) {
        this.lado = lado;
    }

      public double calcularArea( ) {      Sobreposição do método da
         double area = 0;                   superclasse
         area = lado * lado;
         return area;
      }
 }
Polimorfismo                   ©2012 Ludimila Monjardim Casagrande      9
Exemplo de Polimorfismo
 public class Circulo extends Figura {  Herança
      double raio;

      public Circulo (double raio) {
         this.raio = raio;
      }

      public double calcularArea( ) {         Sobreposição do método da
         double area = 0;                      superclasse.
         area = 3.14 * raio * raio;
         return area;
      }
 }



Polimorfismo                   ©2012 Ludimila Monjardim Casagrande         10
Exemplo de Polimorfismo
 public class Principal {

      public static void main(String[ ] args) {

          Figura f1 = new Quadrado(4);

          Figura f2 = new Circulo(2);

          System.out.println("Área da Figura 1 é: "        Comportamento
                              + f1.calcularArea( ) + "n"   polimórfico.
                              + "Área da Figura 2 é: "
                              + f2.calcularArea( ));

      }        Um mesmo tipo base Figura, por meio das variáveis f1 e f2, é utilizado
 }             para enviar uma mesma mensagem calcularArea para objetos de tipos
               diferentes Quadrado e Circulo e o comportamento executado será
               distinto.

Polimorfismo                    ©2012 Ludimila Monjardim Casagrande                     11
Exemplo de Polimorfismo
 public class VetorFiguras {

      private Figura[] figuras = new Figura[10];
      private int totalDeElementos;

      public double calcularAreaTotal() {
         double areaTotal = 0;
         for (int i = 0; i < figuras.length; i++) {
             if (figuras[i] != null) {
                  areaTotal = areaTotal + figuras[i].calcularArea();  Comportamento
             }                                                         polimórfico.
         }
         return areaTotal;
      }
 }

Polimorfismo                  ©2012 Ludimila Monjardim Casagrande                 12
Outro Exemplo

                                                                     A fila de impressão
               FilaImpressao                        Documento        armazena objetos
                                 imprime()                           genéricos do tipo
                                                                     Documento

                                                    imprime()

 A mensagem
 transmitida é: imprima
 todos os Documentos
 da fila                       DocWord               DocExcel         DocPDF

 Cada tipo de
 documento conhece
 seus detalhes de              imprime()            imprime()        imprime()
 impressão


Polimorfismo                   ©2012 Ludimila Monjardim Casagrande                         13
Vantagens do Polimorfismo

      Já vimos que o grande benefício do
          polimorfismo é permitir que vários objetos de um
          mesmo tipo base sejam tratados da mesma
          maneira.
      Uma outra vantagem é permitir aumentar um
          software de maneira mais controlada, mais
          localizada.




Polimorfismo            ©2012 Ludimila Monjardim Casagrande   14
Vantagens do Polimorfismo

      Considere o exemplo da fila de impressão. Se
          quisermos incrementar o software e permitir que
          novos tipos de documentos sejam impressos, a
          classe FilaImpressao não precisa ser alterada.
      Somente novas classes precisam ser criadas
          para implementar os novos tipos de
          documentos. Assim, o trabalho é menor e mais
          localizado, evitando que erros de programação
          sejam inseridos na classe FilaImpressao.


Polimorfismo            ©2012 Ludimila Monjardim Casagrande   15
Classes Abstratas

     Vimos no exemplo das classes de figuras
         geométricas, que a classe Figura implementa o
         método calcularArea, porém o método somente
         retorna 0 e não realiza nenhum cálculo.
     Isso foi feito para que a classe base Figura
         definisse o comportamento padrão para toda a
         hierarquia de classes de figuras geométricas,
         assim todos os objetos das classes derivadas
         podem ser tratados da mesma maneira (pelo
         polimorfismo).

Polimorfismo           ©2012 Ludimila Monjardim Casagrande   16
Classes Abstratas

      Uma outra maneira de implementar o
          comportamento padrão para toda uma
          hierarquia de classes é fazendo com que a
          classe base seja uma classe abstrata.
      Uma classe abstrata é uma classe que não
          pode ser instanciada, isto é, nenhum objeto
          daquela classe pode ser criado.
      Uma classe abstrata serve apenas para definir
          um comportamento comum que todas as
          classes derivadas devem seguir.

Polimorfismo            ©2012 Ludimila Monjardim Casagrande   17
Classes Abstratas

      Para alterar a classe Figura e torná-la abstrata,
          basta acrescentar a palavra-chave do Java
          abstract na sua declaração:
          public abstract class Figura {
             public double calcularArea( ) {
                 return 0;
             }
          }




Polimorfismo               ©2012 Ludimila Monjardim Casagrande   18
Classes Abstratas

      Desse modo, nenhum objeto da classe Figura
          pode ser criado e a linha abaixo causará um
          erro de compilação:
           Figura f = new Figura( );




Polimorfismo              ©2012 Ludimila Monjardim Casagrande   19
Métodos Abstratos

      O Java permite que métodos sejam definidos
          como abstratos e, portanto, sem nenhuma
          implementação.
      Para criar um método abstrato, usamos a
          palavra-chave abstract na assinatura do método
          e omitimos o seu corpo (já que não há
          implementação):
          public abstract class Figura {
             public abstract double calcularArea( );
          }
Polimorfismo               ©2012 Ludimila Monjardim Casagrande   20
Regras sobre Classes Abstratas

      Toda classe derivada de uma classe abstrata
          deve obrigatoriamente implementar os métodos
          abstratos da superclasse, caso contrário, um
          erro de compilação é gerado.
      Uma classe que tenha um ou mais métodos
          abstratos deve ser obrigatoriamente definida
          como abstrata, caso contrário um erro de
          compilação é gerado.



Polimorfismo            ©2012 Ludimila Monjardim Casagrande   21
Regras sobre Classes Abstratas

      Uma classe abstrata pode conter métodos não
          abstratos, isto é, métodos com implementação.
      Se esses métodos não abstratos não forem
          definidos (sobrepostos) nas subclasses, então,
          quando um objeto da subclasse realizar a
          chamada a um desses métodos, o código
          contido na classe abstrata será executado
          (devido à herança).



Polimorfismo            ©2012 Ludimila Monjardim Casagrande   22
Exemplo
  public abstract class Figura {
    public abstract double calcularArea( );
    public void imprimeArea( ) {
       System.out.println(calcularArea( ));
    }
  }
  public class Principal {
      public static void main(String[] args) {
         Quadrado q = new Quadrado(4);
         Circulo c = new Circulo(2);
         System.out.print("Área da Figura 1 é: ");
         q.imprimeArea( );
         System.out.print("Área da Figura 2 é: ");
         c.imprimeArea( );
      }
  }
Polimorfismo                 ©2012 Ludimila Monjardim Casagrande   23
Bibliografia Sugerida

      Java: Como programar
          Autores: H. M. Deitel e P. J. Deitel
          Editora: Pearson – 6a Edição

      Complete Java 2 Certification
          Study Guide
          Sybex




Polimorfismo             ©2012 Ludimila Monjardim Casagrande   24

Weitere ähnliche Inhalte

Was ist angesagt?

Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosIgor Takenami
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismoArthur Emanuel
 
JAVA - ENCAPSULAMENTO
JAVA - ENCAPSULAMENTOJAVA - ENCAPSULAMENTO
JAVA - ENCAPSULAMENTOAndré Victor
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosLudimila Monjardim Casagrande
 
Polimorfismo java
Polimorfismo javaPolimorfismo java
Polimorfismo javaFAFICA
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Daniel Brandão
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0César Augusto Pessôa
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)Armando Daniel
 
Comandos DDL para o MySQL
Comandos DDL para o MySQLComandos DDL para o MySQL
Comandos DDL para o MySQLArley Rodrigues
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaDaniel Brandão
 

Was ist angesagt? (20)

Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
 
POO - 06 - Encapsulamento
POO - 06 - EncapsulamentoPOO - 06 - Encapsulamento
POO - 06 - Encapsulamento
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Java: Heranca e polimorfismo
Java: Heranca e polimorfismoJava: Heranca e polimorfismo
Java: Heranca e polimorfismo
 
JAVA - ENCAPSULAMENTO
JAVA - ENCAPSULAMENTOJAVA - ENCAPSULAMENTO
JAVA - ENCAPSULAMENTO
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a ObjetosPOO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
POO - 02 - Fundamentos da Linguagem Java e da Orientação a Objetos
 
Polimorfismo java
Polimorfismo javaPolimorfismo java
Polimorfismo java
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
 
Comandos DDL para o MySQL
Comandos DDL para o MySQLComandos DDL para o MySQL
Comandos DDL para o MySQL
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 

Andere mochten auch

UML: Níveis de visibilidade UML x Java
UML: Níveis de visibilidade UML x JavaUML: Níveis de visibilidade UML x Java
UML: Níveis de visibilidade UML x JavaRogério Araújo
 
Polimorfismo em java
Polimorfismo em javaPolimorfismo em java
Polimorfismo em javaManoel Afonso
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
Polimorfismo
PolimorfismoPolimorfismo
PolimorfismoCaveiras
 
Herança e polimorfismo em Java
Herança e polimorfismo em Java Herança e polimorfismo em Java
Herança e polimorfismo em Java Evandro Júnior
 
Java one
Java oneJava one
Java oneIsmael
 
Polimorfismo en JAVA
Polimorfismo en JAVAPolimorfismo en JAVA
Polimorfismo en JAVAByron David
 
POO - Aula 13 - Classe Abstrata e Interface
POO - Aula 13 - Classe Abstrata e InterfacePOO - Aula 13 - Classe Abstrata e Interface
POO - Aula 13 - Classe Abstrata e InterfaceFelipe J. R. Vieira
 
3 unidade eng economica
3 unidade eng economica3 unidade eng economica
3 unidade eng economicaMoises Souza
 
Curso Java #05 - Heranca, Polimorfismo e Classe abstratas
Curso Java #05 - Heranca, Polimorfismo e Classe abstratasCurso Java #05 - Heranca, Polimorfismo e Classe abstratas
Curso Java #05 - Heranca, Polimorfismo e Classe abstratasRenato Sousa
 
POO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de ClassePOO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de ClasseFelipe J. R. Vieira
 
Polimorfismos Geneticos
Polimorfismos GeneticosPolimorfismos Geneticos
Polimorfismos Geneticosmauroberta
 

Andere mochten auch (19)

UML: Níveis de visibilidade UML x Java
UML: Níveis de visibilidade UML x JavaUML: Níveis de visibilidade UML x Java
UML: Níveis de visibilidade UML x Java
 
Polimorfismo em java
Polimorfismo em javaPolimorfismo em java
Polimorfismo em java
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Herança e polimorfismo em Java
Herança e polimorfismo em Java Herança e polimorfismo em Java
Herança e polimorfismo em Java
 
Java one
Java oneJava one
Java one
 
Polimorfismo en JAVA
Polimorfismo en JAVAPolimorfismo en JAVA
Polimorfismo en JAVA
 
Interfaces e polimorfismo
Interfaces e polimorfismoInterfaces e polimorfismo
Interfaces e polimorfismo
 
Erros comuns em java
Erros comuns em javaErros comuns em java
Erros comuns em java
 
POO - Aula 13 - Classe Abstrata e Interface
POO - Aula 13 - Classe Abstrata e InterfacePOO - Aula 13 - Classe Abstrata e Interface
POO - Aula 13 - Classe Abstrata e Interface
 
3 unidade eng economica
3 unidade eng economica3 unidade eng economica
3 unidade eng economica
 
Curso Java #05 - Heranca, Polimorfismo e Classe abstratas
Curso Java #05 - Heranca, Polimorfismo e Classe abstratasCurso Java #05 - Heranca, Polimorfismo e Classe abstratas
Curso Java #05 - Heranca, Polimorfismo e Classe abstratas
 
Curso de JSP
Curso de JSPCurso de JSP
Curso de JSP
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
POO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de ClassePOO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de Classe
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
POO - Aula 10 - Polimorfismo
POO - Aula 10 - PolimorfismoPOO - Aula 10 - Polimorfismo
POO - Aula 10 - Polimorfismo
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Polimorfismos Geneticos
Polimorfismos GeneticosPolimorfismos Geneticos
Polimorfismos Geneticos
 

Ähnlich wie POO - 16 - Polimorfismo

Ähnlich wie POO - 16 - Polimorfismo (10)

Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
05 poo-ii
05   poo-ii05   poo-ii
05 poo-ii
 
Refactoring
RefactoringRefactoring
Refactoring
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
Fj pratica04
Fj pratica04Fj pratica04
Fj pratica04
 
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instânciasSemana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
Semana 10: Encapsulação, cópia de instâncias, igualdade de instâncias
 
Programação OO - Java
Programação OO - JavaProgramação OO - Java
Programação OO - Java
 
Introdução ao C#
Introdução ao C#Introdução ao C#
Introdução ao C#
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 

Mehr von Ludimila Monjardim Casagrande (14)

Gerenciamento Ágil de Projetos com Scrum
Gerenciamento Ágil de Projetos com ScrumGerenciamento Ágil de Projetos com Scrum
Gerenciamento Ágil de Projetos com Scrum
 
POO - 23 - Coleções da API do Java
POO -  23 - Coleções da API do Java POO -  23 - Coleções da API do Java
POO - 23 - Coleções da API do Java
 
POO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em JavaPOO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em Java
 
POO - 21 - Java e Banco de Dados
POO - 21 - Java e Banco de DadosPOO - 21 - Java e Banco de Dados
POO - 21 - Java e Banco de Dados
 
POO - 20 - Wrapper Classes
POO - 20 - Wrapper ClassesPOO - 20 - Wrapper Classes
POO - 20 - Wrapper Classes
 
POO - 15 - Passagem de Argumentos
POO - 15 - Passagem de ArgumentosPOO - 15 - Passagem de Argumentos
POO - 15 - Passagem de Argumentos
 
POO - 12 - A Classe Object
POO - 12 - A Classe ObjectPOO - 12 - A Classe Object
POO - 12 - A Classe Object
 
POO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em JavaPOO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em Java
 
POO - 08 - Prática de Encapsulamento
POO - 08 - Prática de EncapsulamentoPOO - 08 - Prática de Encapsulamento
POO - 08 - Prática de Encapsulamento
 
POO - 07 - Operadores do Java
POO - 07 - Operadores do  JavaPOO - 07 - Operadores do  Java
POO - 07 - Operadores do Java
 
POO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de DesenvolvimentoPOO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de Desenvolvimento
 
POO - 04 - Variávies em Java
POO - 04 - Variávies em JavaPOO - 04 - Variávies em Java
POO - 04 - Variávies em Java
 
POO - 24 - Classes Básicas do Java - Datas
POO - 24 - Classes Básicas do Java - DatasPOO - 24 - Classes Básicas do Java - Datas
POO - 24 - Classes Básicas do Java - Datas
 
POO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em JavaPOO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em Java
 

POO - 16 - Polimorfismo

  • 1. Programação Orientada a Objetos Polimorfismo e Classes Abstratas Ludimila Monjardim Casagrande 2012
  • 2. Polimorfismo e Herança  O mecanismo de herança permite a criação de classes a partir de outras já existentes desde que exista a relação “é um” entre a subclasse e a superclasse.  Dessa forma é possível criar classes mais especializadas a partir de uma classe genérica.  A relação “é um” entre classes também permite a existência de outra característica fundamental das linguagens OO que é o polimorfismo. Polimorfismo ©2012 Ludimila Monjardim Casagrande 2
  • 3. Polimorfismo e Herança Uma Figura Geométrica Figura é uma generalização de múltiplas formas Quadrado é uma Círculo é uma Figura Geométrica Figura Geométrica Quadrado Círculo Polimorfismo ©2012 Ludimila Monjardim Casagrande 3
  • 4. Polimorfismo  Polimorfismo, que significa “múltiplas formas”, permite a manipulação de instâncias de classes que herdam de uma mesma classe ancestral de forma unificada:  Assim, é possível escrever métodos que recebam instâncias de uma classe C, e os mesmos métodos serão capazes de processar instâncias de qualquer classe que herde de C, já que qualquer classe que herde de C “é um” C. Polimorfismo ©2012 Ludimila Monjardim Casagrande 4
  • 5. Exemplo de Polimorfismo public class VetorFiguras{ private Figura[] figuras = new Figura[10]; private int totalDeElementos; public boolean contem(Figura fig) { boolean resultado = false; for(int i = 0; i < this.totalDeElementos; i++){ if(fig.equals(this.figuras[i])){ resultado = true; Quadrado q = new Quadrado(2.0); break; Circulo c = new Circulo(2.0); } } if(vetor.contem(q)) return resultado; ... } if(vetor.contem(c)) } ... Polimorfismo ©2012 Ludimila Monjardim Casagrande 5
  • 6. Exemplo de Polimorfismo public class Vetor { private Object[ ] objetos = new Object[10]; private int totalDeElementos; public boolean contem(Object obj) { boolean resultado = false; for(int i = 0; i < this.totalDeElementos; i++){ if(obj.equals(this.objetos[i])){ resultado = true; break; } } return resultado; } } Polimorfismo ©2012 Ludimila Monjardim Casagrande 6
  • 7. Polimorfismo  Polimorfismo é o princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma identificação (assinatura) mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referência a um objeto do tipo da superclasse. Polimorfismo ©2012 Ludimila Monjardim Casagrande 7
  • 8. Polimorfismo  Em outras palavras, polimorfismo é a capacidade de se enviar a mesma mensagem a objetos de classes diferentes, por meio de um mesmo tipo base comum a estes objetos. Polimorfismo ©2012 Ludimila Monjardim Casagrande 8
  • 9. Exemplo de Polimorfismo public class Figura { public double calcularArea( ) { return 0; } } public class Quadrado extends Figura {  Herança double lado; public Quadrado(double lado) { this.lado = lado; } public double calcularArea( ) {  Sobreposição do método da double area = 0; superclasse area = lado * lado; return area; } } Polimorfismo ©2012 Ludimila Monjardim Casagrande 9
  • 10. Exemplo de Polimorfismo public class Circulo extends Figura {  Herança double raio; public Circulo (double raio) { this.raio = raio; } public double calcularArea( ) {  Sobreposição do método da double area = 0; superclasse. area = 3.14 * raio * raio; return area; } } Polimorfismo ©2012 Ludimila Monjardim Casagrande 10
  • 11. Exemplo de Polimorfismo public class Principal { public static void main(String[ ] args) { Figura f1 = new Quadrado(4); Figura f2 = new Circulo(2); System.out.println("Área da Figura 1 é: "  Comportamento + f1.calcularArea( ) + "n" polimórfico. + "Área da Figura 2 é: " + f2.calcularArea( )); } Um mesmo tipo base Figura, por meio das variáveis f1 e f2, é utilizado } para enviar uma mesma mensagem calcularArea para objetos de tipos diferentes Quadrado e Circulo e o comportamento executado será distinto. Polimorfismo ©2012 Ludimila Monjardim Casagrande 11
  • 12. Exemplo de Polimorfismo public class VetorFiguras { private Figura[] figuras = new Figura[10]; private int totalDeElementos; public double calcularAreaTotal() { double areaTotal = 0; for (int i = 0; i < figuras.length; i++) { if (figuras[i] != null) { areaTotal = areaTotal + figuras[i].calcularArea();  Comportamento } polimórfico. } return areaTotal; } } Polimorfismo ©2012 Ludimila Monjardim Casagrande 12
  • 13. Outro Exemplo A fila de impressão FilaImpressao Documento armazena objetos imprime() genéricos do tipo Documento imprime() A mensagem transmitida é: imprima todos os Documentos da fila DocWord DocExcel DocPDF Cada tipo de documento conhece seus detalhes de imprime() imprime() imprime() impressão Polimorfismo ©2012 Ludimila Monjardim Casagrande 13
  • 14. Vantagens do Polimorfismo  Já vimos que o grande benefício do polimorfismo é permitir que vários objetos de um mesmo tipo base sejam tratados da mesma maneira.  Uma outra vantagem é permitir aumentar um software de maneira mais controlada, mais localizada. Polimorfismo ©2012 Ludimila Monjardim Casagrande 14
  • 15. Vantagens do Polimorfismo  Considere o exemplo da fila de impressão. Se quisermos incrementar o software e permitir que novos tipos de documentos sejam impressos, a classe FilaImpressao não precisa ser alterada.  Somente novas classes precisam ser criadas para implementar os novos tipos de documentos. Assim, o trabalho é menor e mais localizado, evitando que erros de programação sejam inseridos na classe FilaImpressao. Polimorfismo ©2012 Ludimila Monjardim Casagrande 15
  • 16. Classes Abstratas  Vimos no exemplo das classes de figuras geométricas, que a classe Figura implementa o método calcularArea, porém o método somente retorna 0 e não realiza nenhum cálculo.  Isso foi feito para que a classe base Figura definisse o comportamento padrão para toda a hierarquia de classes de figuras geométricas, assim todos os objetos das classes derivadas podem ser tratados da mesma maneira (pelo polimorfismo). Polimorfismo ©2012 Ludimila Monjardim Casagrande 16
  • 17. Classes Abstratas  Uma outra maneira de implementar o comportamento padrão para toda uma hierarquia de classes é fazendo com que a classe base seja uma classe abstrata.  Uma classe abstrata é uma classe que não pode ser instanciada, isto é, nenhum objeto daquela classe pode ser criado.  Uma classe abstrata serve apenas para definir um comportamento comum que todas as classes derivadas devem seguir. Polimorfismo ©2012 Ludimila Monjardim Casagrande 17
  • 18. Classes Abstratas  Para alterar a classe Figura e torná-la abstrata, basta acrescentar a palavra-chave do Java abstract na sua declaração: public abstract class Figura { public double calcularArea( ) { return 0; } } Polimorfismo ©2012 Ludimila Monjardim Casagrande 18
  • 19. Classes Abstratas  Desse modo, nenhum objeto da classe Figura pode ser criado e a linha abaixo causará um erro de compilação: Figura f = new Figura( ); Polimorfismo ©2012 Ludimila Monjardim Casagrande 19
  • 20. Métodos Abstratos  O Java permite que métodos sejam definidos como abstratos e, portanto, sem nenhuma implementação.  Para criar um método abstrato, usamos a palavra-chave abstract na assinatura do método e omitimos o seu corpo (já que não há implementação): public abstract class Figura { public abstract double calcularArea( ); } Polimorfismo ©2012 Ludimila Monjardim Casagrande 20
  • 21. Regras sobre Classes Abstratas  Toda classe derivada de uma classe abstrata deve obrigatoriamente implementar os métodos abstratos da superclasse, caso contrário, um erro de compilação é gerado.  Uma classe que tenha um ou mais métodos abstratos deve ser obrigatoriamente definida como abstrata, caso contrário um erro de compilação é gerado. Polimorfismo ©2012 Ludimila Monjardim Casagrande 21
  • 22. Regras sobre Classes Abstratas  Uma classe abstrata pode conter métodos não abstratos, isto é, métodos com implementação.  Se esses métodos não abstratos não forem definidos (sobrepostos) nas subclasses, então, quando um objeto da subclasse realizar a chamada a um desses métodos, o código contido na classe abstrata será executado (devido à herança). Polimorfismo ©2012 Ludimila Monjardim Casagrande 22
  • 23. Exemplo public abstract class Figura { public abstract double calcularArea( ); public void imprimeArea( ) { System.out.println(calcularArea( )); } } public class Principal { public static void main(String[] args) { Quadrado q = new Quadrado(4); Circulo c = new Circulo(2); System.out.print("Área da Figura 1 é: "); q.imprimeArea( ); System.out.print("Área da Figura 2 é: "); c.imprimeArea( ); } } Polimorfismo ©2012 Ludimila Monjardim Casagrande 23
  • 24. Bibliografia Sugerida  Java: Como programar Autores: H. M. Deitel e P. J. Deitel Editora: Pearson – 6a Edição  Complete Java 2 Certification Study Guide Sybex Polimorfismo ©2012 Ludimila Monjardim Casagrande 24