SlideShare a Scribd company logo
1 of 42
Download to read offline
Tipos Abstratos de Dados (TAD) e Encapsulamento




                       Tipos Abstratos de Dados (TAD) e
                               Encapsulamento
                                  Cap´
                                     ıtulo 11 (Livro do Sebesta)


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


                                                  2012
Tipos Abstratos de Dados (TAD) e Encapsulamento




T´picos
 o
       1 Conceito de abstra¸˜o
                           ca
              Tipos de abstra¸˜o
                             ca
       2 Introdu¸˜o ` abstra¸˜o de dados
                ca a        ca
             Tipos de dados definidos pelo usu´rio
                                              a
             TAD definidos pelo usu´rio - Exemplo
                                    a
       3   Quest˜es de projeto
                o
       4   Exemplos de linguagens
             Ada
             C++
             Java
             Ruby
       5   Tipos abstratos de dados parametrizados
             TAD parametrizados - Exemplos
       6   Constru¸˜es de encapsulamento
                  co
             Exemplos de constru¸˜es de encapsulamento
                                 co
       7   Encapsulamento de nomes
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Conceito de abstra¸˜o
                    ca




Conceito de abstra¸˜o
                  ca
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Conceito de abstra¸˜o
                    ca




Conceito de abstra¸˜o
                  ca



      Defini¸˜o
             ca
      Abstra¸˜o ´ uma vis˜o ou representa¸˜o de uma entidade que
              ca e         a                ca
      inclui apenas os atributos mais significantes.
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Conceito de abstra¸˜o
                    ca




Conceito de abstra¸˜o
                  ca



      Defini¸˜o
             ca
      Abstra¸˜o ´ uma vis˜o ou representa¸˜o de uma entidade que
              ca e         a                ca
      inclui apenas os atributos mais significantes.

      Objetivo
      A abstra¸˜o em linguagens de programa¸˜o (LP) ´ uma arma para
               ca                            ca      e
      lidar com a complexidade, tornando um programa grande e/ou
      complicado mais f´cil de ser implementado e mantido
                       a
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Conceito de abstra¸˜o
                    ca
     Tipos de abstra¸˜o
                    ca


Tipos de abstra¸˜o em LP
               ca

      Abstra¸˜o de processos
            ca
              Subprogramas (fun¸˜es, procedimentos, m´todos)
                               co                    e
              Esconde detalhes da implementa¸˜o
                                            ca
              Permite reuso
              Ex: sortInt(list)

      Abstra¸˜o de dados
            ca
              Tipos de dados abstratos (structs, classes)
              Encapsulamento
              Instˆncia: objeto
                  a
              Ex: listas, fila, pilha, registros, ´rvores, ponto flutuante
                                                 a
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Introdu¸˜o ` abstra¸˜o de dados
         ca a        ca
     Tipos de dados definidos pelo usu´rio
                                     a


Tipos de dados definidos pelo usu´rio
                                a

      Caracter´
              ısticas
      TADs s˜o unidades sint´ticas que definem um tipo tal que:
             a              a
              A interface (ou especifica¸˜o) do tipo n˜o depende da real
                                       ca            a
              representa¸˜o dos dados ou da implementa¸˜o das opera¸˜es
                         ca                             ca          co
              sobre o tipo;
              A representa¸˜o real ´ oculta do programa que a utiliza.
                          ca       e

      Vantagens
          Oculta¸˜o de informa¸˜o
                ca            ca
                      Maior confiabilidade
              Baixo acoplamento com os clientes do tipo
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Introdu¸˜o ` abstra¸˜o de dados
         ca a        ca
     Tipos de dados definidos pelo usu´rio
                                     a


Tipos de dados definidos pelo usu´rio
                                a
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Introdu¸˜o ` abstra¸˜o de dados
         ca a        ca
     Tipos de dados definidos pelo usu´rio
                                     a


Tipos de dados definidos pelo usu´rio
                                a
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Introdu¸˜o ` abstra¸˜o de dados
         ca a        ca
     TAD definidos pelo usu´rio - Exemplo
                          a


Tipos de dados definidos pelo usu´rio - Exemplo
                                a



      Opera¸˜es (interface) sobre uma estrutura de pilha:
           co
              create(stack)
              destroy(stack)
              empty(stack)
              push(stack, element)
              pop(stack)
              top(stack)
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Introdu¸˜o ` abstra¸˜o de dados
         ca a        ca
     TAD definidos pelo usu´rio - Exemplo
                          a


