A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.

Apresentações semelhantes


Apresentação em tema: "Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano."— Transcrição da apresentação:

1 Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento rsarmento@catolica-es.edu.br rasarmento@gmail.com Professor: André Cypriano M. Costa

2 Introdução 2 Muitos dos programas que desenvolvemos possuem tipos de dados que são característicos de cada programa. E para que possamos fazer uma programação segura, precisamos definir claramente esse tipo de dados e como fazer para acessar as informações que ele armazena. Desta forma precisamos definir um Tipo Abstrato de Dados.

3 O que são Tipos Abstratos de Dados? 3 Um Tipo de Dados é um conjunto de valores munido de um conjunto de operações. Um exemplo de tipo de dados são: int, float, char. Já um Tipo Abstrato de Dados (TAD) especifica uma classe de dados definida pelo usuário em termos de suas propriedades abstratas: Descreve o comportamento de um objeto que independe da sua implementação, unicamente através dessas propriedades (funções ou métodos) abstratas. Não há preocupação de como essas propriedades seriam implementadas numa linguagem de programação.

4 O que são Tipos Abstratos de Dados? 4 A especificação de um TAD é composto de três partes: Especificação Sintática: define o nome do tipo, suas operações e o tipo dos argumentos das operações. Dizemos que define a assinatura ou interface do TAD. Especificação Semântica: contém um conjunto de equações algébricas, que descreve, independentemente de uma implementação específica, as propriedades das operações. Especificação das Restrições: estabelece as condições que devem ser satisfeitas antes e depois da aplicação das operações. Exemplos de TADs: listas, pilhas, filas, árvores, etc.

5 Características dos TADs 5 Um TAD define o comportamento de um tipo de dado sem se preocupar com sua implementação. Entretanto, esta especificação não é reconhecida pelo computador. É preciso criar uma representação concreta (através de um tipo concreto ou representacional) que nos diz: como um TAD é implementado; como seus dados são colocados dentro do computador; e como estes dados são manipulados por suas operações (funções).

6 Características dos TADs 6 A chave para se conseguir verdadeiramente implementar tipos abstratos de dados é aplicar o conceito de Independência de Representação : Um programa deveria ser projetado de forma que a representação de um tipo de dado possa ser modificada sem que isto interfira no restante do programa. A aplicação deste conceito é melhor realizada através da modularização do programa.

7 Exemplo de Implementação de um TAD 7 Vamos considerar a criação de um TAD para representar um ponto no espaço R 2. Para isso, devemos definir um tipo abstrato, que denominaremos de Ponto, e o conjunto de funções que operam sobre esse tipo. Neste exemplo, vamos considerar as seguintes operações: cria: operação que cria um ponto com coordenadas x e y; libera: operação que libera a memória alocada por um ponto; 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.

8 Exemplo de Implementação de um TAD 8 A interface desse módulo pode ser dada pelo código a seguir: Arquivo.h // TAD: Ponto (x,y) typedef struct ponto Ponto; // Função cria: Aloca e retorna um ponto com coordenadas (x,y) Ponto* cria (float x, float y);

9 Exemplo de Implementação de um TAD 9 // Função libera: Libera a memória de um ponto previamente // criado. void libera (Ponto *p); / Função atribui: Atribui novos valores às coordenadas de um // ponto void atribui (Ponto *p, float x, float y); // Função distancia: Retorna a distância entre dois pontos float distancia (Ponto *p1, Ponto *p2);

10 Exemplo de Implementação de um TAD 10 Os programas que quiserem utilizar esse TAD só terão acesso às informações que possam ser obtidas através das funções exportadas pelo arquivo ponto.h. Agora, mostraremos uma implementação para esse tipo abstrato de dados. O arquivo de implementação do módulo (arquivo ponto.c) deve sempre incluir o arquivo de interface do módulo.

11 Exemplo de Implementação de um TAD 11 Isto é necessário por duas razões: Podem existir definições na interface que são necessárias na implementação. No nosso caso, por exemplo, precisamos da definição do tipo Ponto. É garantirmos que as funções implementadas correspondem às funções da interface. Como o protótipo das funções exportadas é incluído, o compilador verifica, por exemplo, se os parâmetros das funções implementadas equivalem aos parâmetros dos protótipos.

12 Exemplo de Implementação de um TAD 12 Ponto.c #include #include "ponto.h” Essas são as bibliotecas necessárias para o programa.

13 Exemplo de Implementação de um TAD 13 Como só precisamos guardar as coordenadas de um ponto, podemos definir a estrutura ponto da seguinte forma: struct ponto { float x; float y; };

14 Exemplo de Implementação de um TAD 14 A função que cria um ponto dinamicamente deve alocar a estrutura que representa o ponto e inicializar os seus campos: Ponto* cria (float x, float y) { Ponto* p = (Ponto*) malloc(sizeof(Ponto)); if (p == NULL) { printf("Memória insuficiente!\n"); exit(1); } p->x = x; p->y = y; return p; }

15 Exemplo de Implementação de um TAD 15 Para esse TAD, a função que libera um ponto deve apenas liberar a estrutura que foi criada dinamicamente através da função cria: void libera (Ponto* p) { free(p); }

16 Exemplo de Implementação de um TAD 16 A função para atribuir valores às coordenadas de um ponto é de fácil implementação, como pode ser visto a seguir. void atribui (Ponto* p, float x, float y) { p->x = x; p->y = y; }

17 Exemplo de Implementação de um TAD 17 Já a operação para calcular a distância entre dois pontos pode ser implementada da seguinte forma: float distancia (Ponto *p1, Ponto *p2) { float dx = p2->x – p1->x; float dy = p2->y – p1->y; return sqrt(dx*dx + dy*dy); }


Carregar ppt "Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano."

Apresentações semelhantes


Anúncios Google