Documente Academic
Documente Profesional
Documente Cultură
10/23/09
Tpicos Principais
Mdulos e compilao em separado Tipo abstrato de dados
Exemplo 1: TAD Ponto Exemplo 2: TAD Crculo
10/23/09
Arquivo objeto
resultado de compilar um mdulo geralmente com extenso .o ou .obj
Ligador
junta todos os arquivos objeto em um nico arquivo executvel
10/23/09
10/23/09
10/23/09
em geral possui:
nome: o mesmo do mdulo ao qual est associado extenso: .h
10/23/09
#include "arquivo.h"
prottipos de mdulos do usurio
10/23/09
10/23/09
10/23/09
10
um TAD facilita:
a manuteno e a reutilizao de cdigo abstrato = forma de implementao no precisa ser conhecida
para utilizar um TAD necessrio conhecer a sua funcionalidade, mas no a sua implementao
10/23/09
11
pto_cria - funo para criar um tipo Ponto circ_cria - funo para criar um tipo Circulo
10/23/09
12
10/23/09
13
cria cria um ponto com coordenadas x e y libera libera a memria alocada por um ponto acessa retorna as coordenadas de um ponto atribui atribui novos valores s coordenadas de um ponto distancia calcula a distncia entre dois pontos
10/23/09 (c) Dept. Informtica - PUC-Rio 14
/* Funes exportadas */ /* Funo cria - Aloca e retorna um ponto com coordenadas (x,y) */ Ponto* pto_cria (float x, float y); /* Funo libera - Libera a memria de um ponto previamente criado */ void pto_libera (Ponto* p); /* Funo acessa - Retorna os valores das coordenadas de um ponto */ void pto_acessa (Ponto* p, float* x, float* y); /* Funo atribui - Atribui novos valores s coordenadas de um ponto */ void pto_atribui (Ponto* p, float x, float y); /* Funo distancia - Retorna a distncia entre dois pontos */ float 10/23/09 pto_distancia (Ponto* p1, Ponto* p2); (c) Dept. Informtica - PUC-Rio
16
10/23/09
17
Ponto* pto_cria (float x, float y) ... void pto_libera (Ponto* p) ... void pto_acessa (Ponto* p, float* x, float* y) ... void pto_atribui (Ponto* p, float x, float y) ... float pto_distancia (Ponto* p1, Ponto* p2) ...
10/23/09
18
10/23/09
19
10/23/09
20
10/23/09
21
10/23/09
22
10/23/09
23
cria cria um crculo com centro (x,y)e raio r libera libera a memria alocada por um crculo area calcula a rea do crculo interior verifica se um dado ponto est dentro do crculo
10/23/09
24
/* TAD: Crculo */ /* Dependncia de mdulos */ #include "ponto.h" /* Tipo exportado */ typedef struct circulo Circulo;
circulo.h - arquivo com a interface do TAD interface ponto.h includa na interface pois a operao interior faz uso do tipo Ponto
/* Funes exportadas */ /* Funo cria - Aloca e retorna um crculo com centro (x,y) e raio r */ Circulo* circ_cria (float x, float y, float r); /* Funo libera - Libera a memria de um crculo previamente criado */ void circ_libera (Circulo* c); /* Funo area - Retorna o valor da rea do crculo */ float circ_area (Circulo* c); /* Funo interior - Verifica se um dado ponto p est dentro do crculo */ int circ_interior (Circulo* c, Ponto* p);
10/23/09 (c) Dept. Informtica - PUC-Rio 25
#include <stdlib.h> circulo.c - arquivo com o TAD Circulo #include "circulo.h" #define PI 3.14159 struct circulo { Ponto* p; float r; }; Circulo* circ_cria (float x, float y, float r) { Circulo* c = (Circulo*)malloc(sizeof(Circulo)); c->p = pto_cria(x,y); TAD Crculo c->r = r; } usa void circ_libera (Circulo* c) { pto_libera(c->p); free(c); } float circ_area (Circulo* c) { return PI*c->r*c->r; } int circ_interior (Circulo* c, Ponto* p) { float d = pto_distancia(c->p,p); return (d<c->r); }
10/23/09 (c) Dept. Informtica - PUC-Rio 26
TAD Ponto
colunas retorna o nmero de colunas da matriz ilustra diferentes maneiras de implementar um mesmo TAD
10/23/09
27
typedef struct matriz Matriz; Matriz* mat_cria (int m, int n); void mat_libera (Matriz* mat); float mat_acessa (Matriz* mat, int i, int j); void mat_atribui (Matriz* mat, int i, int j, float v); int mat_linhas (Matriz* mat); int mat_colunas (Matriz* mat);
10/23/09
28
10/23/09
29
10/23/09
30
Resumo
Mdulo Arquivo objeto arquivo com funes que representam apenas parte da implementao de um programa completo resultado de compilar um mdulo geralmente com extenso .o ou .obj
Interface de mdulo arquivo contendo apenas os prottipos das funes oferecidas pelo mdulo, e os tipos de dados exportados pelo mdulo TAD define um novo tipo de dado e o conjunto de operaes para manipular dados do tipo
10/23/09
31
Referncias
Waldemar Celes, Renato Cerqueira, Jos Lucas Rangel, Introduo a Estruturas de Dados, Editora Campus (2004) Captulo 9 Tipos abstratos de dados
10/23/09
32