SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca




              Suporte ` Programa¸˜o Orientada a Objetos
                      a         ca
                                   Cap´
                                      ıtulo 12 - Livro do Sebesta


                         Helio Henrique L. C. Monte-Alto
          Disciplina: Paradigma de Programa¸˜o Imperativa e Orientada
                                             ca
                                    a Objetos


                                               2012
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca




T´picos
 o


       1 Introdu¸˜o
                ca

       2 Quest˜es de projeto
              o
               Exclusividade de objetos
               Subclasses s˜o subtipos?
                           a
               Checagem de tipo e polimorfismo
               Heran¸a unica e m´ltipla
                     c ´         u
               Aloca¸˜o e desaloca¸˜o de objetos
                    ca             ca

       3 Implementa¸˜o de Contru¸˜es Orientadas a Objeto
                   ca           co
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Introdu¸˜o
         ca




Introdu¸˜o
       ca



               Uma linguagem OO deve prover suporte a trˆs caracter´
                                                        e          ısticas:

                     Tipos abstratos de dados
                     Heran¸a
                          c
                     Vincula¸˜o dinˆmica de chamadas de m´todos
                            ca     a                     e
               Primeira linguagem com suporte a OO: SIMULA 67
               Linguagem base para uma linguagem puramente orientada a
               objetos: Smalltalk
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o




Quest˜es de projeto
     o


              Exclusividade de objetos
              Subclasses s˜o subtipos?
                          a
              Checagem de tipo e Polimorfismo
              Heran¸a unica e m´ltipla
                   c ´         u
              Aloca¸˜o e desaloca¸˜o de objetos
                   ca            ca
              Vincula¸˜o dinˆmica e est´tica
                     ca     a          a
              Classes aninhadas
              Inicializa¸˜o de objetos
                        ca
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Exclusividade de objetos


Exclusividade de objetos

      Vantagem
      Elegˆncia e uniformidade da linguagem e seu uso.
          a
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Exclusividade de objetos


Exclusividade de objetos

      Vantagem
      Elegˆncia e uniformidade da linguagem e seu uso.
          a

      Desvantagem
          Opera¸˜es simples s˜o feitas por meio do processo de troca de
               co            a
          mensagens
              Mais lento do que no modelo imperativo
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Exclusividade de objetos


Exclusividade de objetos

      Vantagem
      Elegˆncia e uniformidade da linguagem e seu uso.
          a

      Desvantagem
          Opera¸˜es simples s˜o feitas por meio do processo de troca de
               co            a
          mensagens
              Mais lento do que no modelo imperativo

      Alternativa
           Manter o modelo imperativo e adicionar o modelo OO
              Pode deixar a linguagem confusa =⇒ Objetos e literais
              misturados
              Necessidade de wrapper classes
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Exclusividade de objetos


Exclusividade de objetos - Exemplos



      Smalltalk e Ruby
          Tudo ´ objeto.
                 e
              As vari´veis n˜o tˆm tipo (typeless): todas s˜o referˆncias a
                     a      a e                            a       e
              objetos.
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Exclusividade de objetos


Exclusividade de objetos - Exemplos



      Smalltalk e Ruby
          Tudo ´ objeto.
                 e
              As vari´veis n˜o tˆm tipo (typeless): todas s˜o referˆncias a
                     a      a e                            a       e
              objetos.

      C++
         Mant´m todas as constru¸˜es e tipos do C
             e                  co
              Retrocompatibilidade com C ⇒ Linguagem multiparadigma
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Exclusividade de objetos


Exclusividade de objetos - Exemplos



      Java
              Mant´m tipos escalares primitivos (int, boolean, char, etc)
                  e
              Motivo: eficiˆncia
                          e
              Problema: muitas classes, como ArrayList, podem conter
              apenas objetos
              Necess´rio o uso de wrappers
                    a
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Subclasses s˜o subtipos?
                 a


Subclasses s˜o subtipos?
            a




              A rela¸˜o entre uma classe filha e uma classe m˜e sempre ´
                    ca                                      a         e
                          a     ca   ´
              equivalente ` rela¸˜o ”E-UM”?
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Subclasses s˜o subtipos?
                 a


Subclasses s˜o subtipos?
            a




              A rela¸˜o entre uma classe filha e uma classe m˜e sempre ´
                    ca                                      a         e
                          a     ca   ´
              equivalente ` rela¸˜o ”E-UM”?
              Objetos da classe filha devem possuir a interface da classe m˜e
                                                                          a
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Subclasses s˜o subtipos?
                 a


Subclasses s˜o subtipos?
            a




              A rela¸˜o entre uma classe filha e uma classe m˜e sempre ´
                    ca                                      a         e
                          a     ca   ´
              equivalente ` rela¸˜o ”E-UM”?
              Objetos da classe filha devem possuir a interface da classe m˜e
                                                                          a
              Um objeto da classe filha sempre pode ser substitu´ por um
                                                               ıdo
              objeto da classe m˜e sem causar um erro de tipo
                                a
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Subclasses s˜o subtipos?
                 a


Subclasses s˜o subtipos?
            a
      Rela¸˜o dos modos como uma subclasse pode diferir de sua
          ca
      superclasse:

           Mudan¸a
                c                                Deixa de ser sub-
                                                 tipo?
           M´todos p´blicos adicionais
             e        u                            ˜
                                                 NAO
           Menos m´todos (oculta¸˜o de
                       e               ca        SIM
           m´todos p´blicos da superclasse)
             e        u
           Tipos dos parˆmetros de m´todos
                           a              e      SIM
           p´blicos diferentes
            u
           Tipo do retorno de m´todos p´blicos
                                 e       u       SIM
           diferentes
           Corpo (implementa¸˜o) de m´todos
                               ca         e       ˜
                                                 NAO
           diferentes
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Subclasses s˜o subtipos?
                 a


Subclasses s˜o subtipos? - Exemplos
            a


      Smalltalk
          Subclasses herdam todos os membros da superclasse, e n˜o
                                                                a
          podem ocultar membros da superclasse
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Subclasses s˜o subtipos?
                 a


Subclasses s˜o subtipos? - Exemplos
            a


      Smalltalk
          Subclasses herdam todos os membros da superclasse, e n˜o
                                                                a
          podem ocultar membros da superclasse
              Logo, toda subclasse ´ subtipo
                                   e
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Subclasses s˜o subtipos?
                 a


Subclasses s˜o subtipos? - Exemplos
            a


      Smalltalk
          Subclasses herdam todos os membros da superclasse, e n˜o
                                                                a
          podem ocultar membros da superclasse
              Logo, toda subclasse ´ subtipo
                                   e

      C++
         Dois modos de deriva¸˜o: public e private
                             ca
              Deriva¸˜o privada esconde membros p´blicos da superclasse
                    ca                           u
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Subclasses s˜o subtipos?
                 a


