Universidade Federal de Sergipe
Departamento de Computação
Programação Orientada a Objetos




                                 Polimorfismo

Felipe J. R. Vieira




        Última Atualização em Novembro de 2011
Recapitulando




         103403 – Programação Orientada a Objetos   2
Sumário




  ➢
      Polimorfismo.




              103403 – Programação Orientada a Objetos   3
Polimorfismo


  ➢ Na herança, vimos que todo Gerente é um
  Funcionario, pois é uma extensão deste.

  ➢
   Podemos nos referir a um Gerente como sendo
  um Funcionario.

  ➢
    Pois Gerente é um Funcionario. Essa é a
  semântica da herança.



           103403 – Programação Orientada a Objetos   4
Polimorfismo


  ➢ Na herança, vimos que todo Gerente é um
  Funcionario, pois é uma extensão deste.

  ➢
   Podemos nos referir a um Gerente como sendo
  um Funcionario.

  ➢
    Pois Gerente é um Funcionario. Essa é a
  semântica da herança.



           103403 – Programação Orientada a Objetos   5
Polimorfismo


  ➢ Polimorfismo é a capacidade de um objeto
  poder ser referenciado de várias formas;

  ➢
   O polimorfismo permite programar no geral
  em vez de programar no específico.




           103403 – Programação Orientada a Objetos   6
Polimorfismo

  ➢ É a capacidade de tipos mais abstratos
  representarem comportamentos de tipos mais
  específicos;

  ➢  Com polimorfismo, podemos projetar e
  implementar sistemas que são facilmente
  extensíveis – novas classes podem ser
  adicionadas a partes gerais do programa com
  pouca ou nenhuma modificação, contanto que
  as novas classes façam parte da hierarquia de
  herança     que     o   programa     processa
  genericamente.

           103403 – Programação Orientada a Objetos   7
Polimorfismo


  ➢A ideia de polimorfismo só tem sentindo com a
  existência do paradigma de herança;

  ➢
     Consiste na possibilidade de que uma
  referência a objetos de uma classe possa se
  conectar também com objetos descendentes
  desta.




           103403 – Programação Orientada a Objetos   8
Polimorfismo




       Funcionário                                   Gerente




          103403 – Programação Orientada a Objetos             9
Polimorfismo



  ➢ Deve-se deixar claro que podemos acessar
  apenas as operações pertencentes a classe
  associada a referência. O resto das operações
  do objeto não são acessíveis através desta
  referência.




           103403 – Programação Orientada a Objetos   10
Outros Tipos de Polimorfismo

   ●
     Tipo Genérico - ao definir um elemento(que pode ser uma
   classe, um método ou alguma outra estrutura da linguagem),
   a definição do tipo sozinha ela é incompleta, ela precisa
   parametrizar este tipo, ou seja, teoricamente não existiria o
   tipo sozinho, o que sim existe e o tipo de alguma coisa de
   alguma coisa;
       public class Agenda {

           public static void main(String[] args){
               ArrayList<Pessoa> objetos = new ArrayList<Pessoa>();
               Objetos.add(new Empregado());
               Objetos.add(new Pessoa());
           }
       }




                                  Polimorfismo                        11
Tipos de Polimorfismo Estáticos

   ●
    Polimorfismo estático normalmente é entendido como uma
   característica da linguagem e não como uma forma de
   polimorfismo.

   ●Sobrecarga - é a capacidade de poder definir dois, ou mais
   métodos, numa mesma classe com o mesmo nome;
       public class Agenda {

           public int calculaIdade (int ano , int mes, int dia);
           public int calculaIdade ( Date data ) ;
           public int calculaIdade ( Calendar data ) ;

       }




                                       Polimorfismo                12
Tipos de Polimorfismo Estáticos
   ● Sobrescrita - é a capacidade de poder redefinir a
   implementação de um método que já foi definido e
   implementado em uma classe superior na hierarquia de
   herança.
           public class Somador {
               public int calculaSoma ( int inicio, int fim ){
                     int soma = 0 ;
                     for ( int i = inicio ; i <= fim ; i++ ){
                           soma += i;
                     }
                     return soma;
               }
           }
           public class SomadorInteligente extends Somador {
               public int calculaSoma ( int inicio, int fim ){
                     int umAteInicio = inicio ( inicio+ 1 ) / 2 ;
                     int umAteFim = fim ( fim+ 1 ) / 2 ;
                     return umAteFim – umAteInicio;
               }
           }

                               Polimorfismo                         13
Tipos de Polimorfismo Estáticos

   ●Sombreamento - é a capacidade de poder definir duas, ou
   mais, variáveis com o mesmo nome em escopos diferentes;
       public class Teste {
           String nome; // variável no escopo “classe”
           public void setName ( String nome ){ // variável no escopo “método”
                 this .nome = nome;
           }
       }

   ● Auto-boxing e Auto-unboxing - Em algumas situações é
   necessário converter valores primitivos para objetos. Isso é
   conhecido como boxing (colocar em caixas). O processo
   inverso é chamado unboxing (retirar das caixas). Auto-boxing
   e Auto-umboxing acontece quando próprio compilador faz
   essa operação.



                                    Polimorfismo                                 14