Tipos de dados definidos pelo usu´rio - Exemplo
                                a
      Exemplo de c´digo do cliente:
                  o
      ...
      create(stk1);
      push(stk1, color1);
      push(stk1, color2);
      if(! empty(stk1))
      temp = top(stk1);
      ...
      Quest˜o: Vamos supor que a implementa¸˜o original dessa pilha
              a                                  ca
      utilizasse lista est´tica. O que devemos fazer se precisarmos
                          a
      modificar a estrutura de dados para lista ligada? A mudan¸a  c
      afetar´ o c´digo cliente?
             a     o
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Introdu¸˜o ` abstra¸˜o de dados
         ca a        ca
     TAD definidos pelo usu´rio - Exemplo
                          a


Tipos de dados definidos pelo usu´rio - Exemplo
                                a
      Exemplo de c´digo do cliente:
                  o
      ...
      create(stk1);
      push(stk1, color1);
      push(stk1, color2);
      if(! empty(stk1))
      temp = top(stk1);
      ...
      Quest˜o: Vamos supor que a implementa¸˜o original dessa pilha
              a                                  ca
      utilizasse lista est´tica. O que devemos fazer se precisarmos
                          a
      modificar a estrutura de dados para lista ligada? A mudan¸a  c
      afetar´ o c´digo cliente?
             a     o
            ˜
      R: NAO, pois a interface n˜o precisa ser modificada, apenas a
                                    a
      implementa¸˜o.ca
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Quest˜es de projeto
       o




Quest˜es de projeto
     o


              Unidade sint´tica para defini¸˜o dos tipos e subprogramas
                          a               ca
              Opera¸˜es embutidas comuns
                   co
                        atribui¸˜o
                               ca
                        compara¸˜es
                                 co
                        iteradores
                        acessores
                        construtores
                        destruidores
              Tipos abstratos parametrizados
              Controle de acesso
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Exemplos de linguagens
     Ada


Ada




      Encapsulamento
      Constru¸˜es chamadas packages, divididas em duas partes, que
             co
      tamb´m s˜o packages:
          e    a
              specification package
              body package
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Exemplos de linguagens
     Ada


Ada - Exemplo
      Especifica¸˜o para pilha:
               ca
      package S t a c k P a c k i s
          −− As e n t i d a d e s v i s i v e i s , ou i n t e r f a c e p u b l i c a
          type Stack Type i s l i m i t e d p r i v a t e ;
          M a x S i z e : c o n s t a n t := 1 0 0 ;
          f u n c t i o n Empty ( S t k : i n S t a c k T y p e ) r e t u r n B o o l e a n ;
          p r o c e d u r e Push ( S t k : i n o ut S t a c k T y p e ; E l e m e n t : i n
                  Integer ) ;
          p r o c e d u r e Pop ( S t k : i n o ut S t a c k T y p e ) ;
          f u n c t i o n Top ( S t k : i n S t a c k T y p e ) r e t u r n I n t e g e r ;
          −− A p a r t e o c u l t a d o s c l i e n t e s
          private
                  type L i s t T y p e i s a r r a y ( 1 . . Max Size ) of I n t e g e r ;
                  type Stack Type i s
                  record
                          List : List Type ;
                          Topsub : I n t e g e r r a n g e 0 . . M a x S i z e := 0 ;
                  end r e c o r d ;
      end S t a c k P a c k ;
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Exemplos de linguagens
     Ada


Ada - Exemplo

      Trecho da implementa¸˜o (body):
                          ca
      w i t h Ada . T e x t I O ; u s e Ada . T e x t I O ;
      package body S t a c k P a c k i s
             f u n c t i o n Empty ( S t k : i n S t a c k T y p e ) r e t u r n B o o l e a n i s
                     begin
                     r e t u r n S t k . Topsum = 0 ;
                    end Empty ;

             p r o c e d u r e Push ( S t k : i n o ut S t a c k T y p e ; E l e m e n t : i n
                     Integer ) is
                     begin
                     i f S t k . Topsum >= M a x S i z e t h e n
                             P u t L i n e ( ”ERROR − S t a c k o v e r f l o w ” ) ;
                     else
                             S t k . Topsub := S t k . Topsub + 1 ;
                             S t k . L i s t ( Topsub ) := E l e m e n t ;
                     end i f ;
             end Push ;
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Exemplos de linguagens
     Ada


Ada - Exemplo


      Exemplo de uso:
      w i t h S t a c k P a c k , Ada . T e x t I O ;
      u s e S t a c k P a c k , Ada . T e x t I O ;
      procedure Use Stacks i s
             Topone : I n t e g e r ;
             S t a c k : S t a c k T y p e ; −− C r i a um o b j e t o do t i p o
                     Stack Type
             begin
             Push ( S t a c k , 4 2 ) ;
             Push ( S t a c k , 1 7 ) ;
             Topone := Top ( S t a c k ) ;
             Pop ( S t a c k ) ;
             ...
             end U s e S t a c k s ;
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Exemplos de linguagens
     C++


C++




              Suporte ` programa¸˜o orientada a objetos.
                      a         ca
              Duas constru¸˜es para suporte a tipos abstratos de dados:
                           co
                     struct: define apenas dados
                     class: define dados (membros de dados) e opera¸˜es sobre
                                                                  co
                     os dados (fun¸˜es-membro)
                                  co
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Exemplos de linguagens
     C++


C++ - Encapsulamento


      Encapsulamento
          Duas categorias de membros de dados e fun¸˜es-membro:
                                                   co
                     Membros da classe
                     Membros da instˆncia
                                    a
              Aloca¸˜o da instˆncia de uma classe
                   ca         a
                     Est´tica
                        a
                     Dinˆmica na pilha
                        a
                     Dinˆmica na heap
                        a
              Duas maneiras de definir uma fun¸˜o membro:
                                             ca
                     Defini¸˜o completa na classe (chamada inlined)
                          ca
                     Somente o cabe¸alho
                                   c
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Exemplos de linguagens
     C++


C++ - Oculta¸˜o de Informa¸˜o
            ca            ca


      Oculta¸˜o de informa¸˜o
            ca            ca
              Cl´usulas (controle de acesso):
                a
                     private
                     public
                     protected
              Todos os membros de dados devem ser privados para garantir
              a oculta¸˜o de informa¸˜o
                      ca            ca
              Apenas m´todos devem ser p´blicos. O conjunto dos m´todos
                        e                    u                   e
              p´blicos constitui a interface da classe.
               u
              Construtores e destruidores
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Exemplos de linguagens
     Java


Java




              Bastante similar ao C++
              Principais diferen¸as:
                                c
                     Todos os TAD s˜o classes
                                     a
                     Todos objetos alocados na heap
                     M´todos s´ podem ser definidos dentro da classe
                       e      o
                     Sem m´todo destruidor (coletor de lixo)
                           e
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Exemplos de linguagens
     Ruby


Ruby




              Classes similares a Java e C++
              Classes dinˆmicas
                         a
                     Membros podem ser adicionados e removidos em tempo de
                     execu¸˜o
                          ca
                     Maior flexibilidade, por´m menor legibilidade
                                            e
              Tudo ´ objeto!
                   e
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Tipos abstratos de dados parametrizados




Tipos abstratos de dados parametrizados

      E se precisarmos criar pilhas para diferentes tipos de dados? Qual
      parece a solu¸˜o mais atraente?
                   ca
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Tipos abstratos de dados parametrizados




Tipos abstratos de dados parametrizados

      E se precisarmos criar pilhas para diferentes tipos de dados? Qual
      parece a solu¸˜o mais atraente?
                   ca
          1   Senta e chora.
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Tipos abstratos de dados parametrizados




Tipos abstratos de dados parametrizados

      E se precisarmos criar pilhas para diferentes tipos de dados? Qual
      parece a solu¸˜o mais atraente?
                   ca
          1   Senta e chora.
          2   Implementar uma pilha para cada tipo de dado (Ex:
              IntegerStack, StringStack, FloatStack, etc.)
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Tipos abstratos de dados parametrizados




Tipos abstratos de dados parametrizados

      E se precisarmos criar pilhas para diferentes tipos de dados? Qual
      parece a solu¸˜o mais atraente?
                   ca
          1   Senta e chora.
          2   Implementar uma pilha para cada tipo de dado (Ex:
              IntegerStack, StringStack, FloatStack, etc.)
          3   Criar uma unica implementa¸˜o de pilha que aceita qualquer
                        ´               ca
              tipo de dado.
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Tipos abstratos de dados parametrizados




Tipos abstratos de dados parametrizados

      E se precisarmos criar pilhas para diferentes tipos de dados? Qual
      parece a solu¸˜o mais atraente?
                   ca
          1   Senta e chora.
          2   Implementar uma pilha para cada tipo de dado (Ex:
              IntegerStack, StringStack, FloatStack, etc.)
          3   Criar uma unica implementa¸˜o de pilha que aceita qualquer
                        ´               ca
              tipo de dado.

      TAD parametrizados
      Obviamente, a alternativa correta ´ a (3). TAD parametrizados ´
                                        e                           e
      uma quest˜o de projeto pr´pria de linguagens estaticamente
               a                o
      tipadas.
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Tipos abstratos de dados parametrizados
     TAD parametrizados - Exemplos