Subclasses s˜o subtipos? - Exemplos
            a


      Smalltalk
          Subclasses herdam todos os membros da superclasse, e n˜o
                                                                a
          podem ocultar membros da superclasse
              Logo, toda subclasse ´ subtipo
                                   e

      C++
         Dois modos de deriva¸˜o: public e private
                             ca
              Deriva¸˜o privada esconde membros p´blicos da superclasse
                    ca                           u
              Logo, nem toda subclasse ´ subtipo
                                       e
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Subclasses s˜o subtipos?
                 a


Subclasses s˜o subtipos? - Exemplos
            a

      Java
              N˜o ´ poss´ ocultar membros da superclasse
               a e      ıvel
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Subclasses s˜o subtipos?
                 a


Subclasses s˜o subtipos? - Exemplos
            a

      Java
              N˜o ´ poss´ ocultar membros da superclasse
               a e      ıvel
              M´todos com mesmo nome mas tipos dos parˆmetros e tipo
                e                                         a
              de retorno diferentes ⇒ m´todos sobrecarregados
                                       e
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Subclasses s˜o subtipos?
                 a


Subclasses s˜o subtipos? - Exemplos
            a

      Java
              N˜o ´ poss´ ocultar membros da superclasse
               a e      ıvel
              M´todos com mesmo nome mas tipos dos parˆmetros e tipo
                e                                         a
              de retorno diferentes ⇒ m´todos sobrecarregados
                                       e
              Logo, toda subclasse ´ subtipo
                                   e
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Subclasses s˜o subtipos?
                 a


Subclasses s˜o subtipos? - Exemplos
            a

      Java
              N˜o ´ poss´ ocultar membros da superclasse
               a e      ıvel
              M´todos com mesmo nome mas tipos dos parˆmetros e tipo
                e                                         a
              de retorno diferentes ⇒ m´todos sobrecarregados
                                       e
              Logo, toda subclasse ´ subtipo
                                   e

      Ruby
          ´
          E poss´ mudar controles de acesso de membros da
                ıvel
          superclasse
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Subclasses s˜o subtipos?
                 a


Subclasses s˜o subtipos? - Exemplos
            a

      Java
              N˜o ´ poss´ ocultar membros da superclasse
               a e      ıvel
              M´todos com mesmo nome mas tipos dos parˆmetros e tipo
                e                                         a
              de retorno diferentes ⇒ m´todos sobrecarregados
                                       e
              Logo, toda subclasse ´ subtipo
                                   e

      Ruby
          ´
          E poss´ mudar controles de acesso de membros da
                ıvel
          superclasse
              Logo ´ poss´ ocultar membros da superclasse, e portanto
                    e     ıvel
              subclasses nem sempre s˜o subtipos
                                     a
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Checagem de tipo e polimorfismo


Checagem de tipo e polimorfismo

      Polimorfismo
           Vari´vel polim´rfica: pode referenciar objetos da classe m˜e
               a           o                                        a
           e das classes descendentes
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Checagem de tipo e polimorfismo


Checagem de tipo e polimorfismo

      Polimorfismo
           Vari´vel polim´rfica: pode referenciar objetos da classe m˜e
               a           o                                        a
           e das classes descendentes
              Polimorfismo requer vincula¸˜o dinˆmica de m´todos
                                        ca     a         e
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Checagem de tipo e polimorfismo


Checagem de tipo e polimorfismo

      Polimorfismo
           Vari´vel polim´rfica: pode referenciar objetos da classe m˜e
               a           o                                        a
           e das classes descendentes
              Polimorfismo requer vincula¸˜o dinˆmica de m´todos
                                        ca     a         e
              Vincula¸˜o dinˆmica ⇒ Custo adicional em tempo de
                     ca     a
              execu¸˜o
                   ca
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Checagem de tipo e polimorfismo


Checagem de tipo e polimorfismo

      Polimorfismo
           Vari´vel polim´rfica: pode referenciar objetos da classe m˜e
               a           o                                        a
           e das classes descendentes
              Polimorfismo requer vincula¸˜o dinˆmica de m´todos
                                        ca     a         e
              Vincula¸˜o dinˆmica ⇒ Custo adicional em tempo de
                     ca     a
              execu¸˜o
                   ca

      Checagem dinˆmica de tipo
                   a
          A classe real do objeto apontado pela vari´vel n˜o pode ser
                                                    a     a
          determinada em tempo de compila¸˜oca
          Problemas:
                        Custo da checagem em tempo de execu¸˜o
                                                           ca
                        Atrasos na detec¸˜o de erros
                                        ca
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Checagem de tipo e polimorfismo


Checagem de tipo e polimorfismo - Exemplos

      Smalltalk e Ruby
          Somente vincula¸˜o dinˆmica de m´todos
                         ca     a           e
          ´
          Unica checagem de tipo: garantir que uma mensagem
          encontra o m´todo correspondente
                       e
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Checagem de tipo e polimorfismo


Checagem de tipo e polimorfismo - Exemplos

      Smalltalk e Ruby
          Somente vincula¸˜o dinˆmica de m´todos
                         ca     a           e
          ´
          Unica checagem de tipo: garantir que uma mensagem
          encontra o m´todo correspondente
                       e

      C++
         Permite vincula¸˜o dinˆmica e est´tica
                        ca     a          a
              M´todos definidos com virtual ⇒ vincula¸˜o dinˆmica
               e                                    ca     a
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Checagem de tipo e polimorfismo


Checagem de tipo e polimorfismo - Exemplos

      Smalltalk e Ruby
          Somente vincula¸˜o dinˆmica de m´todos
                         ca     a           e
          ´
          Unica checagem de tipo: garantir que uma mensagem
          encontra o m´todo correspondente
                       e

      C++
         Permite vincula¸˜o dinˆmica e est´tica
                        ca     a          a
              M´todos definidos com virtual ⇒ vincula¸˜o dinˆmica
               e                                    ca     a

      Java
              Permite vincula¸˜o dinˆmica e est´tica
                             ca     a          a
              M´todos definidos com final, static ou private ⇒
                e
              vincula¸˜o est´tica
                     ca     a
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Heran¸a unica e m´ltipla
          c ´         u


Heran¸a unica e m´ltipla
     c ´         u

              Heran¸a m´ltipla: uma classe pode herdar de mais de uma
                     c u
              classe?
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Heran¸a unica e m´ltipla
          c ´         u


