Transcript TAD File

TIPOS ABSTRATOS DE DADOS

Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello

Tipos de Dados

 Conjunto de valores que podem ser assumidos por uma variável ou expressão, atribuídos a uma constante, retornados por uma chamada, etc, em uma dada linguagem de programação

Tipos de Dados

 Tipos primitivos  Também denominados simples ou básicos, representam valores indivisíveis, como int, float, char, ... em C  Tipos compostos  São coleções ou agregados de tipos (simples ou compostos) possivelmente diferentes, como arranjos, strings e dados estruturados:  Por exemplo: struct em C, record em Pascal, object em C++

Tipos de Dados: Pontos de vista

 Do computador  Tipos de dados são vistos como métodos para interpretar o conteúdo da memória do computador  como interpretar os bits/bytes  Dos programadores:  O que desejam fazer p. ex., somar dois inteiros  O programador se importa mais com o conceito matemático de inteiro do que com a representação no hardware  Um tipo inteiro ´ suporta ´ certas operações...

Tipos Abstratos de Dados (TAD)

   Um TAD:   Descrição de alto nível que especifica quais operações são suportadas por uma estrutura de dados

Mas

que não fornece detalhes de como são realizadas (estruturas de dados e algoritmos) Exemplo:    TAD: Conjunto Simples Tipos de Dados: Inteiros Operações: Interseção, União e Diferença Implementação em diferentes linguagens:   Arquivos de Cabeçalho“.h”de C, Interfaces Java ...

Estruturas de Dados

  Coleções de unidades (células) capazes de suportar diferentes tipos de dados e que podem se conectar e inter-relacionar de diferentes formas  Arranjos e registros são exemplos de estruturas de dados elementares EDs são realizações de TADs, diferindo entre si pelas regras ou esquemas de disposição e manipulação dos dados:  Um mesmo TAD pode ser realizado com estruturas de dados diferentes:    fila com arranjo ou lista encadeada, grafo com lista de arestas ou matriz de adjacências, etc.

Estruturas de Dados

Descrevem de forma sistemática maneiras de organizar, acessar e manipular dados  É um nível intermediário de descrição entre o TAD e a implementação concreta do código em alguma linguagem

TAD Estrutura de Dados Programa

Tipos Abstratos de Dados (TAD)

 estabelece o conceito de tipo de dado divorciado da sua representação  Pode ser formalmente definido como um modelo matemático, por meio de um par (v,o) em que

V é um conjunto de valores

O é um conjunto de operações sobre esses valores

  

x.: Número real v=

o= {+, -, *, /, =, <, >, <=, >=}

Tipos Abstratos de Dados (TAD)

  Ocultamento de informação (information hiding)  Um TAD requer que operações sejam definidas sobre os dados sem uma representação específica Um programador que usa um tipo de dado float,

int, etc não precisa saber como tais valores são representados internamente:

 Mesmo princípio pode ser aplicado a listas, pilhas, filas, ...

 Programador pode utilizar como uma “caixa preta”  apenas por meio das operações que ela suporta

Programando com TAD

Programador descreve o TAD em dois módulos separados:  Interface de acesso (TAD conceitual):  apresenta as operações e valores possíveis 

Implementação

 contém a representação da estrutura de dados e a implementação de cada operação

Programando com TAD

Outros programadores:  Usam a TAD por meio da interface de acesso  Sem conhecer os detalhes de representação  Não acessam o módulo de implementação  Idealmente, a implementação é “invisível”:  Programador usa TAD e cria uma lista de clientes e aplica operações sobre ela,  Sem saber como ela é representada internamente

Vantagens dos TAD

Clareza: Estrutura interna do TAD é abstraída  Corretidão: TAD foi testado e funciona corretamente  Reuso: TAD pode ser usado por diferentes programas  Manutenção:  Mudanças na implementação do TAD não afetam o código fonte dos programas que o utilizam se a interface de acesso não mudar  decorrência do ocultamento de informação

Implementação de TAD em C

Usando modularização:  Interface: Arquivo de cabeçalhos, associado a cada módulo, com:  cabeçalhos das funções oferecidas pelo módulo e,  os tipos de dados que ele exporte  typedef’s, struct’s, etc.  Tem o mesmo nome do porém com a extensão .h 

Implementação

 arquivo .c com os programas

Implementação de TAD em C

/* Racionais.h:

Interface

de TAD Números Racionais */ /* Tipo Exportado */ Typedef struct{ intNum, Den; } Racional; /* Funções Exportadas */ Racional Define(intN, intD); /* Gera um número racional a partir de dois inteiros, sendo o segundo não nulo */ Racional Soma(Racional R1, Racional R2); /* Soma dois números racionais R1 e R2 e retorna o resultado */ Racional Multiplica(Racional R1, Racional R2); /* Multiplica dois números racionais R1 e R2 e retorna o resultado */ Int TestaIgualdade(Racional R1, Racional R2); /* Verifica se 2 números racionais R1 e R2 sao iguais */

Implementação de TAD em C

#include #include"Racionais.h" Void main(void){ /* Teste do TAD: Exercício... */ } /* Soma dois números racionais R1 e R2 e retorna o resultado */ Racional Soma(Racional R1, Racional R2) { … }

Impementação do TAD em C++

 TADs podem ser implementados como classes em C++  Os conceitos de programação orientada a objetos estendem os conceitos de TAD

Checando

 Escrever um programa C que executa operações sobre números racionais, utilizando o TAD definido em aula

Perguntas?