C++ e Ada

      Ada
              Adiciona-se: generic type T is private, antes da
              declara¸˜o da package
                     ca
              Para cada instˆncia (ex: Float, Integer), o compilador cria um
                            a
              c´digo correspondente
               o

      C++
         Adiciona-se: template <class T>, antes da declara¸˜o da
                                                          ca
         class
              Similarmente ao Ada, v´rias instˆncias do c´digo da classe s˜o
                                    a         a          o                a
              criadas em tempo de compila¸˜o para cada tipo utilizado.
                                           ca
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Tipos abstratos de dados parametrizados
     TAD parametrizados - Exemplos


Java


              Tipos gen´ricos mais comuns: cole¸˜es (LinkedList, ArrayList,
                        e                       co
              etc.)
              Antes do Java 5.0: cole¸˜es aceitavam qualquer tipo (classe
                                     co
              Object), e n˜o era poss´ definir o tipo dos elementos.
                          a          ıvel
                     Problema: necessidade excessiva de casts (coer¸˜o).
                                                                   ca
                     // ∗ C r i a r um A r r a y L i s t
                     A r r a y L i s t myArray = new A r r a y L i s t ( ) ;
                     // ∗ C r i a r um e l e m e n t o
                     myArray . add ( 0 , new I n t e g e r ( 4 7 ) ) ;
                     // ∗ P e g a r p r i m e i r o o b j e t o da l i s t a
                     I n t e g e r m y I n t = ( I n t e g e r ) myArray . g e t ( 0 ) ;
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Tipos abstratos de dados parametrizados
     TAD parametrizados - Exemplos


Java

              Java 5.0 e mais recentes:
              A r r a y L i s t <I n t e g e r > myArray = new A r r a y L i s t <I n t e g e r >() ;
              myArray . add ( 0 , new I n t e g e r ( 4 7 ) ) ;
              I n t e g e r m y I n t = myArray . g e t ( 0 ) ; // ∗ <−−−− nao p r e c i s a
                      dar cast !
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Tipos abstratos de dados parametrizados
     TAD parametrizados - Exemplos


Java

              Java 5.0 e mais recentes:
              A r r a y L i s t <I n t e g e r > myArray = new A r r a y L i s t <I n t e g e r >() ;
              myArray . add ( 0 , new I n t e g e r ( 4 7 ) ) ;
              I n t e g e r m y I n t = myArray . g e t ( 0 ) ; // ∗ <−−−− nao p r e c i s a
                      dar cast !

              Classes coringa (wildcard):
                Exemplo: Collection<?> ´ o supertipo de todas de todos os
                                         e
              tipos de cole¸˜o em Java. Dessa forma:
                           ca
              v o i d p r i n t C o l l e c t i o n ( C o l l e c t i o n <?> c ) {
                     f o r ( Object e : c ) {
                            System . o u t . p r i n t l n ( e ) ;
                     }

                     c . add ( new O b j e c t ( ) )      // ∗ <−−− E r r o ! POR QUE?
              }
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Constru¸oes de encapsulamento
         c˜




Constru¸oes de encapsulamento
       c˜


       Tipos abstratos de dados s˜o encapsulamentos m´
                                 a                   ınimos, para
      apenas um tipo;

       Constru¸˜es de encapsulamento proveem encapsulamento para
               co
      m´ltiplos tipos;
       u
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Constru¸oes de encapsulamento
         c˜




Constru¸oes de encapsulamento
       c˜


       Tipos abstratos de dados s˜o encapsulamentos m´
                                 a                   ınimos, para
      apenas um tipo;

       Constru¸˜es de encapsulamento proveem encapsulamento para
               co
      m´ltiplos tipos;
       u

        ⇑ Tamanho do programa
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Constru¸oes de encapsulamento
         c˜




Constru¸oes de encapsulamento
       c˜


       Tipos abstratos de dados s˜o encapsulamentos m´
                                 a                   ınimos, para
      apenas um tipo;

       Constru¸˜es de encapsulamento proveem encapsulamento para
               co
      m´ltiplos tipos;
       u

        ⇑ Tamanho do programa =⇒ ⇑ Dificuldade de gerenciamento
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Constru¸oes de encapsulamento
         c˜




Constru¸oes de encapsulamento
       c˜


       Tipos abstratos de dados s˜o encapsulamentos m´
                                 a                   ınimos, para
      apenas um tipo;

       Constru¸˜es de encapsulamento proveem encapsulamento para
               co
      m´ltiplos tipos;
       u

       ⇑ Tamanho do programa =⇒ ⇑ Dificuldade de gerenciamento +
      ⇑ Tempo de recompila¸˜o;
                          ca

       Solu¸˜o: organizar programas em cole¸˜es logicamente
            ca                             co
      relacionadas.
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Constru¸oes de encapsulamento
         c˜
     Exemplos de constru¸˜es de encapsulamento
                        co


C/C++



      Headers (cabe¸alhos)
                   c
              Mantˆm prot´tipos das fun¸˜es, tipos e classes
                  e      o             co
              C´digo do cliente ´ compilado junto com a especifica¸˜o
               o                e                                ca
              (header ), n˜o com a implementa¸˜o.
                          a                   ca
              Permite que a implementa¸˜o seja compilada separadamente
                                      ca
              do c´digo cliente.
                  o
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Constru¸oes de encapsulamento
         c˜
     Exemplos de constru¸˜es de encapsulamento
                        co


C++
      Fun¸˜es e classes amigas
         co
          Exemplo: multiplica¸˜o de vetor com matriz:
                              ca
              c l a s s Matrix ;          // ∗∗ D e c l a r a c a o da c l a s s e
              c l a s s Vector {
                      f r i e n d V e c t o r m u l t i p l y ( c o n s t M a t r i x &, c o n s t V e c t o r
                              &) ;
                       ...
              };
              c l a s s M a t r i x { // ∗∗ D e f i n i c a o da c l a s s e
                      f r i e n d V e c t o r m u l t i p l y ( c o n s t M a t r i x &, c o n s t V e c t o r
                              &) ;
                       ...
              };
              // ∗∗ A f u n             que u s a o s o b j e t o s V e c t o r e M a t r i x
              V e c t o r m u l t i p l y ( c o n s t M a t r i x& ml , c o n s t V e c t o r& v l ) {
                       ...
              }

              Classes tamb´m podem ser amigas de outras classes
                          e
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Constru¸oes de encapsulamento
         c˜
     Exemplos de constru¸˜es de encapsulamento
                        co


C++




      TAREFA!
        1 Classes amigas violam o princ´
                                       ıpio do encapsulamento? Se sim,
          o qu˜o grave ´ essa viola¸˜o?
              a        e           ca
          2   Qual a melhor maneira de implementar o exemplo acima em
              uma linguagem sem classes e fun¸˜es amigas (como Java,
                                              co
              Python, etc.) sem quebrar o encapsulamento?
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Encapsulamento de nomes