Heran¸a unica e m´ltipla
     c ´         u

              Heran¸a m´ltipla: uma classe pode herdar de mais de uma
                     c u
              classe?
      Problemas
              Complexidade
                        Se duas superclasses definem o mesmo m´todo, qual deles deve ser
                                                              e
                        chamado?
                        Heran¸a compartilhada (diamante)
                              c
                        Torna o projeto do programa mais complexo: muitas dependˆncias
                                                                                e
                        no c´digo ⇒ manuten¸˜o mais dif´
                            o                 ca        ıcil
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Heran¸a unica e m´ltipla
          c ´         u


Heran¸a unica e m´ltipla
     c ´         u

              Heran¸a m´ltipla: uma classe pode herdar de mais de uma
                     c u
              classe?
      Problemas
              Complexidade
                        Se duas superclasses definem o mesmo m´todo, qual deles deve ser
                                                              e
                        chamado?
                        Heran¸a compartilhada (diamante)
                              c
                        Torna o projeto do programa mais complexo: muitas dependˆncias
                                                                                e
                        no c´digo ⇒ manuten¸˜o mais dif´
                            o                 ca        ıcil
              Eficiˆncia
                  e
                        Requer uma opera¸˜o a mais a cada chamada de m´todo
                                          ca                          e
                        Custo adicional n˜o muito alto
                                         a
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Heran¸a unica e m´ltipla
          c ´         u


Heran¸a unica e m´ltipla
     c ´         u
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Heran¸a unica e m´ltipla
          c ´         u


Heran¸a unica e m´ltipla - Exemplos
     c ´         u



      Smalltalk
      Somente heran¸a unica
                   c ´
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Heran¸a unica e m´ltipla
          c ´         u


Heran¸a unica e m´ltipla - Exemplos
     c ´         u



      Smalltalk
      Somente heran¸a unica
                   c ´

      C++
         Permite heran¸a m´ltipla
                      c   u
              Desambigua¸˜o de membros com mesmo nome ⇒ Operador
                          ca
              de resolu¸˜o de escopo (::)
                       ca
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Heran¸a unica e m´ltipla
          c ´         u


Heran¸a unica e m´ltipla - Exemplos
     c ´         u

      Java
              Somente heran¸a unica
                           c ´
              Interfaces
                        Podem ser usadas para simular heran¸a m´ltipla
                                                            c   u
                        Proveem um tipo de polimorfismo (interfaces podem ser
                        tratadas como tipos)
                        A classe deve implementar todos os m´todos da interface ⇒
                                                              e
                        Evita os problemas de m´ltipla heran¸a
                                               u            c

      Ruby
          Somente heran¸a unica
                       c ´
          M´dulos
            o
                        Permite que uma classe herde todas as fun¸oes de um m´dulo
                                                                 c˜          o
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Aloca¸˜o e desaloca¸˜o de objetos
          ca            ca


Aloca¸˜o e desaloca¸˜o de objetos
     ca            ca

      A aloca¸˜o deve ser apenas dinˆmica na heap (new), ou deve
              ca                    a
      permitir dinˆmica na pilha?
                  a
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Aloca¸˜o e desaloca¸˜o de objetos
          ca            ca


Aloca¸˜o e desaloca¸˜o de objetos
     ca            ca

      A aloca¸˜o deve ser apenas dinˆmica na heap (new), ou deve
              ca                    a
      permitir dinˆmica na pilha?
                  a
      Apenas dinˆmica na heap
                a
          M´todo uniforme de cria¸˜o e acesso por meio de ponteiros
            e                       ca
          ou vari´veis de referˆncia
                 a             e
              Simplifica opera¸˜es de atribui¸˜o
                             co             ca
              Permite desreferenciamento impl´
                                             ıcito
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Aloca¸˜o e desaloca¸˜o de objetos
          ca            ca


Aloca¸˜o e desaloca¸˜o de objetos
     ca            ca

      A aloca¸˜o deve ser apenas dinˆmica na heap (new), ou deve
              ca                    a
      permitir dinˆmica na pilha?
                  a
      Apenas dinˆmica na heap
                a
          M´todo uniforme de cria¸˜o e acesso por meio de ponteiros
            e                       ca
          ou vari´veis de referˆncia
                 a             e
              Simplifica opera¸˜es de atribui¸˜o
                             co             ca
              Permite desreferenciamento impl´
                                             ıcito

      Com aloca¸˜o na pilha
               ca
         Dificulta atribui¸˜o de subtipos
                         ca
              O espa¸o alocado na pilha para um tipo pode ser insuficiente
                    c
              para um subtipo.
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Aloca¸˜o e desaloca¸˜o de objetos
          ca            ca


Aloca¸˜o de objetos - Exemplos
     ca



      Smalltalk, Java e Ruby
          Aloca¸˜o na heap apenas
                 ca
              Desreferenciamento impl´
                                     ıcito
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Aloca¸˜o e desaloca¸˜o de objetos
          ca            ca


Aloca¸˜o de objetos - Exemplos
     ca



      Smalltalk, Java e Ruby
          Aloca¸˜o na heap apenas
                 ca
              Desreferenciamento impl´
                                     ıcito

      C++
         Permite aloca¸˜o na pilha
                      ca
              Desrefenciamento expl´
                                   ıcito
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Aloca¸˜o e desaloca¸˜o de objetos
          ca            ca


Desaloca¸˜o de objetos
        ca



      Desaloca¸˜o expl´
              ca      ıcita
          O programador deve se preocupar com a desaloca¸˜o
                                                        ca
          (delete)
              Pode criar ponteiros / referˆncias pendurados
                                          e
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Aloca¸˜o e desaloca¸˜o de objetos
          ca            ca


Desaloca¸˜o de objetos
        ca



      Desaloca¸˜o expl´
              ca      ıcita
          O programador deve se preocupar com a desaloca¸˜o
                                                        ca
          (delete)
              Pode criar ponteiros / referˆncias pendurados
                                          e

      Desaloca¸˜o impl´
              ca      ıcita
          Requer algum mecanismo para desalocar automaticamente
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Aloca¸˜o e desaloca¸˜o de objetos
          ca            ca


Desaloca¸˜o de objetos - Exemplos
        ca

      Smalltalk, Java e Ruby
          Desaloca¸˜o impl´
                    ca     ıcita
              Coletor de lixo (garbage collector )
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Aloca¸˜o e desaloca¸˜o de objetos
          ca            ca


Desaloca¸˜o de objetos - Exemplos
        ca

      Smalltalk, Java e Ruby
          Desaloca¸˜o impl´
                    ca     ıcita
              Coletor de lixo (garbage collector )

      Java
              M´todo finalize(): permite destravar acesso a outros
                e
              recursos al´m da mem´ria quando coletor de lixo desaloca a
                         e         o
              mem´ria (Ex: arquivos em disco)
                   o
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Aloca¸˜o e desaloca¸˜o de objetos
          ca            ca


