SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
Prof. Adriano Teixeira de Souza
   Um Tipo Abstrato de Dados é caracterizado
    por

    ◦ Um conjunto de valores
    ◦ Um conjunto de operações

   Não é caracterizado pela sua representação
    interna de dados




                          Prof. Adriano Teixeira de Souza
   Os dados internos de um TAD são privativos

    ◦ Código da aplicação não consegue manipular
    ◦ Manipulável apenas pelas operações definidas em
      um TAD

   A representação de dados é intercambiável,
    sem afetar o código da aplicação

    ◦ Apenas as operações precisam ser recodificadas




                           Prof. Adriano Teixeira de Souza
   Um TAD deve possuir um contrato que

    ◦ Especifique o seu conjunto de atributos
    ◦ Especifique a assinatura de suas operações (i.e.,
      nome da operação, tipos de parâmetros, tipos de
      resultados e comportamento observável)


   O contrato não especifica a representação
    dos dados nem os algoritmos necessários
    para as operações



                            Prof. Adriano Teixeira de Souza
   O comportamento observável de uma
    operação é o seu efeito da forma que é
    ‘observado’ pelo código da aplicação

    ◦ Exemplo de um comportamento observável: busca
      em um array

    ◦ Exemplos de algoritmos com um comportamento:
      busca linear, busca binária




                          Prof. Adriano Teixeira de Souza
   A implementação de um TAD deve seguir
    rigorosamente aquilo que foi especificado no seu
    contrato

   A implementação de um programa deve utilizar
    um TAD apenas na forma como suas operações
    são definidas no contrato

   Separação de Interesses (Separation of Concerns)
    ◦ A implementação de um TAD não se preocupa com os
      programas que irão utilizá-lo
    ◦ A implementação de um programa não se preocupa em
      como um TAD foi implementado
    ◦ Propriedade fundamental para o projeto, implementação
      e manutenção de grandes sistemas


                             Prof. Adriano Teixeira de Souza
   Requisitos:
    ◦ Os valores armazenados podem ser datas do
      passado, do presente ou do futuro
    ◦ Deve ser possível:
       construir uma data a partir de um ano a, mês m, e dia-
        no-mês d.
      comparar datas
      fornecer uma data no formato “a-m-d”
      avançar uma data por n dias




                              Prof. Adriano Teixeira de Souza
   Possível contrato, expresso na forma de um
        esquema de declaração de classe
public class Date {
            // Cada valor de Date é uma data atual, do passado ou do futuro
 private ...;
 public Date (int a, int m, int d);
            // Constrói uma data com ano a, mês m, dia do mês d

    public int compareTo (Date that);
              // retorna -1 se é anterior a este,
              // ou 0 se a data é igual a este,
              // ou +1 se data é posterior a este

    public String toString ();
              // retorna a data no formato “a-m-d”

    public void advance (int n);
             // Avança a data de n dias (onde n >= 0)
}



                                                Prof. Adriano Teixeira de Souza
   Código de aplicação válido

Date hoje = …;
Date pascoa = new Date(2001, 4, 15);
hoje.advance(16);
if (hoje.compareTo(pascoa) < 0)
System.out.println(hoje.toString());


       Código de aplicação inválido

hoje.d += 16;
System.out.println(hoje.a + '-' + hoje.m + '-' + hoje.d);



                              Prof. Adriano Teixeira de Souza
   Uma implementação de um TAD inclui:
    ◦ A escolha de uma representação de dados
    ◦ A escolha de um algoritmo para cada operação

   A representação dos dados deve ser privativa
    (private)

   A representação de dados deve cobrir todos
    os valores possíveis

   Os algoritmos devem ser consistentes com a
    representação de dados

                           Prof. Adriano Teixeira de Souza
public class Date {
  // Cada instância de Date corresponde a uma data presente, do
  // passado ou do futuro.
  // A data é representada pelo número do ano a, pelo mês m, e
  // um dia-no-mês d
  private int a, m, d;
  public Date (int a, int m, int d) {
  // Construtor
  this.a = a; this.m = m; this.d = d;
  ...




                              Prof. Adriano Teixeira de Souza
public int compareTo (Date that) {

    return (this.y < that.y ? -1 :
    this.y > that.y ? +1 :
    this.m < that.m ? -1 :
    this.m > that.m ? +1 :
    this.d < that.d ? -1 :
    this.d > that.d ? +1 : 0);

}




                                     Prof. Adriano Teixeira de Souza
public String toString () {
         // retorna a data no formato “a-m-d”
         return (this.a + '-' + this.m + '-‘ + this.d);
    }
    public void advance (int n) {
         // Avança a data de n dias (onde n >= 0)
         // omitido
    }
}




                                   Prof. Adriano Teixeira de Souza
   2ª Implementação de Date


public class Date {
  // Esta data é representada por um número inteiro (data em
época)
  // (onde 0 representa 1º de janeiro de 2000):
  private int d;
  public Date (int a, int m, int d) {
  …;
  this.d = …;
}




                              Prof. Adriano Teixeira de Souza
public int compareTo (Date that) {
      return (this.d < that.d ? -1 :
      this.d > that.d ? +1 : 0);
    }
    public String toString () {
      int a, m, d;
      …;
      return (a + '-' + m + '-' + d);
    }
    public void advance (int n) {
      this.d += n;
    }
}




