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

Suporte à Programação Orientada a Objetos

  • 1.
    Suporte ` Programa¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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¸˜oOrientada 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