Desaloca¸˜o de objetos - Exemplos
        ca

      Smalltalk, Java e Ruby
          Desaloca¸˜o impl´
                    ca     ıcita
              Coletor de lixo (garbage collector )

      Java
              M´todo finalize(): permite destravar acesso a outros
                e
              recursos al´m da mem´ria quando coletor de lixo desaloca a
                         e         o
              mem´ria (Ex: arquivos em disco)
                   o

      C++
         Desaloca¸˜o expl´
                 ca      ıcita
              Permite defini¸˜o de destruidor
                           ca
              Comando delete
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Aloca¸˜o e desaloca¸˜o de objetos
          ca            ca


Classes aninhadas


      Motiva¸˜o
            ca
          Oculta¸˜o de informa¸˜o
                ca            ca
              Classe vis´ apenas dentro de outra classe
                        ıvel
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Aloca¸˜o e desaloca¸˜o de objetos
          ca            ca


Classes aninhadas


      Motiva¸˜o
            ca
          Oculta¸˜o de informa¸˜o
                ca            ca
              Classe vis´ apenas dentro de outra classe
                        ıvel

      Quest˜es
           o
          Quais membros da classe externa s˜o vis´
                                           a     ıveis ` classe
                                                       a
          aninhada?
              Quais membros da classe aninhada s˜o vis´
                                                a     ıveis ` classe
                                                            a
              externa?
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Quest˜es de projeto
       o
     Aloca¸˜o e desaloca¸˜o de objetos
          ca            ca


Classes aninhadas - Exemplos



      Java
              Inner classes: classes aninhadas n˜o-est´ticas
                                                a     a
              Classes aninhadas est´ticas
                                   a
              Classes anˆnimas
                        o
              Classes aninhadas locais (dentro de um m´todo)
                                                      e
                        Tem acesso aos membros da classe externa e `s vari´veis locais
                                                                    a     a
                        declaradas com final
                        Membros da classe aninhada vis´
                                                      ıveis apenas dentro do m´todo
                                                                               e
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Implementa¸˜o de Contru¸oes Orientadas a Objeto
            ca           c˜




Implementa¸˜o de Contru¸oes Orientadas a Objeto
          ca           c˜



      Estrutura dos dados
           Class instance record (CIR): similar aos registros (structs em
           C, record em Pascal, etc.)
              Constru´ em tempo de compila¸˜o
                     ıda                  ca
              Subclasses: ´ a CIR da superclasse com as entradas para os
                          e
              novos atributos anexadas ao final
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Implementa¸˜o de Contru¸oes Orientadas a Objeto
            ca           c˜




Implementa¸˜o de Contru¸oes Orientadas a Objeto
          ca           c˜
Suporte ` Programa¸˜o Orientada a Objetos
        a         ca
  Implementa¸˜o de Contru¸oes Orientadas a Objeto
            ca           c˜




Tarefas




          1   Considere as linguagens apresentadas como exemplo
              (Smalltalk, Java, C++ e Ruby). Enumere os pr´s e contras
                                                           o
              de cada linguagem. Tome em considera¸˜o a forma como as
                                                     ca
              quest˜es de projeto s˜o implementadas. Considere tamb´m
                   o               a                                e
              quest˜es como desempenho, legibilidade e confiabilidade.
                   o

Mais conteúdo relacionado

Semelhante a Suporte à Programação Orientada a Objetos

Orientação a Aspectos em PHP
Orientação a Aspectos em PHPOrientação a Aspectos em PHP
Orientação a Aspectos em PHPFlávio Lisboa
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Orientação a objetos no dia a dia do programador
Orientação a objetos  no dia a dia do programadorOrientação a objetos  no dia a dia do programador
Orientação a objetos no dia a dia do programadorEvandro da Silva Amparo
 
Workflows, diagramas e classes de Analise. Sistemas de Informação
Workflows, diagramas e classes de Analise. Sistemas de InformaçãoWorkflows, diagramas e classes de Analise. Sistemas de Informação
Workflows, diagramas e classes de Analise. Sistemas de InformaçãoPedro De Almeida
 
1 ooi introducao
1 ooi introducao1 ooi introducao
1 ooi introducaonikson123
 
Intro oca,ocp 6 & 7, oo basics
Intro   oca,ocp 6 & 7, oo basicsIntro   oca,ocp 6 & 7, oo basics
Intro oca,ocp 6 & 7, oo basicsJuarez Junior
 
Modelo orientado a objetos
Modelo orientado a objetosModelo orientado a objetos
Modelo orientado a objetosDaiana de Ávila
 
Definir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetosDefinir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetosHélio Costa e Silva
 
Reutilização
ReutilizaçãoReutilização
Reutilizaçãoemjorge
 
Apresentação versão 1.5
Apresentação   versão 1.5Apresentação   versão 1.5
Apresentação versão 1.5oliveiraprog
 
Padrões de Projeto - Design Patterns e Anti-Patterns
Padrões de Projeto - Design Patterns e Anti-PatternsPadrões de Projeto - Design Patterns e Anti-Patterns
Padrões de Projeto - Design Patterns e Anti-PatternsRodrigo Kono
 
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...George Mendonça
 

Semelhante a Suporte à Programação Orientada a Objetos (20)

Orientacao a Objetos
Orientacao a ObjetosOrientacao a Objetos
Orientacao a Objetos
 
Orientação a Aspectos em PHP
Orientação a Aspectos em PHPOrientação a Aspectos em PHP
Orientação a Aspectos em PHP
 
UML
UMLUML
UML
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Orientação a objetos no dia a dia do programador
Orientação a objetos  no dia a dia do programadorOrientação a objetos  no dia a dia do programador
Orientação a objetos no dia a dia do programador
 
Workflows, diagramas e classes de Analise. Sistemas de Informação
Workflows, diagramas e classes de Analise. Sistemas de InformaçãoWorkflows, diagramas e classes de Analise. Sistemas de Informação
Workflows, diagramas e classes de Analise. Sistemas de Informação
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 
1 ooi introducao
1 ooi introducao1 ooi introducao
1 ooi introducao
 
Intro oca,ocp 6 & 7, oo basics
Intro   oca,ocp 6 & 7, oo basicsIntro   oca,ocp 6 & 7, oo basics
Intro oca,ocp 6 & 7, oo basics
 
Modelo orientado a objetos
Modelo orientado a objetosModelo orientado a objetos
Modelo orientado a objetos
 
Aula01-IntroducaoOO.pptx
Aula01-IntroducaoOO.pptxAula01-IntroducaoOO.pptx
Aula01-IntroducaoOO.pptx
 