                                  Prof. Adriano Teixeira de Souza
   As operações são suficientes se conseguem
    atender todos os requisitos de um TAD

    ◦ Pode uma aplicação ser escrita inteiramente em
      termos das chamadas a estas operações?

   Uma operação é necessária se é essencial para
    atender os requisitos do TAD

    ◦ Pode ser omitida?

   Um TAD bem projetado provê operações que são
    necessárias e suficientes para os seus requisitos


                             Prof. Adriano Teixeira de Souza
public class Date {
  private …;
  public Date (int a, int m, int d);
  public int compareTo (Date that);
  public String toString ();
  public void advance (int n);
}


   São necessárias e suficientes?




                                Prof. Adriano Teixeira de Souza
public class Date {
  private …;
  public Date (int a, int m, int d);
  public int getYear ();
  public int getMonth ();
  public int getDay ();
}




                                  Prof. Adriano Teixeira de Souza
public class Date {
  private …;
  public Date (int a, int m, int d);
  public int compareTo (Date that);
  public String toString ();
  public void advance (int n);
  public void advance1Day ();
}




                                Prof. Adriano Teixeira de Souza
   Construção de TADs a partir de outros
    existentes

    ◦ Exemplo: TAD Person
    ◦ Birthday é uma instância de Date




                            Prof. Adriano Teixeira de Souza
public class Person {
  // Cada valor de Person possui nome, endereço e data de
nascimento
  private ...;                            Importação de tipo externo
  private Date birthday;
  public Date (int a, int m, int d);
        // Constrói uma data com ano a, mês m, dia do mês d
  public int compareTo (Date that);
        // retorna -1 se é anterior a este,
        // ou 0 se a data é igual a este,
        // ou +1 se data é posterior a este
  public String toString ();
        // retorna a data no formato “a-m-d”
  public void advance (int n);
        // Avança a data de n dias (onde n >= 0)
}


                                  Prof. Adriano Teixeira de Souza
   Interface java.util.List permite listas.

   Interface java.util.Set permite conjuntos.

   Interface java.util.Map permite mapeamentos

   Pacotes java.awt, java.io, java.util, etc., permitem
    vários TADs




                              Prof. Adriano Teixeira de Souza
   Em Java, o conceito
    de Interface é a
    maneira natural de
    se especificar um
    TAD

   Interface: conteúdo
    vazio – apenas uma
    interface pública
    para um tipo



                          Prof. Adriano Teixeira de Souza
   Distinção entre tipos de dados e tipos
    abstratos de dados
    ◦ TADs não possuem representação, apenas valores e
      operações

   TADs
    ◦ Contrato/especificação
    ◦ Implementação

   Critérios para projetar um TAD

   Exemplos de TADs disponíveis em Java

