Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados

1.840 visualizações

Publicada em

Publicada em: Tecnologia
1 comentário
0 gostaram
Estatísticas
Notas
  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.840
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
58
Comentários
1
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados

  1. 1. Prof. Adriano Teixeira de Souza
  2. 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. 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. 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. 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. 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. 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. 8.  Possível contrato, expresso na forma de um esquema de declaração de classepublic 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. 9.  Código de aplicação válidoDate 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álidohoje.d += 16;System.out.println(hoje.a + - + hoje.m + - + hoje.d); Prof. Adriano Teixeira de Souza
  10. 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. 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. 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. 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. 14.  2ª Implementação de Datepublic 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. 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. 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. 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. 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. 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. 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. 21. public class Person { // Cada valor de Person possui nome, endereço e data denascimento 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. 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. 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. 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

×