Definir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetosDefinir classe não é programar com orientação a objetos
Definir classe não é programar com orientação a objetos
 
Diagrama de classes
Diagrama de classesDiagrama de classes
Diagrama de classes
 
Reutilização
ReutilizaçãoReutilização
Reutilização
 
Apresentação versão 1.5
Apresentação   versão 1.5Apresentação   versão 1.5
Apresentação versão 1.5
 
POO Plano de Curso
POO Plano de CursoPOO Plano de Curso
POO Plano de Curso
 
Artigo c#
Artigo c#Artigo c#
Artigo c#
 
Padrões de Projeto - Design Patterns e Anti-Patterns
Padrões de Projeto - Design Patterns e Anti-PatternsPadrões de Projeto - Design Patterns e Anti-Patterns
Padrões de Projeto - Design Patterns e Anti-Patterns
 
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
 

Mais de Helio Henrique L. C. Monte-Alto

Context Awareness e Sistemas Multiagentes para o Suporte a Ambientes de Traba...
Context Awareness e Sistemas Multiagentes para o Suporte a Ambientes de Traba...Context Awareness e Sistemas Multiagentes para o Suporte a Ambientes de Traba...
Context Awareness e Sistemas Multiagentes para o Suporte a Ambientes de Traba...Helio Henrique L. C. Monte-Alto
 
Multi-agent applications in a context-aware global software development envir...
Multi-agent applications in a context-aware global software development envir...Multi-agent applications in a context-aware global software development envir...
Multi-agent applications in a context-aware global software development envir...Helio Henrique L. C. Monte-Alto
 
Estudo de técnicas de persistência e acesso concorrente a ontologias
Estudo de técnicas de persistência e acesso concorrente a ontologiasEstudo de técnicas de persistência e acesso concorrente a ontologias
Estudo de técnicas de persistência e acesso concorrente a ontologiasHelio Henrique L. C. Monte-Alto
 
Investigação de Recursos de Comunicação e Colaboração na Infraestrutura Seman...
Investigação de Recursos de Comunicação e Colaboração na Infraestrutura Seman...Investigação de Recursos de Comunicação e Colaboração na Infraestrutura Seman...
Investigação de Recursos de Comunicação e Colaboração na Infraestrutura Seman...Helio Henrique L. C. Monte-Alto
 
Sistemas Multiagentes e Sistemas Distribuídos Sensíveis ao Contexto
Sistemas Multiagentes e Sistemas Distribuídos Sensíveis ao ContextoSistemas Multiagentes e Sistemas Distribuídos Sensíveis ao Contexto
Sistemas Multiagentes e Sistemas Distribuídos Sensíveis ao ContextoHelio Henrique L. C. Monte-Alto
 
ESTUDO DE MOBILIDADE DE AGENTES EM APLICAÇÕES SENSÍVEIS AO CONTEXTO
ESTUDO DE MOBILIDADE DE AGENTES EM  APLICAÇÕES SENSÍVEIS AO CONTEXTOESTUDO DE MOBILIDADE DE AGENTES EM  APLICAÇÕES SENSÍVEIS AO CONTEXTO
ESTUDO DE MOBILIDADE DE AGENTES EM APLICAÇÕES SENSÍVEIS AO CONTEXTOHelio Henrique L. C. Monte-Alto
 

Mais de Helio Henrique L. C. Monte-Alto (13)

Processo de Software
Processo de SoftwareProcesso de Software
Processo de Software
 
Desenvolvimento Ágil de Software
Desenvolvimento Ágil de SoftwareDesenvolvimento Ágil de Software
Desenvolvimento Ágil de Software
 
Context Awareness e Sistemas Multiagentes para o Suporte a Ambientes de Traba...
Context Awareness e Sistemas Multiagentes para o Suporte a Ambientes de Traba...Context Awareness e Sistemas Multiagentes para o Suporte a Ambientes de Traba...
Context Awareness e Sistemas Multiagentes para o Suporte a Ambientes de Traba...
 
Teoremas da Incompletude de Gödel
Teoremas da Incompletude de GödelTeoremas da Incompletude de Gödel
Teoremas da Incompletude de Gödel
 
Tipos Abstratos de Dados e Encapsulamento
Tipos Abstratos de Dados e EncapsulamentoTipos Abstratos de Dados e Encapsulamento
Tipos Abstratos de Dados e Encapsulamento
 
Multi-agent applications in a context-aware global software development envir...
Multi-agent applications in a context-aware global software development envir...Multi-agent applications in a context-aware global software development envir...
Multi-agent applications in a context-aware global software development envir...
 
Estudo de técnicas de persistência e acesso concorrente a ontologias
Estudo de técnicas de persistência e acesso concorrente a ontologiasEstudo de técnicas de persistência e acesso concorrente a ontologias
Estudo de técnicas de persistência e acesso concorrente a ontologias
 
Investigação de Recursos de Comunicação e Colaboração na Infraestrutura Seman...
Investigação de Recursos de Comunicação e Colaboração na Infraestrutura Seman...Investigação de Recursos de Comunicação e Colaboração na Infraestrutura Seman...
Investigação de Recursos de Comunicação e Colaboração na Infraestrutura Seman...
 
Arquitetura orientada a serviços (SOA)
Arquitetura orientada a serviços (SOA)Arquitetura orientada a serviços (SOA)
Arquitetura orientada a serviços (SOA)
 
Sistemas Multiagentes e Sistemas Distribuídos Sensíveis ao Contexto
Sistemas Multiagentes e Sistemas Distribuídos Sensíveis ao ContextoSistemas Multiagentes e Sistemas Distribuídos Sensíveis ao Contexto
Sistemas Multiagentes e Sistemas Distribuídos Sensíveis ao Contexto
 
Ferramentas Case - fase de análise e projeto
Ferramentas Case - fase de análise e projetoFerramentas Case - fase de análise e projeto
Ferramentas Case - fase de análise e projeto
 
Rmi (remote method invocation)
Rmi (remote method invocation)Rmi (remote method invocation)
Rmi (remote method invocation)
 
ESTUDO DE MOBILIDADE DE AGENTES EM APLICAÇÕES SENSÍVEIS AO CONTEXTO
ESTUDO DE MOBILIDADE DE AGENTES EM  APLICAÇÕES SENSÍVEIS AO CONTEXTOESTUDO DE MOBILIDADE DE AGENTES EM  APLICAÇÕES SENSÍVEIS AO CONTEXTO
ESTUDO DE MOBILIDADE DE AGENTES EM APLICAÇÕES SENSÍVEIS AO CONTEXTO
 

