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?