                               Prof. Adriano Teixeira de Souza

Contenu connexe

Similaire à O que é um Tipo Abstrato de Dados (TAD

Estrutura de Dados - Características da linguagem C - 1
Estrutura de Dados - Características da linguagem C - 1Estrutura de Dados - Características da linguagem C - 1
Estrutura de Dados - Características da linguagem C - 1Adriano Teixeira de Souza
 
Manipulação de Datas em Java
Manipulação de Datas em JavaManipulação de Datas em Java
Manipulação de Datas em JavaSidney Roberto
 
Pg sem3-1505102
Pg sem3-1505102Pg sem3-1505102
Pg sem3-1505102csmp
 
Pg sem3ex
Pg sem3exPg sem3ex
Pg sem3excsmp
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesLeinylson Fontinele
 
mod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasmod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasdiogoa21
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03thomasdacosta
 
Algoritmos e Técnicas de Programação - Aula 06
Algoritmos e Técnicas de Programação - Aula 06Algoritmos e Técnicas de Programação - Aula 06
Algoritmos e Técnicas de Programação - Aula 06thomasdacosta
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)Armando Daniel
 
Manipulação de datas em java
Manipulação de datas em javaManipulação de datas em java
Manipulação de datas em javaNorton Guimarães
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dadosgjpbg
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2Leandro Lopes
 

Similaire à O que é um Tipo Abstrato de Dados (TAD (15)

Estrutura de Dados - Características da linguagem C - 1
Estrutura de Dados - Características da linguagem C - 1Estrutura de Dados - Características da linguagem C - 1
Estrutura de Dados - Características da linguagem C - 1
 
Manipulação de Datas em Java
Manipulação de Datas em JavaManipulação de Datas em Java
Manipulação de Datas em Java
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
9 structs e ponteiros
9   structs e ponteiros9   structs e ponteiros
9 structs e ponteiros
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
 
Pg sem3-1505102
Pg sem3-1505102Pg sem3-1505102
Pg sem3-1505102
 
Pg sem3ex
Pg sem3exPg sem3ex
Pg sem3ex
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e Funções
 
mod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicasmod5-estruturas-dadosdinamicas
mod5-estruturas-dadosdinamicas
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03
 
Algoritmos e Técnicas de Programação - Aula 06
Algoritmos e Técnicas de Programação - Aula 06Algoritmos e Técnicas de Programação - Aula 06
Algoritmos e Técnicas de Programação - Aula 06
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
 
Manipulação de datas em java
Manipulação de datas em javaManipulação de datas em java
Manipulação de datas em java
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2
 

Plus de Adriano Teixeira de Souza

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Adriano Teixeira de Souza
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasAdriano Teixeira de Souza
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Adriano Teixeira de Souza
 
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
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSAdriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaAdriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Adriano Teixeira de Souza
 

Plus de Adriano Teixeira de Souza (20)

Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Estrutura de dados em Java - Recursividade
Estrutura de dados em Java - RecursividadeEstrutura de dados em Java - Recursividade
Estrutura de dados em Java - Recursividade
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
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)
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 

O que é um Tipo Abstrato de Dados (TAD

  • 2. Um Tipo Abstrato de Dados é caracterizado por ◦ Um conjunto de valores ◦ Um conjunto de operações  Não é caracterizado pela sua representação interna de dados Prof. Adriano Teixeira de Souza
  • 3. Os dados internos de um TAD são privativos ◦ Código da aplicação não consegue manipular ◦ Manipulável apenas pelas operações definidas em um TAD  A representação de dados é intercambiável, sem afetar o código da aplicação ◦ Apenas as operações precisam ser recodificadas Prof. Adriano Teixeira de Souza
  • 4. Um TAD deve possuir um contrato que ◦ Especifique o seu conjunto de atributos ◦ Especifique a assinatura de suas operações (i.e., nome da operação, tipos de parâmetros, tipos de resultados e comportamento observável)  O contrato não especifica a representação dos dados nem os algoritmos necessários para as operações Prof. Adriano Teixeira de Souza
  • 5. O comportamento observável de uma operação é o seu efeito da forma que é ‘observado’ pelo código da aplicação ◦ Exemplo de um comportamento observável: busca em um array ◦ Exemplos de algoritmos com um comportamento: busca linear, busca binária Prof. Adriano Teixeira de Souza
  • 6. A implementação de um TAD deve seguir rigorosamente aquilo que foi especificado no seu contrato  A implementação de um programa deve utilizar um TAD apenas na forma como suas operações são definidas no contrato  Separação de Interesses (Separation of Concerns) ◦ A implementação de um TAD não se preocupa com os programas que irão utilizá-lo ◦ A implementação de um programa não se preocupa em como um TAD foi implementado ◦ Propriedade fundamental para o projeto, implementação e manutenção de grandes sistemas Prof. Adriano Teixeira de Souza
  • 7. Requisitos: ◦ Os valores armazenados podem ser datas do passado, do presente ou do futuro ◦ Deve ser possível:  construir uma data a partir de um ano a, mês m, e dia- no-mês d.  comparar datas  fornecer uma data no formato “a-m-d”  avançar uma data por n dias Prof. Adriano Teixeira de Souza
  • 8. Possível contrato, expresso na forma de um esquema de declaração de classe public class Date { // Cada valor de Date é uma data atual, do passado ou do futuro private ...; public Date (int a, int m, int d); // Constrói uma data com ano a, mês m, dia do mês d public int compareTo (Date that); // retorna -1 se é anterior a este, // ou 0 se a data é igual a este, // ou +1 se data é posterior a este public String toString (); // retorna a data no formato “a-m-d” public void advance (int n); // Avança a data de n dias (onde n >= 0) } Prof. Adriano Teixeira de Souza
  • 9. Código de aplicação válido Date hoje = …; Date pascoa = new Date(2001, 4, 15); hoje.advance(16); if (hoje.compareTo(pascoa) < 0) System.out.println(hoje.toString());  Código de aplicação inválido hoje.d += 16; System.out.println(hoje.a + '-' + hoje.m + '-' + hoje.d); Prof. Adriano Teixeira de Souza
  • 10. Uma implementação de um TAD inclui: ◦ A escolha de uma representação de dados ◦ A escolha de um algoritmo para cada operação  A representação dos dados deve ser privativa (private)  A representação de dados deve cobrir todos os valores possíveis  Os algoritmos devem ser consistentes com a representação de dados Prof. Adriano Teixeira de Souza
  • 11. public class Date { // Cada instância de Date corresponde a uma data presente, do // passado ou do futuro. // A data é representada pelo número do ano a, pelo mês m, e // um dia-no-mês d private int a, m, d; public Date (int a, int m, int d) { // Construtor this.a = a; this.m = m; this.d = d; ... Prof. Adriano Teixeira de Souza
  • 12. public int compareTo (Date that) { return (this.y < that.y ? -1 : this.y > that.y ? +1 : this.m < that.m ? -1 : this.m > that.m ? +1 : this.d < that.d ? -1 : this.d > that.d ? +1 : 0); } Prof. Adriano Teixeira de Souza
  • 13. public String toString () { // retorna a data no formato “a-m-d” return (this.a + '-' + this.m + '-‘ + this.d); } public void advance (int n) { // Avança a data de n dias (onde n >= 0) // omitido } } Prof. Adriano Teixeira de Souza
  • 14. 2ª Implementação de Date public class Date { // Esta data é representada por um número inteiro (data em época) // (onde 0 representa 1º de janeiro de 2000): private int d; public Date (int a, int m, int d) { …; this.d = …; } Prof. Adriano Teixeira de Souza
  • 15. public int compareTo (Date that) { return (this.d < that.d ? -1 : this.d > that.d ? +1 : 0); } public String toString () { int a, m, d; …; return (a + '-' + m + '-' + d); } public void advance (int n) { this.d += n; } } Prof. Adriano Teixeira de Souza
  • 16. As operações são suficientes se conseguem atender todos os requisitos de um TAD ◦ Pode uma aplicação ser escrita inteiramente em termos das chamadas a estas operações?  Uma operação é necessária se é essencial para atender os requisitos do TAD ◦ Pode ser omitida?  Um TAD bem projetado provê operações que são necessárias e suficientes para os seus requisitos Prof. Adriano Teixeira de Souza
  • 17. public class Date { private …; public Date (int a, int m, int d); public int compareTo (Date that); public String toString (); public void advance (int n); }  São necessárias e suficientes? Prof. Adriano Teixeira de Souza
  • 18. public class Date { private …; public Date (int a, int m, int d); public int getYear (); public int getMonth (); public int getDay (); } Prof. Adriano Teixeira de Souza
  • 19. public class Date { private …; public Date (int a, int m, int d); public int compareTo (Date that); public String toString (); public void advance (int n); public void advance1Day (); } Prof. Adriano Teixeira de Souza
  • 20. Construção de TADs a partir de outros existentes ◦ Exemplo: TAD Person ◦ Birthday é uma instância de Date Prof. Adriano Teixeira de Souza
  • 21. public class Person { // Cada valor de Person possui nome, endereço e data de nascimento private ...; Importação de tipo externo private Date birthday; public Date (int a, int m, int d); // Constrói uma data com ano a, mês m, dia do mês d public int compareTo (Date that); // retorna -1 se é anterior a este, // ou 0 se a data é igual a este, // ou +1 se data é posterior a este public String toString (); // retorna a data no formato “a-m-d” public void advance (int n); // Avança a data de n dias (onde n >= 0) } Prof. Adriano Teixeira de Souza
  • 22. Interface java.util.List permite listas.  Interface java.util.Set permite conjuntos.  Interface java.util.Map permite mapeamentos  Pacotes java.awt, java.io, java.util, etc., permitem vários TADs Prof. Adriano Teixeira de Souza
  • 23. Em Java, o conceito de Interface é a maneira natural de se especificar um TAD  Interface: conteúdo vazio – apenas uma interface pública para um tipo Prof. Adriano Teixeira de Souza
  • 24. Distinção entre tipos de dados e tipos abstratos de dados ◦ TADs não possuem representação, apenas valores e operações  TADs ◦ Contrato/especificação ◦ Implementação  Critérios para projetar um TAD  Exemplos de TADs disponíveis em Java Prof. Adriano Teixeira de Souza