Encapsulamento de nomes



        Problema: V´rios desenvolvedores escrevendo um sistema grande.
                   a

       Unidades l´gicas devem ser independentes, por´m capazes de
                  o                                 e
      trabalhar juntas

       Como evitar que sejam criadas vari´veis, m´todos e classes com o
                                         a       e
      mesmo nome acidentalmente?

       O problema acentua-se com a utiliza¸˜o de v´rias bibliotecas.
                                          ca      a
      Como garantir que n˜o haver´ nomes repetidos?
                         a       a
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Encapsulamento de nomes
     Namespaces do C++


Namespaces do C++

      // ∗∗ s t a c k . h
      namespace m y s t a c k {
           // D e c l a r a es da p i l h a
      }

      // ∗∗ main . cpp v e r s i o n 1
      ...
      mystack : : s t a c k s t k ;
      s t k . pus h ( 2 ) ;

      // ∗∗ main . cpp v e r s i o n 2
      u s i n g mystack : : s t a c k ;
      stack stk ;

      // ∗∗ main . cpp v e r s i o n 3
      u s i n g namespace m y s t a c k ;
      stack stk ;
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Encapsulamento de nomes
     Pacotes do Java


Pacotes do Java


        Classes em um pacote s˜o parcialmente amigas
                              a

        Defini¸˜o: package br.uem.din.example.stack;
             ca

       Uso sem importa¸˜o: new
                      ca
      br.uem.din.example.stack.GenericStack();

       Importando apenas GenericStack: import
      br.uem.din.example.stack.GenericStack;

       Importando todas classes do pacote: import
      br.uem.din.example.stack.*;
Tipos Abstratos de Dados (TAD) e Encapsulamento
  Encapsulamento de nomes
     M´dulos do Ruby
      o


M´dulos do Ruby
 o

        Cole¸˜o de m´todos e constantes;
            ca      e
      #Modulo
      module M y S t u f f
          PI = 3.114159265
          d e f M y S t u f f . mymethod1 ( p1 )
          ...
          end
          d e f M y S t u f f . mymethod2 ( p2 )
          ...
          end
      end

      #Uso :
      r e q u i r e ’ myStuffMod ’
      ...
      M y S t u f f . mymethod1 ( x )
      ...

More Related Content

What's hot

02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5César Augusto Pessôa
 
Exercício resolvido normalização
Exercício resolvido normalizaçãoExercício resolvido normalização
Exercício resolvido normalizaçãoTicianne Darin
 
Banco de Dados Conceitos
Banco de Dados ConceitosBanco de Dados Conceitos
Banco de Dados ConceitosCleber Ramos
 
Mer - Modelo Entidade Relacionamento
Mer - Modelo Entidade RelacionamentoMer - Modelo Entidade Relacionamento
Mer - Modelo Entidade RelacionamentoRademaker Siena
 