Suporte à Programação Orientada a Objetos

  • 1. Suporte ` Programa¸˜o Orientada a Objetos a ca Suporte ` Programa¸˜o Orientada a Objetos a ca Cap´ ıtulo 12 - Livro do Sebesta Helio Henrique L. C. Monte-Alto Disciplina: Paradigma de Programa¸˜o Imperativa e Orientada ca a Objetos 2012
  • 2. Suporte ` Programa¸˜o Orientada a Objetos a ca T´picos o 1 Introdu¸˜o ca 2 Quest˜es de projeto o Exclusividade de objetos Subclasses s˜o subtipos? a Checagem de tipo e polimorfismo Heran¸a unica e m´ltipla c ´ u Aloca¸˜o e desaloca¸˜o de objetos ca ca 3 Implementa¸˜o de Contru¸˜es Orientadas a Objeto ca co
  • 3. Suporte ` Programa¸˜o Orientada a Objetos a ca Introdu¸˜o ca Introdu¸˜o ca Uma linguagem OO deve prover suporte a trˆs caracter´ e ısticas: Tipos abstratos de dados Heran¸a c Vincula¸˜o dinˆmica de chamadas de m´todos ca a e Primeira linguagem com suporte a OO: SIMULA 67 Linguagem base para uma linguagem puramente orientada a objetos: Smalltalk
  • 4. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Quest˜es de projeto o Exclusividade de objetos Subclasses s˜o subtipos? a Checagem de tipo e Polimorfismo Heran¸a unica e m´ltipla c ´ u Aloca¸˜o e desaloca¸˜o de objetos ca ca Vincula¸˜o dinˆmica e est´tica ca a a Classes aninhadas Inicializa¸˜o de objetos ca
  • 5. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Exclusividade de objetos Exclusividade de objetos Vantagem Elegˆncia e uniformidade da linguagem e seu uso. a
  • 6. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Exclusividade de objetos Exclusividade de objetos Vantagem Elegˆncia e uniformidade da linguagem e seu uso. a Desvantagem Opera¸˜es simples s˜o feitas por meio do processo de troca de co a mensagens Mais lento do que no modelo imperativo
  • 7. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Exclusividade de objetos Exclusividade de objetos Vantagem Elegˆncia e uniformidade da linguagem e seu uso. a Desvantagem Opera¸˜es simples s˜o feitas por meio do processo de troca de co a mensagens Mais lento do que no modelo imperativo Alternativa Manter o modelo imperativo e adicionar o modelo OO Pode deixar a linguagem confusa =⇒ Objetos e literais misturados Necessidade de wrapper classes
  • 8. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Exclusividade de objetos Exclusividade de objetos - Exemplos Smalltalk e Ruby Tudo ´ objeto. e As vari´veis n˜o tˆm tipo (typeless): todas s˜o referˆncias a a a e a e objetos.
  • 9. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Exclusividade de objetos Exclusividade de objetos - Exemplos Smalltalk e Ruby Tudo ´ objeto. e As vari´veis n˜o tˆm tipo (typeless): todas s˜o referˆncias a a a e a e objetos. C++ Mant´m todas as constru¸˜es e tipos do C e co Retrocompatibilidade com C ⇒ Linguagem multiparadigma
  • 10. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Exclusividade de objetos Exclusividade de objetos - Exemplos Java Mant´m tipos escalares primitivos (int, boolean, char, etc) e Motivo: eficiˆncia e Problema: muitas classes, como ArrayList, podem conter apenas objetos Necess´rio o uso de wrappers a
  • 11. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Subclasses s˜o subtipos? a Subclasses s˜o subtipos? a A rela¸˜o entre uma classe filha e uma classe m˜e sempre ´ ca a e a ca ´ equivalente ` rela¸˜o ”E-UM”?
  • 12. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Subclasses s˜o subtipos? a Subclasses s˜o subtipos? a A rela¸˜o entre uma classe filha e uma classe m˜e sempre ´ ca a e a ca ´ equivalente ` rela¸˜o ”E-UM”? Objetos da classe filha devem possuir a interface da classe m˜e a
  • 13. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Subclasses s˜o subtipos? a Subclasses s˜o subtipos? a A rela¸˜o entre uma classe filha e uma classe m˜e sempre ´ ca a e a ca ´ equivalente ` rela¸˜o ”E-UM”? Objetos da classe filha devem possuir a interface da classe m˜e a Um objeto da classe filha sempre pode ser substitu´ por um ıdo objeto da classe m˜e sem causar um erro de tipo a
  • 14. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Subclasses s˜o subtipos? a Subclasses s˜o subtipos? a Rela¸˜o dos modos como uma subclasse pode diferir de sua ca superclasse: Mudan¸a c Deixa de ser sub- tipo? M´todos p´blicos adicionais e u ˜ NAO Menos m´todos (oculta¸˜o de e ca SIM m´todos p´blicos da superclasse) e u Tipos dos parˆmetros de m´todos a e SIM p´blicos diferentes u Tipo do retorno de m´todos p´blicos e u SIM diferentes Corpo (implementa¸˜o) de m´todos ca e ˜ NAO diferentes
  • 15. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Subclasses s˜o subtipos? a Subclasses s˜o subtipos? - Exemplos a Smalltalk Subclasses herdam todos os membros da superclasse, e n˜o a podem ocultar membros da superclasse
  • 16. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Subclasses s˜o subtipos? a Subclasses s˜o subtipos? - Exemplos a Smalltalk Subclasses herdam todos os membros da superclasse, e n˜o a podem ocultar membros da superclasse Logo, toda subclasse ´ subtipo e
  • 17. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Subclasses s˜o subtipos? a Subclasses s˜o subtipos? - Exemplos a Smalltalk Subclasses herdam todos os membros da superclasse, e n˜o a podem ocultar membros da superclasse Logo, toda subclasse ´ subtipo e C++ Dois modos de deriva¸˜o: public e private ca Deriva¸˜o privada esconde membros p´blicos da superclasse ca u
  • 18. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Subclasses s˜o subtipos? a Subclasses s˜o subtipos? - Exemplos a Smalltalk Subclasses herdam todos os membros da superclasse, e n˜o a podem ocultar membros da superclasse Logo, toda subclasse ´ subtipo e C++ Dois modos de deriva¸˜o: public e private ca Deriva¸˜o privada esconde membros p´blicos da superclasse ca u Logo, nem toda subclasse ´ subtipo e
  • 19. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Subclasses s˜o subtipos? a Subclasses s˜o subtipos? - Exemplos a Java N˜o ´ poss´ ocultar membros da superclasse a e ıvel
  • 20. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Subclasses s˜o subtipos? a Subclasses s˜o subtipos? - Exemplos a Java N˜o ´ poss´ ocultar membros da superclasse a e ıvel M´todos com mesmo nome mas tipos dos parˆmetros e tipo e a de retorno diferentes ⇒ m´todos sobrecarregados e
  • 21. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Subclasses s˜o subtipos? a Subclasses s˜o subtipos? - Exemplos a Java N˜o ´ poss´ ocultar membros da superclasse a e ıvel M´todos com mesmo nome mas tipos dos parˆmetros e tipo e a de retorno diferentes ⇒ m´todos sobrecarregados e Logo, toda subclasse ´ subtipo e
  • 22. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Subclasses s˜o subtipos? a Subclasses s˜o subtipos? - Exemplos a Java N˜o ´ poss´ ocultar membros da superclasse a e ıvel M´todos com mesmo nome mas tipos dos parˆmetros e tipo e a de retorno diferentes ⇒ m´todos sobrecarregados e Logo, toda subclasse ´ subtipo e Ruby ´ E poss´ mudar controles de acesso de membros da ıvel superclasse
  • 23. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Subclasses s˜o subtipos? a Subclasses s˜o subtipos? - Exemplos a Java N˜o ´ poss´ ocultar membros da superclasse a e ıvel M´todos com mesmo nome mas tipos dos parˆmetros e tipo e a de retorno diferentes ⇒ m´todos sobrecarregados e Logo, toda subclasse ´ subtipo e Ruby ´ E poss´ mudar controles de acesso de membros da ıvel superclasse Logo ´ poss´ ocultar membros da superclasse, e portanto e ıvel subclasses nem sempre s˜o subtipos a
  • 24. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Checagem de tipo e polimorfismo Checagem de tipo e polimorfismo Polimorfismo Vari´vel polim´rfica: pode referenciar objetos da classe m˜e a o a e das classes descendentes
  • 25. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Checagem de tipo e polimorfismo Checagem de tipo e polimorfismo Polimorfismo Vari´vel polim´rfica: pode referenciar objetos da classe m˜e a o a e das classes descendentes Polimorfismo requer vincula¸˜o dinˆmica de m´todos ca a e
  • 26. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Checagem de tipo e polimorfismo Checagem de tipo e polimorfismo Polimorfismo Vari´vel polim´rfica: pode referenciar objetos da classe m˜e a o a e das classes descendentes Polimorfismo requer vincula¸˜o dinˆmica de m´todos ca a e Vincula¸˜o dinˆmica ⇒ Custo adicional em tempo de ca a execu¸˜o ca
  • 27. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Checagem de tipo e polimorfismo Checagem de tipo e polimorfismo Polimorfismo Vari´vel polim´rfica: pode referenciar objetos da classe m˜e a o a e das classes descendentes Polimorfismo requer vincula¸˜o dinˆmica de m´todos ca a e Vincula¸˜o dinˆmica ⇒ Custo adicional em tempo de ca a execu¸˜o ca Checagem dinˆmica de tipo a A classe real do objeto apontado pela vari´vel n˜o pode ser a a determinada em tempo de compila¸˜oca Problemas: Custo da checagem em tempo de execu¸˜o ca Atrasos na detec¸˜o de erros ca
  • 28. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Checagem de tipo e polimorfismo Checagem de tipo e polimorfismo - Exemplos Smalltalk e Ruby Somente vincula¸˜o dinˆmica de m´todos ca a e ´ Unica checagem de tipo: garantir que uma mensagem encontra o m´todo correspondente e
  • 29. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Checagem de tipo e polimorfismo Checagem de tipo e polimorfismo - Exemplos Smalltalk e Ruby Somente vincula¸˜o dinˆmica de m´todos ca a e ´ Unica checagem de tipo: garantir que uma mensagem encontra o m´todo correspondente e C++ Permite vincula¸˜o dinˆmica e est´tica ca a a M´todos definidos com virtual ⇒ vincula¸˜o dinˆmica e ca a
  • 30. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Checagem de tipo e polimorfismo Checagem de tipo e polimorfismo - Exemplos Smalltalk e Ruby Somente vincula¸˜o dinˆmica de m´todos ca a e ´ Unica checagem de tipo: garantir que uma mensagem encontra o m´todo correspondente e C++ Permite vincula¸˜o dinˆmica e est´tica ca a a M´todos definidos com virtual ⇒ vincula¸˜o dinˆmica e ca a Java Permite vincula¸˜o dinˆmica e est´tica ca a a M´todos definidos com final, static ou private ⇒ e vincula¸˜o est´tica ca a
  • 31. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Heran¸a unica e m´ltipla c ´ u Heran¸a unica e m´ltipla c ´ u Heran¸a m´ltipla: uma classe pode herdar de mais de uma c u classe?
  • 32. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Heran¸a unica e m´ltipla c ´ u Heran¸a unica e m´ltipla c ´ u Heran¸a m´ltipla: uma classe pode herdar de mais de uma c u classe? Problemas Complexidade Se duas superclasses definem o mesmo m´todo, qual deles deve ser e chamado? Heran¸a compartilhada (diamante) c Torna o projeto do programa mais complexo: muitas dependˆncias e no c´digo ⇒ manuten¸˜o mais dif´ o ca ıcil
  • 33. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Heran¸a unica e m´ltipla c ´ u Heran¸a unica e m´ltipla c ´ u Heran¸a m´ltipla: uma classe pode herdar de mais de uma c u classe? Problemas Complexidade Se duas superclasses definem o mesmo m´todo, qual deles deve ser e chamado? Heran¸a compartilhada (diamante) c Torna o projeto do programa mais complexo: muitas dependˆncias e no c´digo ⇒ manuten¸˜o mais dif´ o ca ıcil Eficiˆncia e Requer uma opera¸˜o a mais a cada chamada de m´todo ca e Custo adicional n˜o muito alto a
  • 34. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Heran¸a unica e m´ltipla c ´ u Heran¸a unica e m´ltipla c ´ u
  • 35. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Heran¸a unica e m´ltipla c ´ u Heran¸a unica e m´ltipla - Exemplos c ´ u Smalltalk Somente heran¸a unica c ´
  • 36. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Heran¸a unica e m´ltipla c ´ u Heran¸a unica e m´ltipla - Exemplos c ´ u Smalltalk Somente heran¸a unica c ´ C++ Permite heran¸a m´ltipla c u Desambigua¸˜o de membros com mesmo nome ⇒ Operador ca de resolu¸˜o de escopo (::) ca
  • 37. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Heran¸a unica e m´ltipla c ´ u Heran¸a unica e m´ltipla - Exemplos c ´ u Java Somente heran¸a unica c ´ Interfaces Podem ser usadas para simular heran¸a m´ltipla c u Proveem um tipo de polimorfismo (interfaces podem ser tratadas como tipos) A classe deve implementar todos os m´todos da interface ⇒ e Evita os problemas de m´ltipla heran¸a u c Ruby Somente heran¸a unica c ´ M´dulos o Permite que uma classe herde todas as fun¸oes de um m´dulo c˜ o
  • 38. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Aloca¸˜o e desaloca¸˜o de objetos ca ca Aloca¸˜o e desaloca¸˜o de objetos ca ca A aloca¸˜o deve ser apenas dinˆmica na heap (new), ou deve ca a permitir dinˆmica na pilha? a
  • 39. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Aloca¸˜o e desaloca¸˜o de objetos ca ca Aloca¸˜o e desaloca¸˜o de objetos ca ca A aloca¸˜o deve ser apenas dinˆmica na heap (new), ou deve ca a permitir dinˆmica na pilha? a Apenas dinˆmica na heap a M´todo uniforme de cria¸˜o e acesso por meio de ponteiros e ca ou vari´veis de referˆncia a e Simplifica opera¸˜es de atribui¸˜o co ca Permite desreferenciamento impl´ ıcito
  • 40. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Aloca¸˜o e desaloca¸˜o de objetos ca ca Aloca¸˜o e desaloca¸˜o de objetos ca ca A aloca¸˜o deve ser apenas dinˆmica na heap (new), ou deve ca a permitir dinˆmica na pilha? a Apenas dinˆmica na heap a M´todo uniforme de cria¸˜o e acesso por meio de ponteiros e ca ou vari´veis de referˆncia a e Simplifica opera¸˜es de atribui¸˜o co ca Permite desreferenciamento impl´ ıcito Com aloca¸˜o na pilha ca Dificulta atribui¸˜o de subtipos ca O espa¸o alocado na pilha para um tipo pode ser insuficiente c para um subtipo.
  • 41. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Aloca¸˜o e desaloca¸˜o de objetos ca ca Aloca¸˜o de objetos - Exemplos ca Smalltalk, Java e Ruby Aloca¸˜o na heap apenas ca Desreferenciamento impl´ ıcito
  • 42. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Aloca¸˜o e desaloca¸˜o de objetos ca ca Aloca¸˜o de objetos - Exemplos ca Smalltalk, Java e Ruby Aloca¸˜o na heap apenas ca Desreferenciamento impl´ ıcito C++ Permite aloca¸˜o na pilha ca Desrefenciamento expl´ ıcito
  • 43. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Aloca¸˜o e desaloca¸˜o de objetos ca ca Desaloca¸˜o de objetos ca Desaloca¸˜o expl´ ca ıcita O programador deve se preocupar com a desaloca¸˜o ca (delete) Pode criar ponteiros / referˆncias pendurados e
  • 44. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Aloca¸˜o e desaloca¸˜o de objetos ca ca Desaloca¸˜o de objetos ca Desaloca¸˜o expl´ ca ıcita O programador deve se preocupar com a desaloca¸˜o ca (delete) Pode criar ponteiros / referˆncias pendurados e Desaloca¸˜o impl´ ca ıcita Requer algum mecanismo para desalocar automaticamente
  • 45. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Aloca¸˜o e desaloca¸˜o de objetos ca ca Desaloca¸˜o de objetos - Exemplos ca Smalltalk, Java e Ruby Desaloca¸˜o impl´ ca ıcita Coletor de lixo (garbage collector )
  • 46. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Aloca¸˜o e desaloca¸˜o de objetos ca ca Desaloca¸˜o de objetos - Exemplos ca Smalltalk, Java e Ruby Desaloca¸˜o impl´ ca ıcita Coletor de lixo (garbage collector ) Java M´todo finalize(): permite destravar acesso a outros e recursos al´m da mem´ria quando coletor de lixo desaloca a e o mem´ria (Ex: arquivos em disco) o
  • 47. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Aloca¸˜o e desaloca¸˜o de objetos ca ca Desaloca¸˜o de objetos - Exemplos ca Smalltalk, Java e Ruby Desaloca¸˜o impl´ ca ıcita Coletor de lixo (garbage collector ) Java M´todo finalize(): permite destravar acesso a outros e recursos al´m da mem´ria quando coletor de lixo desaloca a e o mem´ria (Ex: arquivos em disco) o C++ Desaloca¸˜o expl´ ca ıcita Permite defini¸˜o de destruidor ca Comando delete
  • 48. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Aloca¸˜o e desaloca¸˜o de objetos ca ca Classes aninhadas Motiva¸˜o ca Oculta¸˜o de informa¸˜o ca ca Classe vis´ apenas dentro de outra classe ıvel
  • 49. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Aloca¸˜o e desaloca¸˜o de objetos ca ca Classes aninhadas Motiva¸˜o ca Oculta¸˜o de informa¸˜o ca ca Classe vis´ apenas dentro de outra classe ıvel Quest˜es o Quais membros da classe externa s˜o vis´ a ıveis ` classe a aninhada? Quais membros da classe aninhada s˜o vis´ a ıveis ` classe a externa?
  • 50. Suporte ` Programa¸˜o Orientada a Objetos a ca Quest˜es de projeto o Aloca¸˜o e desaloca¸˜o de objetos ca ca Classes aninhadas - Exemplos Java Inner classes: classes aninhadas n˜o-est´ticas a a Classes aninhadas est´ticas a Classes anˆnimas o Classes aninhadas locais (dentro de um m´todo) e Tem acesso aos membros da classe externa e `s vari´veis locais a a declaradas com final Membros da classe aninhada vis´ ıveis apenas dentro do m´todo e
  • 51. Suporte ` Programa¸˜o Orientada a Objetos a ca Implementa¸˜o de Contru¸oes Orientadas a Objeto ca c˜ Implementa¸˜o de Contru¸oes Orientadas a Objeto ca c˜ Estrutura dos dados Class instance record (CIR): similar aos registros (structs em C, record em Pascal, etc.) Constru´ em tempo de compila¸˜o ıda ca Subclasses: ´ a CIR da superclasse com as entradas para os e novos atributos anexadas ao final
  • 52. Suporte ` Programa¸˜o Orientada a Objetos a ca Implementa¸˜o de Contru¸oes Orientadas a Objeto ca c˜ Implementa¸˜o de Contru¸oes Orientadas a Objeto ca c˜
  • 53. Suporte ` Programa¸˜o Orientada a Objetos a ca Implementa¸˜o de Contru¸oes Orientadas a Objeto ca c˜ Tarefas 1 Considere as linguagens apresentadas como exemplo (Smalltalk, Java, C++ e Ruby). Enumere os pr´s e contras o de cada linguagem. Tome em considera¸˜o a forma como as ca quest˜es de projeto s˜o implementadas. Considere tamb´m o a e quest˜es como desempenho, legibilidade e confiabilidade. o