Estruturas de Dados Profº Carlos Alberto Teixeira Batista E-mail: carlos.batista@facape.br carlos36_batista@yahoo.com.br
[...] A abstração é nossa mais importante ferramenta mental para lidar com a complexidade. Portanto, um problema complexo não poderia ser visto imediatamente em termos de instruções de computador [...] mas, antes, em termos de entidades naturais ao próprio problema, abstraído de maneira adequada. Niklaus Wirth (1989)
Significados do termo abstrair Segundo o Dicionário Aurélio Considerar isoladamente um ou mais elementos de um todo. Em programação Imaginar um problema maior dividido em problemas menores, para resolvê-los isoladamente e, posteriormente, uni-los, produzindo a solução do problema.
Um Tipo Abstrato de Dados (TAD) consiste em um módulo que define um novo tipo de dado e um conjunto de operações para manipular dados desse tipo. É também conhecido como Tipo de Dado Abstrato (TDA) ou tipo de dados definido pelo usuário. Os TAD s encapsulam um tipo de dados e seus valores e definem ou exportam uma interface externa de procedimentos que acessam e manipulam os dados.
Separação entre conceito (definição do tipo) e implementação das operações Visibilidade da estrutura interna do tipo fica limitada às operações Aplicações que usam o TAD são denominadas clientes do tipo de dado Cliente tem acesso somente à forma abstrata do TAD
Um TAD é um tipo de dado que satisfaz as condições: A representação ou a definição do tipo e as operações sobre variáveis desse tipo estão contidas numa única unidade sintática: MÓDULO A representação interna do tipo (a implementação) não é visível de outras unidades sintáticas, de modo que só as operações oferecidas na definição do tipo podem ser usadas com as variáveis desse tipo.
Acesso e mudanças nos dados podem somente ser feitos através dos procedimentos de interface. Um Tipo Abstrato de Dados apresenta as seguintes características: Uma definição de tipo que permite que as unidades de programa declarem suas variáveis, mas oculta a sua representação; Um conjunto de operações para manipular objetos do tipo.
Vantagens: Programas organizados em unidades lógicas que podem ser compiladas separadamente; Modificações nas representações ou operações do tipo são feitas em uma única área do programa; Clientes não veem os detalhes da representação, portanto seu código não depende dessa representação;
Vantagens: Confiabilidade. Clientes não podem mudar as representações intencionalmente ou acidentalmente. Reutilização. Possibilidade de utilização do mesmo TAD em diversas aplicações diferentes
Projeto de um TAD Envolve a escolha de operações adequadas para uma determinada estrutura de dados, definindo seu comportamento Dicas para definir um TAD Definir pequeno número de operações; O conjunto de operações deve ser suficiente para realizar as computações necessárias às aplicações que utilizarem o TAD; cada operação deve ter um propósito bem definido, com comportamento constante e coerente;
Exemplo 1: array como tipo abstrato de dados Nome do tipo: vetor Componentes: número de elementos e espaço de armazenamento. Operações: produto_por_escalar (x, k) y soma_dos_elementos (x) a num_elementos (x) n leitura() x imprime (x) Consideremos: x,y do tipo vetor k, n do tipo inteiro a do tipo real
Exemplo 1: array como tipo abstrato de dados PROBLEMA Ler um conjunto de notas de alunos, calcular a média da turma, imprimir as notas lidas e a média da turma.
Exemplo 1: array como tipo abstrato de dados SOLUÇÃO
Exemplo 2: criando tipo abstrato de dados conta Nome do tipo: conta Componentes: registro com os campos referentes aos dados da conta e espaço de armazenamento. Operações: abrirconta (c) creditar (c, v) debitar (c, v) transferir(c1, c2, v) mostrardados(c) Consideremos: c, c1 e c2 do tipo conta v do tipo real
Exemplo 2: criando tipo abstrato de dados conta PROBLEMA Fazer a abertura de duas contas. Creditar e debitar valores nas contas. Realizar a transferência de valores entre as contas e ao final exibir os dados de ambas as contas.
Exemplo 2: criando tipo abstrato de dados conta SOLUÇÃO
Exercícios Utilize o TDA vetor e faça um programa para ler dois conjuntos de pontuações relativas aos resultados obtidos por dois participantes do Rally Paris-Dakar. Calcular a média de cada um e indicar qual deles teve a melhor média. Imprimir as pontuações lidas, as médias e quem obteve a melhor média.
Exercícios Crie um TDA para a representação de um ponto no plano cartesiano. O ponto será representado pelo par ordenado (x, y). Defina as seguintes operações: cria: operação que cria um ponto nas coordenadas x e y; acessa: operação que devolve as coordenadas de um ponto; atribui: operação que atribui novos valores às coordenadas de um ponto; distancia: operação que calcula a distância entre dois pontos.