Referências


  ➢   Java: Como Programar 6ª Edição.

  ➢   Material da Caelum.




              103403 – Programação Orientada a Objetos   15

POO - Aula 10 - Polimorfismo

  • 1.
    Universidade Federal deSergipe Departamento de Computação Programação Orientada a Objetos Polimorfismo Felipe J. R. Vieira Última Atualização em Novembro de 2011
  • 2.
    Recapitulando 103403 – Programação Orientada a Objetos 2
  • 3.
    Sumário ➢ Polimorfismo. 103403 – Programação Orientada a Objetos 3
  • 4.
    Polimorfismo ➢Na herança, vimos que todo Gerente é um Funcionario, pois é uma extensão deste. ➢ Podemos nos referir a um Gerente como sendo um Funcionario. ➢ Pois Gerente é um Funcionario. Essa é a semântica da herança. 103403 – Programação Orientada a Objetos 4
  • 5.
    Polimorfismo ➢Na herança, vimos que todo Gerente é um Funcionario, pois é uma extensão deste. ➢ Podemos nos referir a um Gerente como sendo um Funcionario. ➢ Pois Gerente é um Funcionario. Essa é a semântica da herança. 103403 – Programação Orientada a Objetos 5
  • 6.
    Polimorfismo ➢Polimorfismo é a capacidade de um objeto poder ser referenciado de várias formas; ➢ O polimorfismo permite programar no geral em vez de programar no específico. 103403 – Programação Orientada a Objetos 6
  • 7.
    Polimorfismo ➢É a capacidade de tipos mais abstratos representarem comportamentos de tipos mais específicos; ➢ Com polimorfismo, podemos projetar e implementar sistemas que são facilmente extensíveis – novas classes podem ser adicionadas a partes gerais do programa com pouca ou nenhuma modificação, contanto que as novas classes façam parte da hierarquia de herança que o programa processa genericamente. 103403 – Programação Orientada a Objetos 7
  • 8.
    Polimorfismo ➢Aideia de polimorfismo só tem sentindo com a existência do paradigma de herança; ➢ Consiste na possibilidade de que uma referência a objetos de uma classe possa se conectar também com objetos descendentes desta. 103403 – Programação Orientada a Objetos 8
  • 9.
    Polimorfismo Funcionário Gerente 103403 – Programação Orientada a Objetos 9
  • 10.
    Polimorfismo ➢Deve-se deixar claro que podemos acessar apenas as operações pertencentes a classe associada a referência. O resto das operações do objeto não são acessíveis através desta referência. 103403 – Programação Orientada a Objetos 10
  • 11.
    Outros Tipos dePolimorfismo ● Tipo Genérico - ao definir um elemento(que pode ser uma classe, um método ou alguma outra estrutura da linguagem), a definição do tipo sozinha ela é incompleta, ela precisa parametrizar este tipo, ou seja, teoricamente não existiria o tipo sozinho, o que sim existe e o tipo de alguma coisa de alguma coisa; public class Agenda { public static void main(String[] args){ ArrayList<Pessoa> objetos = new ArrayList<Pessoa>(); Objetos.add(new Empregado()); Objetos.add(new Pessoa()); } } Polimorfismo 11
  • 12.
    Tipos de PolimorfismoEstáticos ● Polimorfismo estático normalmente é entendido como uma característica da linguagem e não como uma forma de polimorfismo. ●Sobrecarga - é a capacidade de poder definir dois, ou mais métodos, numa mesma classe com o mesmo nome; public class Agenda { public int calculaIdade (int ano , int mes, int dia); public int calculaIdade ( Date data ) ; public int calculaIdade ( Calendar data ) ; } Polimorfismo 12
  • 13.
    Tipos de PolimorfismoEstáticos ● Sobrescrita - é a capacidade de poder redefinir a implementação de um método que já foi definido e implementado em uma classe superior na hierarquia de herança. public class Somador { public int calculaSoma ( int inicio, int fim ){ int soma = 0 ; for ( int i = inicio ; i <= fim ; i++ ){ soma += i; } return soma; } } public class SomadorInteligente extends Somador { public int calculaSoma ( int inicio, int fim ){ int umAteInicio = inicio ( inicio+ 1 ) / 2 ; int umAteFim = fim ( fim+ 1 ) / 2 ; return umAteFim – umAteInicio; } } Polimorfismo 13
  • 14.
    Tipos de PolimorfismoEstáticos ●Sombreamento - é a capacidade de poder definir duas, ou mais, variáveis com o mesmo nome em escopos diferentes; public class Teste { String nome; // variável no escopo “classe” public void setName ( String nome ){ // variável no escopo “método” this .nome = nome; } } ● Auto-boxing e Auto-unboxing - Em algumas situações é necessário converter valores primitivos para objetos. Isso é conhecido como boxing (colocar em caixas). O processo inverso é chamado unboxing (retirar das caixas). Auto-boxing e Auto-umboxing acontece quando próprio compilador faz essa operação. Polimorfismo 14
  • 15.
    Referências ➢ Java: Como Programar 6ª Edição. ➢ Material da Caelum. 103403 – Programação Orientada a Objetos 15