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,
 Tem

struct’s, etc.
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 <stdio.h>
#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?
Download

TAD File