Sql - Introdução ao mysql
Sql - Introdução ao mysqlSql - Introdução ao mysql
Sql - Introdução ao mysqlArley Rodrigues
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Banco de Dados II Aula 11 - Gerenciamento de transação (transações - fundamen...
Banco de Dados II Aula 11 - Gerenciamento de transação (transações - fundamen...Banco de Dados II Aula 11 - Gerenciamento de transação (transações - fundamen...
Banco de Dados II Aula 11 - Gerenciamento de transação (transações - fundamen...Leinylson Fontinele
 
Banco de Dados I - Aula Prática - Criando o Primeiro Banco
Banco de Dados I - Aula Prática - Criando o Primeiro BancoBanco de Dados I - Aula Prática - Criando o Primeiro Banco
Banco de Dados I - Aula Prática - Criando o Primeiro BancoLeinylson Fontinele
 
Banco de Dados II Aula Dinâmica 1 (Perguntas e Respostas)
Banco de Dados II Aula Dinâmica 1 (Perguntas e Respostas)Banco de Dados II Aula Dinâmica 1 (Perguntas e Respostas)
Banco de Dados II Aula Dinâmica 1 (Perguntas e Respostas)Leinylson Fontinele
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Marcos Castro
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosIgor Takenami
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Banco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoBanco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoLeinylson Fontinele
 

What's hot (20)

Introdução a Bancos de Dados
Introdução a Bancos de DadosIntrodução a Bancos de Dados
Introdução a Bancos de Dados
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
 
Exercício resolvido normalização
Exercício resolvido normalizaçãoExercício resolvido normalização
Exercício resolvido normalização
 
Banco de Dados Conceitos
Banco de Dados ConceitosBanco de Dados Conceitos
Banco de Dados Conceitos
 
Mer - Modelo Entidade Relacionamento
Mer - Modelo Entidade RelacionamentoMer - Modelo Entidade Relacionamento
Mer - Modelo Entidade Relacionamento
 
Sql - Introdução ao mysql
Sql - Introdução ao mysqlSql - Introdução ao mysql
Sql - Introdução ao mysql
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Bancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geralBancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geral
 
Banco de Dados II Aula 11 - Gerenciamento de transação (transações - fundamen...
Banco de Dados II Aula 11 - Gerenciamento de transação (transações - fundamen...Banco de Dados II Aula 11 - Gerenciamento de transação (transações - fundamen...
Banco de Dados II Aula 11 - Gerenciamento de transação (transações - fundamen...
 
Banco de Dados I - Aula Prática - Criando o Primeiro Banco
Banco de Dados I - Aula Prática - Criando o Primeiro BancoBanco de Dados I - Aula Prática - Criando o Primeiro Banco
Banco de Dados I - Aula Prática - Criando o Primeiro Banco
 
Banco de Dados II Aula Dinâmica 1 (Perguntas e Respostas)
Banco de Dados II Aula Dinâmica 1 (Perguntas e Respostas)Banco de Dados II Aula Dinâmica 1 (Perguntas e Respostas)
Banco de Dados II Aula Dinâmica 1 (Perguntas e Respostas)
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
POO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em JavaPOO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em Java
 
Lista de exercícios em Bash (resolvida)
Lista de exercícios em Bash (resolvida) Lista de exercícios em Bash (resolvida)
Lista de exercícios em Bash (resolvida)
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Aula 4 banco de dados
Aula 4   banco de dados Aula 4   banco de dados
Aula 4 banco de dados
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Banco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e EspecializaçãoBanco de Dados I Aula 06 - Generalização e Especialização
Banco de Dados I Aula 06 - Generalização e Especialização
 
Introdução ao MySQL
Introdução ao MySQLIntrodução ao MySQL
Introdução ao MySQL
 

Viewers also liked

Viewers also liked (14)

Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estruturas de dados
Estruturas de dadosEstruturas de dados
Estruturas de dados
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
 
Data Structures In Scala
Data Structures In ScalaData Structures In Scala
Data Structures In Scala
 
Google chrome os
Google chrome osGoogle chrome os
Google chrome os
 
Estruturação e modulação de um programa
Estruturação e modulação de um programaEstruturação e modulação de um programa
Estruturação e modulação de um programa
 
Criando módulos em java
Criando módulos em javaCriando módulos em java
Criando módulos em java
 
Chrome OS
Chrome OSChrome OS
Chrome OS
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Aula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oopAula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oop
 
Apostila Chrome
Apostila ChromeApostila Chrome
Apostila Chrome
 
Purely Functional Data Structures in Scala
Purely Functional Data Structures in ScalaPurely Functional Data Structures in Scala
Purely Functional Data Structures in Scala
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Aula básica de internet
Aula básica de internetAula básica de internet
Aula básica de internet
 

Similar to TAD e Encapsulamento

Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02thomasdacosta
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADLeinylson Fontinele
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADLeinylson Fontinele
 
1. Introdução a Sistemas de BD
1. Introdução a Sistemas de BD 1. Introdução a Sistemas de BD
1. Introdução a Sistemas de BD Marília Mendes
 
Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019Eduardo S. Pereira
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Softwareelliando dias
 
Isc aula 5 - estrutura e organização da informação
Isc   aula 5 - estrutura e organização da informaçãoIsc   aula 5 - estrutura e organização da informação
Isc aula 5 - estrutura e organização da informaçãoFábio Andrade
 
Perguntas engenharia de software
Perguntas engenharia de softwarePerguntas engenharia de software
Perguntas engenharia de softwareAndré Vieira
 
Aula 01 introdução e conceitos
Aula 01   introdução e conceitosAula 01   introdução e conceitos
Aula 01 introdução e conceitosRoitier Gonçalves
 
ResoluçãO Cgu Ti (Amostra) 2006
ResoluçãO Cgu Ti (Amostra) 2006ResoluçãO Cgu Ti (Amostra) 2006
ResoluçãO Cgu Ti (Amostra) 2006Walter Cunha
 
Bancos de Dados para Bibliotecarios
Bancos de Dados para BibliotecariosBancos de Dados para Bibliotecarios
Bancos de Dados para BibliotecariosLuciano Ramalho
 
01 banco de dados-basico
01 banco de dados-basico01 banco de dados-basico
01 banco de dados-basicoAmadeo Santos
 

Similar to TAD e Encapsulamento (20)

Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02
 
Introdução à Estrutura de Dados
Introdução à Estrutura de DadosIntrodução à Estrutura de Dados
Introdução à Estrutura de Dados
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
 
Pged 03
Pged 03Pged 03
Pged 03
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
 
1. Introdução a Sistemas de BD
1. Introdução a Sistemas de BD 1. Introdução a Sistemas de BD
1. Introdução a Sistemas de BD
 
Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019
 
Apostila modelagem de banco de dados
Apostila modelagem de banco de dadosApostila modelagem de banco de dados
Apostila modelagem de banco de dados
 
Dbmod
DbmodDbmod
Dbmod
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Isc aula 5 - estrutura e organização da informação
Isc   aula 5 - estrutura e organização da informaçãoIsc   aula 5 - estrutura e organização da informação
Isc aula 5 - estrutura e organização da informação
 
Perguntas engenharia de software
Perguntas engenharia de softwarePerguntas engenharia de software
Perguntas engenharia de software
 
Scc0241m01revisao
Scc0241m01revisaoScc0241m01revisao
Scc0241m01revisao
 
Banco de dados
Banco de dadosBanco de dados
Banco de dados
 
Aula 01 introdução e conceitos
Aula 01   introdução e conceitosAula 01   introdução e conceitos
Aula 01 introdução e conceitos
 
ResoluçãO Cgu Ti (Amostra) 2006
ResoluçãO Cgu Ti (Amostra) 2006ResoluçãO Cgu Ti (Amostra) 2006
ResoluçãO Cgu Ti (Amostra) 2006
 
Bancos de Dados para Bibliotecarios
Bancos de Dados para BibliotecariosBancos de Dados para Bibliotecarios
Bancos de Dados para Bibliotecarios
 
01 banco de dados-basico
01 banco de dados-basico01 banco de dados-basico
01 banco de dados-basico
 
Banco de dados aula 2
Banco de dados  aula 2Banco de dados  aula 2
Banco de dados aula 2
 
Banco de Dados - Aula 02
Banco de Dados - Aula 02Banco de Dados - Aula 02
Banco de Dados - Aula 02
 

More from 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
 
Introdução à Programação Orientada a Objetos Usando Java
Introdução à Programação Orientada a Objetos Usando JavaIntrodução à Programação Orientada a Objetos Usando Java
Introdução à Programação Orientada a Objetos Usando JavaHelio 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
 

More from Helio Henrique L. C. Monte-Alto (14)

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
 
Suporte à Programação Orientada a Objetos
Suporte à Programação Orientada a ObjetosSuporte à Programação Orientada a Objetos
Suporte à Programação Orientada a Objetos
 
Introdução à Programação Orientada a Objetos Usando Java
Introdução à Programação Orientada a Objetos Usando JavaIntrodução à Programação Orientada a Objetos Usando Java
Introdução à Programação Orientada a Objetos Usando Java
 
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
 

TAD e Encapsulamento

  • 1. Tipos Abstratos de Dados (TAD) e Encapsulamento Tipos Abstratos de Dados (TAD) e Encapsulamento Cap´ ıtulo 11 (Livro do Sebesta) Helio Henrique L. C. Monte-Alto Disciplina: Paradigma de Programa¸˜o Imperativa e Orientada ca a Objetos 2012
  • 2. Tipos Abstratos de Dados (TAD) e Encapsulamento T´picos o 1 Conceito de abstra¸˜o ca Tipos de abstra¸˜o ca 2 Introdu¸˜o ` abstra¸˜o de dados ca a ca Tipos de dados definidos pelo usu´rio a TAD definidos pelo usu´rio - Exemplo a 3 Quest˜es de projeto o 4 Exemplos de linguagens Ada C++ Java Ruby 5 Tipos abstratos de dados parametrizados TAD parametrizados - Exemplos 6 Constru¸˜es de encapsulamento co Exemplos de constru¸˜es de encapsulamento co 7 Encapsulamento de nomes
  • 3. Tipos Abstratos de Dados (TAD) e Encapsulamento Conceito de abstra¸˜o ca Conceito de abstra¸˜o ca
  • 4. Tipos Abstratos de Dados (TAD) e Encapsulamento Conceito de abstra¸˜o ca Conceito de abstra¸˜o ca Defini¸˜o ca Abstra¸˜o ´ uma vis˜o ou representa¸˜o de uma entidade que ca e a ca inclui apenas os atributos mais significantes.
  • 5. Tipos Abstratos de Dados (TAD) e Encapsulamento Conceito de abstra¸˜o ca Conceito de abstra¸˜o ca Defini¸˜o ca Abstra¸˜o ´ uma vis˜o ou representa¸˜o de uma entidade que ca e a ca inclui apenas os atributos mais significantes. Objetivo A abstra¸˜o em linguagens de programa¸˜o (LP) ´ uma arma para ca ca e lidar com a complexidade, tornando um programa grande e/ou complicado mais f´cil de ser implementado e mantido a
  • 6. Tipos Abstratos de Dados (TAD) e Encapsulamento Conceito de abstra¸˜o ca Tipos de abstra¸˜o ca Tipos de abstra¸˜o em LP ca Abstra¸˜o de processos ca Subprogramas (fun¸˜es, procedimentos, m´todos) co e Esconde detalhes da implementa¸˜o ca Permite reuso Ex: sortInt(list) Abstra¸˜o de dados ca Tipos de dados abstratos (structs, classes) Encapsulamento Instˆncia: objeto a Ex: listas, fila, pilha, registros, ´rvores, ponto flutuante a
  • 7. Tipos Abstratos de Dados (TAD) e Encapsulamento Introdu¸˜o ` abstra¸˜o de dados ca a ca Tipos de dados definidos pelo usu´rio a Tipos de dados definidos pelo usu´rio a Caracter´ ısticas TADs s˜o unidades sint´ticas que definem um tipo tal que: a a A interface (ou especifica¸˜o) do tipo n˜o depende da real ca a representa¸˜o dos dados ou da implementa¸˜o das opera¸˜es ca ca co sobre o tipo; A representa¸˜o real ´ oculta do programa que a utiliza. ca e Vantagens Oculta¸˜o de informa¸˜o ca ca Maior confiabilidade Baixo acoplamento com os clientes do tipo
  • 8. Tipos Abstratos de Dados (TAD) e Encapsulamento Introdu¸˜o ` abstra¸˜o de dados ca a ca Tipos de dados definidos pelo usu´rio a Tipos de dados definidos pelo usu´rio a
  • 9. Tipos Abstratos de Dados (TAD) e Encapsulamento Introdu¸˜o ` abstra¸˜o de dados ca a ca Tipos de dados definidos pelo usu´rio a Tipos de dados definidos pelo usu´rio a
  • 10. Tipos Abstratos de Dados (TAD) e Encapsulamento Introdu¸˜o ` abstra¸˜o de dados ca a ca TAD definidos pelo usu´rio - Exemplo a Tipos de dados definidos pelo usu´rio - Exemplo a Opera¸˜es (interface) sobre uma estrutura de pilha: co create(stack) destroy(stack) empty(stack) push(stack, element) pop(stack) top(stack)
  • 11. Tipos Abstratos de Dados (TAD) e Encapsulamento Introdu¸˜o ` abstra¸˜o de dados ca a ca TAD definidos pelo usu´rio - Exemplo a Tipos de dados definidos pelo usu´rio - Exemplo a Exemplo de c´digo do cliente: o ... create(stk1); push(stk1, color1); push(stk1, color2); if(! empty(stk1)) temp = top(stk1); ... Quest˜o: Vamos supor que a implementa¸˜o original dessa pilha a ca utilizasse lista est´tica. O que devemos fazer se precisarmos a modificar a estrutura de dados para lista ligada? A mudan¸a c afetar´ o c´digo cliente? a o
  • 12. Tipos Abstratos de Dados (TAD) e Encapsulamento Introdu¸˜o ` abstra¸˜o de dados ca a ca TAD definidos pelo usu´rio - Exemplo a Tipos de dados definidos pelo usu´rio - Exemplo a Exemplo de c´digo do cliente: o ... create(stk1); push(stk1, color1); push(stk1, color2); if(! empty(stk1)) temp = top(stk1); ... Quest˜o: Vamos supor que a implementa¸˜o original dessa pilha a ca utilizasse lista est´tica. O que devemos fazer se precisarmos a modificar a estrutura de dados para lista ligada? A mudan¸a c afetar´ o c´digo cliente? a o ˜ R: NAO, pois a interface n˜o precisa ser modificada, apenas a a implementa¸˜o.ca
  • 13. Tipos Abstratos de Dados (TAD) e Encapsulamento Quest˜es de projeto o Quest˜es de projeto o Unidade sint´tica para defini¸˜o dos tipos e subprogramas a ca Opera¸˜es embutidas comuns co atribui¸˜o ca compara¸˜es co iteradores acessores construtores destruidores Tipos abstratos parametrizados Controle de acesso
  • 14. Tipos Abstratos de Dados (TAD) e Encapsulamento Exemplos de linguagens Ada Ada Encapsulamento Constru¸˜es chamadas packages, divididas em duas partes, que co tamb´m s˜o packages: e a specification package body package
  • 15. Tipos Abstratos de Dados (TAD) e Encapsulamento Exemplos de linguagens Ada Ada - Exemplo Especifica¸˜o para pilha: ca package S t a c k P a c k i s −− As e n t i d a d e s v i s i v e i s , ou i n t e r f a c e p u b l i c a type Stack Type i s l i m i t e d p r i v a t e ; M a x S i z e : c o n s t a n t := 1 0 0 ; f u n c t i o n Empty ( S t k : i n S t a c k T y p e ) r e t u r n B o o l e a n ; p r o c e d u r e Push ( S t k : i n o ut S t a c k T y p e ; E l e m e n t : i n Integer ) ; p r o c e d u r e Pop ( S t k : i n o ut S t a c k T y p e ) ; f u n c t i o n Top ( S t k : i n S t a c k T y p e ) r e t u r n I n t e g e r ; −− A p a r t e o c u l t a d o s c l i e n t e s private type L i s t T y p e i s a r r a y ( 1 . . Max Size ) of I n t e g e r ; type Stack Type i s record List : List Type ; Topsub : I n t e g e r r a n g e 0 . . M a x S i z e := 0 ; end r e c o r d ; end S t a c k P a c k ;
  • 16. Tipos Abstratos de Dados (TAD) e Encapsulamento Exemplos de linguagens Ada Ada - Exemplo Trecho da implementa¸˜o (body): ca w i t h Ada . T e x t I O ; u s e Ada . T e x t I O ; package body S t a c k P a c k i s f u n c t i o n Empty ( S t k : i n S t a c k T y p e ) r e t u r n B o o l e a n i s begin r e t u r n S t k . Topsum = 0 ; end Empty ; p r o c e d u r e Push ( S t k : i n o ut S t a c k T y p e ; E l e m e n t : i n Integer ) is begin i f S t k . Topsum >= M a x S i z e t h e n P u t L i n e ( ”ERROR − S t a c k o v e r f l o w ” ) ; else S t k . Topsub := S t k . Topsub + 1 ; S t k . L i s t ( Topsub ) := E l e m e n t ; end i f ; end Push ;
  • 17. Tipos Abstratos de Dados (TAD) e Encapsulamento Exemplos de linguagens Ada Ada - Exemplo Exemplo de uso: w i t h S t a c k P a c k , Ada . T e x t I O ; u s e S t a c k P a c k , Ada . T e x t I O ; procedure Use Stacks i s Topone : I n t e g e r ; S t a c k : S t a c k T y p e ; −− C r i a um o b j e t o do t i p o Stack Type begin Push ( S t a c k , 4 2 ) ; Push ( S t a c k , 1 7 ) ; Topone := Top ( S t a c k ) ; Pop ( S t a c k ) ; ... end U s e S t a c k s ;
  • 18. Tipos Abstratos de Dados (TAD) e Encapsulamento Exemplos de linguagens C++ C++ Suporte ` programa¸˜o orientada a objetos. a ca Duas constru¸˜es para suporte a tipos abstratos de dados: co struct: define apenas dados class: define dados (membros de dados) e opera¸˜es sobre co os dados (fun¸˜es-membro) co
  • 19. Tipos Abstratos de Dados (TAD) e Encapsulamento Exemplos de linguagens C++ C++ - Encapsulamento Encapsulamento Duas categorias de membros de dados e fun¸˜es-membro: co Membros da classe Membros da instˆncia a Aloca¸˜o da instˆncia de uma classe ca a Est´tica a Dinˆmica na pilha a Dinˆmica na heap a Duas maneiras de definir uma fun¸˜o membro: ca Defini¸˜o completa na classe (chamada inlined) ca Somente o cabe¸alho c
  • 20. Tipos Abstratos de Dados (TAD) e Encapsulamento Exemplos de linguagens C++ C++ - Oculta¸˜o de Informa¸˜o ca ca Oculta¸˜o de informa¸˜o ca ca Cl´usulas (controle de acesso): a private public protected Todos os membros de dados devem ser privados para garantir a oculta¸˜o de informa¸˜o ca ca Apenas m´todos devem ser p´blicos. O conjunto dos m´todos e u e p´blicos constitui a interface da classe. u Construtores e destruidores
  • 21. Tipos Abstratos de Dados (TAD) e Encapsulamento Exemplos de linguagens Java Java Bastante similar ao C++ Principais diferen¸as: c Todos os TAD s˜o classes a Todos objetos alocados na heap M´todos s´ podem ser definidos dentro da classe e o Sem m´todo destruidor (coletor de lixo) e
  • 22. Tipos Abstratos de Dados (TAD) e Encapsulamento Exemplos de linguagens Ruby Ruby Classes similares a Java e C++ Classes dinˆmicas a Membros podem ser adicionados e removidos em tempo de execu¸˜o ca Maior flexibilidade, por´m menor legibilidade e Tudo ´ objeto! e
  • 23. Tipos Abstratos de Dados (TAD) e Encapsulamento Tipos abstratos de dados parametrizados Tipos abstratos de dados parametrizados E se precisarmos criar pilhas para diferentes tipos de dados? Qual parece a solu¸˜o mais atraente? ca
  • 24. Tipos Abstratos de Dados (TAD) e Encapsulamento Tipos abstratos de dados parametrizados Tipos abstratos de dados parametrizados E se precisarmos criar pilhas para diferentes tipos de dados? Qual parece a solu¸˜o mais atraente? ca 1 Senta e chora.
  • 25. Tipos Abstratos de Dados (TAD) e Encapsulamento Tipos abstratos de dados parametrizados Tipos abstratos de dados parametrizados E se precisarmos criar pilhas para diferentes tipos de dados? Qual parece a solu¸˜o mais atraente? ca 1 Senta e chora. 2 Implementar uma pilha para cada tipo de dado (Ex: IntegerStack, StringStack, FloatStack, etc.)
  • 26. Tipos Abstratos de Dados (TAD) e Encapsulamento Tipos abstratos de dados parametrizados Tipos abstratos de dados parametrizados E se precisarmos criar pilhas para diferentes tipos de dados? Qual parece a solu¸˜o mais atraente? ca 1 Senta e chora. 2 Implementar uma pilha para cada tipo de dado (Ex: IntegerStack, StringStack, FloatStack, etc.) 3 Criar uma unica implementa¸˜o de pilha que aceita qualquer ´ ca tipo de dado.
  • 27. Tipos Abstratos de Dados (TAD) e Encapsulamento Tipos abstratos de dados parametrizados Tipos abstratos de dados parametrizados E se precisarmos criar pilhas para diferentes tipos de dados? Qual parece a solu¸˜o mais atraente? ca 1 Senta e chora. 2 Implementar uma pilha para cada tipo de dado (Ex: IntegerStack, StringStack, FloatStack, etc.) 3 Criar uma unica implementa¸˜o de pilha que aceita qualquer ´ ca tipo de dado. TAD parametrizados Obviamente, a alternativa correta ´ a (3). TAD parametrizados ´ e e uma quest˜o de projeto pr´pria de linguagens estaticamente a o tipadas.
  • 28. Tipos Abstratos de Dados (TAD) e Encapsulamento Tipos abstratos de dados parametrizados TAD parametrizados - Exemplos C++ e Ada Ada Adiciona-se: generic type T is private, antes da declara¸˜o da package ca Para cada instˆncia (ex: Float, Integer), o compilador cria um a c´digo correspondente o C++ Adiciona-se: template <class T>, antes da declara¸˜o da ca class Similarmente ao Ada, v´rias instˆncias do c´digo da classe s˜o a a o a criadas em tempo de compila¸˜o para cada tipo utilizado. ca
  • 29. Tipos Abstratos de Dados (TAD) e Encapsulamento Tipos abstratos de dados parametrizados TAD parametrizados - Exemplos Java Tipos gen´ricos mais comuns: cole¸˜es (LinkedList, ArrayList, e co etc.) Antes do Java 5.0: cole¸˜es aceitavam qualquer tipo (classe co Object), e n˜o era poss´ definir o tipo dos elementos. a ıvel Problema: necessidade excessiva de casts (coer¸˜o). ca // ∗ C r i a r um A r r a y L i s t A r r a y L i s t myArray = new A r r a y L i s t ( ) ; // ∗ C r i a r um e l e m e n t o myArray . add ( 0 , new I n t e g e r ( 4 7 ) ) ; // ∗ P e g a r p r i m e i r o o b j e t o da l i s t a I n t e g e r m y I n t = ( I n t e g e r ) myArray . g e t ( 0 ) ;
  • 30. Tipos Abstratos de Dados (TAD) e Encapsulamento Tipos abstratos de dados parametrizados TAD parametrizados - Exemplos Java Java 5.0 e mais recentes: A r r a y L i s t <I n t e g e r > myArray = new A r r a y L i s t <I n t e g e r >() ; myArray . add ( 0 , new I n t e g e r ( 4 7 ) ) ; I n t e g e r m y I n t = myArray . g e t ( 0 ) ; // ∗ <−−−− nao p r e c i s a dar cast !
  • 31. Tipos Abstratos de Dados (TAD) e Encapsulamento Tipos abstratos de dados parametrizados TAD parametrizados - Exemplos Java Java 5.0 e mais recentes: A r r a y L i s t <I n t e g e r > myArray = new A r r a y L i s t <I n t e g e r >() ; myArray . add ( 0 , new I n t e g e r ( 4 7 ) ) ; I n t e g e r m y I n t = myArray . g e t ( 0 ) ; // ∗ <−−−− nao p r e c i s a dar cast ! Classes coringa (wildcard): Exemplo: Collection<?> ´ o supertipo de todas de todos os e tipos de cole¸˜o em Java. Dessa forma: ca v o i d p r i n t C o l l e c t i o n ( C o l l e c t i o n <?> c ) { f o r ( Object e : c ) { System . o u t . p r i n t l n ( e ) ; } c . add ( new O b j e c t ( ) ) // ∗ <−−− E r r o ! POR QUE? }
  • 32. Tipos Abstratos de Dados (TAD) e Encapsulamento Constru¸oes de encapsulamento c˜ Constru¸oes de encapsulamento c˜ Tipos abstratos de dados s˜o encapsulamentos m´ a ınimos, para apenas um tipo; Constru¸˜es de encapsulamento proveem encapsulamento para co m´ltiplos tipos; u
  • 33. Tipos Abstratos de Dados (TAD) e Encapsulamento Constru¸oes de encapsulamento c˜ Constru¸oes de encapsulamento c˜ Tipos abstratos de dados s˜o encapsulamentos m´ a ınimos, para apenas um tipo; Constru¸˜es de encapsulamento proveem encapsulamento para co m´ltiplos tipos; u ⇑ Tamanho do programa
  • 34. Tipos Abstratos de Dados (TAD) e Encapsulamento Constru¸oes de encapsulamento c˜ Constru¸oes de encapsulamento c˜ Tipos abstratos de dados s˜o encapsulamentos m´ a ınimos, para apenas um tipo; Constru¸˜es de encapsulamento proveem encapsulamento para co m´ltiplos tipos; u ⇑ Tamanho do programa =⇒ ⇑ Dificuldade de gerenciamento
  • 35. Tipos Abstratos de Dados (TAD) e Encapsulamento Constru¸oes de encapsulamento c˜ Constru¸oes de encapsulamento c˜ Tipos abstratos de dados s˜o encapsulamentos m´ a ınimos, para apenas um tipo; Constru¸˜es de encapsulamento proveem encapsulamento para co m´ltiplos tipos; u ⇑ Tamanho do programa =⇒ ⇑ Dificuldade de gerenciamento + ⇑ Tempo de recompila¸˜o; ca Solu¸˜o: organizar programas em cole¸˜es logicamente ca co relacionadas.
  • 36. Tipos Abstratos de Dados (TAD) e Encapsulamento Constru¸oes de encapsulamento c˜ Exemplos de constru¸˜es de encapsulamento co C/C++ Headers (cabe¸alhos) c Mantˆm prot´tipos das fun¸˜es, tipos e classes e o co C´digo do cliente ´ compilado junto com a especifica¸˜o o e ca (header ), n˜o com a implementa¸˜o. a ca Permite que a implementa¸˜o seja compilada separadamente ca do c´digo cliente. o
  • 37. Tipos Abstratos de Dados (TAD) e Encapsulamento Constru¸oes de encapsulamento c˜ Exemplos de constru¸˜es de encapsulamento co C++ Fun¸˜es e classes amigas co Exemplo: multiplica¸˜o de vetor com matriz: ca c l a s s Matrix ; // ∗∗ D e c l a r a c a o da c l a s s e c l a s s Vector { f r i e n d V e c t o r m u l t i p l y ( c o n s t M a t r i x &, c o n s t V e c t o r &) ; ... }; c l a s s M a t r i x { // ∗∗ D e f i n i c a o da c l a s s e f r i e n d V e c t o r m u l t i p l y ( c o n s t M a t r i x &, c o n s t V e c t o r &) ; ... }; // ∗∗ A f u n que u s a o s o b j e t o s V e c t o r e M a t r i x V e c t o r m u l t i p l y ( c o n s t M a t r i x& ml , c o n s t V e c t o r& v l ) { ... } Classes tamb´m podem ser amigas de outras classes e
  • 38. Tipos Abstratos de Dados (TAD) e Encapsulamento Constru¸oes de encapsulamento c˜ Exemplos de constru¸˜es de encapsulamento co C++ TAREFA! 1 Classes amigas violam o princ´ ıpio do encapsulamento? Se sim, o qu˜o grave ´ essa viola¸˜o? a e ca 2 Qual a melhor maneira de implementar o exemplo acima em uma linguagem sem classes e fun¸˜es amigas (como Java, co Python, etc.) sem quebrar o encapsulamento?
  • 39. Tipos Abstratos de Dados (TAD) e Encapsulamento Encapsulamento de nomes Encapsulamento de nomes Problema: V´rios desenvolvedores escrevendo um sistema grande. a Unidades l´gicas devem ser independentes, por´m capazes de o e trabalhar juntas Como evitar que sejam criadas vari´veis, m´todos e classes com o a e mesmo nome acidentalmente? O problema acentua-se com a utiliza¸˜o de v´rias bibliotecas. ca a Como garantir que n˜o haver´ nomes repetidos? a a
  • 40. Tipos Abstratos de Dados (TAD) e Encapsulamento Encapsulamento de nomes Namespaces do C++ Namespaces do C++ // ∗∗ s t a c k . h namespace m y s t a c k { // D e c l a r a es da p i l h a } // ∗∗ main . cpp v e r s i o n 1 ... mystack : : s t a c k s t k ; s t k . pus h ( 2 ) ; // ∗∗ main . cpp v e r s i o n 2 u s i n g mystack : : s t a c k ; stack stk ; // ∗∗ main . cpp v e r s i o n 3 u s i n g namespace m y s t a c k ; stack stk ;
  • 41. Tipos Abstratos de Dados (TAD) e Encapsulamento Encapsulamento de nomes Pacotes do Java Pacotes do Java Classes em um pacote s˜o parcialmente amigas a Defini¸˜o: package br.uem.din.example.stack; ca Uso sem importa¸˜o: new ca br.uem.din.example.stack.GenericStack(); Importando apenas GenericStack: import br.uem.din.example.stack.GenericStack; Importando todas classes do pacote: import br.uem.din.example.stack.*;
  • 42. Tipos Abstratos de Dados (TAD) e Encapsulamento Encapsulamento de nomes M´dulos do Ruby o M´dulos do Ruby o Cole¸˜o de m´todos e constantes; ca e #Modulo module M y S t u f f PI = 3.114159265 d e f M y S t u f f . mymethod1 ( p1 ) ... end d e f M y S t u f f . mymethod2 ( p2 ) ... end end #Uso : r e q u i r e ’ myStuffMod ’ ... M y S t u f f . mymethod1 ( x ) ...