Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
ProgramaçãodeComputadores II9. Tipo Abstrato de Dados
Raphael M.
2019.1
Raphael M. Aula 09.T i po Abstratode Dados
TipoAbstratode Dados
Tipo Abstrato de Dados (TAD) é um modelo no qual a definição de um conjunto de dados e suas operações é semântica.
Foco nos aspectos essenciais do dado. Abstração de como ele foi implementado.Num bom programa o main() só faz declarações e chamadas para TADs.O TAD é um caixa preta que resolve problemas, fornece dados sem que o usuário precise saber como o problema está sendo resolvido e como os dados estão sendorepresentados.
Raphael M. Aula 09.T i po Abstratode Dados
TipoAbstratode Dados
TiposSão as variáveis que serão utilizadas, normalmente declarada comstruct e typedef.
OperaçõesSão operações que são realizadas nos dados, normalmente sãofunções que ou retornam ou possuem como argumento o tipodefinido.
Raphael M. Aula 09.T i po Abstratode Dados
TipoAbstratode Dados
TiposSão as variáveis que serão utilizadas, normalmente declarada comstruct e typedef.
Estudante: nome, matricula, notaP, notaT
OperaçõesSão operações que são realizadas nos dados, normalmente sãofunções que ou retornam ou possuem como argumento o tipodefinido.
calculaMedia(), defineNome(), validaMatricula()
Raphael M. Aula 09.T i po Abstratode Dados
TipoAbstratode Dados
TiposSão as variáveis que serão utilizadas, normalmente declarada comstruct e typedef.
Estudante: nome, matricula, notaP, notaT Vetor: elementos
OperaçõesSão operações que são realizadas nos dados, normalmente sãofunções que ou retornam ou possuem como argumento o tipodefinido.
calculaMedia(), defineNome(), validaMatricula() soma(), produtoInterno(), produtoVetorial()
Raphael M. Aula 09.T i po Abstratode Dados
TipoAbstratode Dados
TiposSão as variáveis que serão utilizadas, normalmente declarada comstruct e typedef.
Estudante: nome, matricula, notaP, notaT Vetor: elementosPontos: x, y,z
OperaçõesSão operações que são realizadas nos dados, normalmente sãofunções que ou retornam ou possuem como argumento o tipodefinido.
calculaMedia(), defineNome(), validaMatricula() soma(), produtoInterno(), produtoVetorial() saoIguais(), calculaDistancia(), valorX()
Raphael M. Aula 09.T i po Abstratode Dados
Fração
Fracao f ;
Fracao = cr iaFracao(int den, i n t num); i n t porZero (Fracao f ) ;i n t ehNegativa (Fracao f ) ;i n t valorDenominador (Fracao f ) ; i n t valorNumerador (Fracao f ) ; void reduz (Fracao f ) ;Fracao soma (Fracao f 1 , Fracao f 2 ) ; Fracao sub t ra i (Fracao f 1 , Fracao f 2 ) ; Fracao mult ipl ica (Fracao f 1 , Fracao f 2 ) ; Fracao divide (Fracao f 1 , Fracao f 2 ) ;
Raphael M. Aula 09.T i po Abstratode Dados
Fração
typedef s t r u c t fracao { i n t numerador;i n t denominador;
} Fracao;
i n t porZero (Fracao f ) {i f (f.denominador == 0) re turn 1 ;e l se re turn 0 ;
}
Fracao mult ipl ica (Fracao f 1 , Fracao f2 ) { Fracao f ;f.numerador = f1.numerador * f2.numerador; f.denominador = f1.denominador * f2.denominador; re turn f ;
}
Raphael M. Aula 09.T i po Abstratode Dados
Fração
#define NUM 0#define DEN 1typedef i n t Fracao[2];
i n t porZero (Fracao f ) {i f (f[DEN] == 0) re turn 1 ;e l se re turn 0 ;
}
Fracao mult ipl ica (Fracao f 1 , Fracao f2 ) { Fracao f ;f[NUM] = f1[NUM] * f2[NUM];f[DEN] = f1[DEN] * f2[DEN];re turn f ;
}
Raphael M. Aula 09.T i po Abstratode Dados
TipoAbstratode Dados
O usuário não vê a implementação.Não há referência à maneira que os dados são representados ouutilizados.Separação do programa, da especificação e da implementação.
Raphael M. Aula 09.T i po Abstratode Dados
VantagensdoTAD
Mais fácil modificar o código.O código pode ser reutilizado.Mais fácil acharerros.O código podeser compartilhado entre maisdeumprograma.
Raphael M. Aula 09.T i po Abstratode Dados
VantagensdoTAD
Num TAD a implementação deve toda ser abstraída no arquivo principal. Assim, qualquer acesso direto a elementos do TAD é uma violação a essaregra.
#include "fracao.h"
i n t main() {Fracao f1 = criaFracao(10, 3 ) ; Fracao f2 = criaFracao(20, 9 ) ; Fracao f3 = soma ( f 1 , f 2 ) ; re turn 0 ;
}
O arquivo main acima funciona com ambas as implementações de Fração vistas.
Raphael M. Aula 09.T i po Abstratode Dados
Ponto
typedef s t r u c t ponto { i n t x ;i n t y ;
} Ponto;
Ponto definePonto ( i n t x , i n t y ) ;i n t calculaDistancia (Ponto p1, Ponto p2); i n t valorX (Ponto p ) ;i n t valorY (Ponto p ) ;
Raphael M. Aula 09.T i po Abstratode Dados
Circulo
typedef s t r u c t c i rcu lo { Ponto centro ;i n t r a i o ;
} Circulo;
Circulo defineCirculo ( i n t r a i o , Ponto cen t ro ) ; Circulo mudaCentro (Circulo c , Ponto cen t ro ) ; Circulo mudaRaio (Circulo c , i n t r a i o ) ;f l o a t calculaArea (Circulo c ) ; i n t valorRaio (Circulo c ) ; Ponto valorCentro (Circulo c ) ;
Raphael M. Aula 09.T i po Abstratode Dados
Desenho
typedef s t r u c t desenho { Ponto pontos[100]; Circulo c irculos[100]; i n t p ;i n t c ;
} Desenho;
Desenho criaDesenho();Desenho insereCirculo(Desenho d , Circulo c ) ; Desenho removeCirculo(Desenho d , Circulo c ) ; Desenho inserePonto(Desenho d , Ponto p ) ; Desenho removePonto(Desenho d , Ponto p ) ;i n t numeroFormas(Desenho d ) ;
Raphael M. Aula 09.T i po Abstratode Dados
SoftwareemCamadas
Raphael M. Aula 09.T i po Abstratode Dados
Exemplo1: Data
Raphael M. Aula 09.T i po Abstratode Dados
Exemplo1: Data
typedef s t r u c t data { i n t d i a ;i n t mes; i n t ano;
} Data;
Raphael M. Aula 09.T i po Abstratode Dados
Exemplo1: Data
typedef s t r u c t data { i n t d i a ;i n t mes; i n t ano;
} Data;
Data c r iaData( in t d i a , i n t mes, i n t ano); i n t comparaData(Data d1, Data d2);void imprimeData(Data d ) ;Data mudaDia(int d i a , Data d ) ; i n t anoBissexto (Data d ) ;
Raphael M. Aula 09.T i po Abstratode Dados
Exemplo2: Horario
Raphael M. Aula 09.T i po Abstratode Dados
Exemplo2: Horario
typedef s t r u c t horario { i n t hora;i n t minuto; i n t segundo; i n t fuso;
} Horario;
Raphael M. Aula 09.T i po Abstratode Dados
Exemplo2: Horario
typedef s t r u c t horario { i n t hora;i n t minuto; i n t segundo; i n t fuso;
} Horario;
Horario cr iaHorar io( in t hora, i n t min, i n t seg ) ; i n t comparaHorario(Horario h1, Horario h2);void imprimeHorario(Horario h ) ; void horarioDeVerao(Horario *h);
Raphael M. Aula 09.T i po Abstratode Dados
Exemplo3:Conta Bancária
Raphael M. Aula 09.T i po Abstratode Dados
Exemplo3:Conta Bancária
typedef s t r u c t conta { f l o a t sa ldo;f l o a t depositos[100]; f l o a t t ransferencias[100]; char *usuario;i n t senha;
} Conta;
Raphael M. Aula 09.T i po Abstratode Dados
Exemplo3:Conta Bancária
typedef s t r u c t conta { f l o a t sa ldo;f l o a t depositos[100]; f l o a t t ransferencias[100]; char *usuario;i n t senha;
} Conta;
Conta criaConta(char *usuario, i n t senha); void deletaConta(Conta c ) ;void deposi to(f loa t va lo r , Conta c ) ; void saque(f loat va lo r , Conta c ) ;void t r a n s f ( f l o a t va lo r , Conta origem, Conta des t ino ) ; f l o a t saldo(Conta c ) ;
Raphael M. Aula 09.T i po Abstratode Dados
Exercício
Em matemática, função polinomial é uma função que pode ser expressa da forma:
f (x) = anxn + an−1xn−1 +···+ a1x1+a0x0
Projete o TAD para funções polinomiais. Pense em qual seria o tipo de dados e quais operações deveriam ser implementadas.
Raphael M. Aula 09.T i po Abstratode Dados
Exercício: Solução
Projete o TAD para equações polinomiais. Pense em qual seria o tipo de dados e quais funções deveriam ser implementadas.
#define MAX 100
typedef s t r u c t polinomio {i n t coeficientes[MAX];i n t grau;
} Polinomio;
Polinomio criaPolinomio ( i n t grau) ;void insereCoeficiente (Polinomio *p, i n t termo, i n t coe f ) ; Polinomio soma (Polinomio p1, Polinomio p2);Polinomio mult ipl ica (Polinomio p1, Polinomio p2);
Raphael M. Aula 09.T i po Abstratode Dados
ProgramaçãodeComputadores II10. Modularização
RaphaelM.
2019.1
Raphael M. Aula 10. Modularização
SoftwareemCamadas
Raphael M. Aula 10. Modularização
SoftwareemCamadas
Raphael M. Aula 10. Modularização
Arquivos.he .c
O.h(header)contémasestruturasnecessárias,osprotótiposdasfunçõeseasbibliotecaspadrão.Elanãocontémnenhumaimplementação.Oarquivo.cpossuidefatoasimplementaçõesdasfunçõeseincluiapenaso .h.Oarquivoprincipalpossuisomenteafunçãomain()efazchamadasatodasasfunçõeseestruturasimplementadasnasbibliotecas.Umarquivo.cnuncadeveserincluídocomo biblioteca!
Paraincluirumabibliotecapadrãoutilizamos<nome.h>eparaincluirumabibliotecanossautilizamos "nome.h".
Raphael M. Aula 10. Modularização
ponto.h
Raphael M. Aula 10. Modularização
ponto.c
Raphael M. Aula 10. Modularização
circulo.h
Raphael M. Aula 10. Modularização
circulo.c
Raphael M. Aula 10. Modularização
quadrado.h
Raphael M. Aula 10. Modularização
quadrado.c
Raphael M. Aula 10. Modularização
desenho.h
Raphael M. Aula 10. Modularização
desenho.c
Raphael M. Aula 10. Modularização
main.c
Faráchamadasparaasfunçõesdefinidas.Nãofaráacessodiretoanenhum struct.Faráainteraçãodasfunçõescomousuário final.
Raphael M. Aula 10. Modularização
main.c
Raphael M. Aula 10. Modularização
CompilaçãoporLinhadeComando
Cadabiblioteca(conjuntodearquivos.ce.h)deverágerarumobjeto (.o).Oprograma-objetoseráumexecutáveldaquela biblioteca.Aocompilarseuarquivoprincipalmain.cvocêdeveincluircada biblioteca.
Raphael M. Aula 10. Modularização
Criando Objetos
gcc-c<nomedo programa>.c
gcc-cponto.c=⇒ ponto.ogcc-ccirculo.c=⇒ circulo.ogcc-cquadrado.c=⇒ quadrado.ogcc-cdesenho.c=⇒ desenho.o
Raphael M. Aula 10. Modularização
Criando Executável
gcc<nomedoprograma>.c-o<nomedoexecutável><nomedosobjetos>
gccmain.c-omainponto.ocirculo.oquadrado.o desenho.o=⇒ main
Raphael M. Aula 10. Modularização
Makefile
Paraevitarescrevertodasaslinhasdecompilaçãopodemoscriarum Makefile
OarquivodevesechamarMakefileestarnamesmapastaqueoscódigos.Aodigitarmakenoterminal,omakeexecutaráefaráacompilação necessária.Seumconjuntodearquivos.he.cquegerouum.onãofoialteradooMakefileevitaa recompilação.
Raphael M. Aula 10. Modularização
Makefile
Paraevitarescrevertodasaslinhasdecompilaçãopodemoscriarum Makefile
Raphael M. Aula 10. Modularização
#ifndef
Se uma biblioteca é incluída duas vezes em C temos um erro deconflito. Assim, para evitar esse problema usamos no header osseguintes comandos.
#ifndef:Seumtokennãofoidefinido.#ifdef:Seumtokenfoidefinido.#else:Senãoparaqualquerumdosifs.#endif:Fimdasaçõesdeif.
#ifndef TOKEN #define TOKEN
::
#endif
Raphael M. Aula 10. Modularização
#ifndef
Raphael M. Aula 10. Modularização
Códigos
Códigosdisponíveisnositedocurso
Raphael M. Aula 10. Modularização
Exercício
FaçaoTAD,incluindocadaarquivo,paraequaçõespolinomiaiscomleitura,escritaesoma.
Raphael M. Aula 10. Modularização
Exercício: Solução
FaçaoTAD,incluindocadaarquivo, paraequaçõespolinomiais.
polinomio.h
Raphael M. Aula 10. Modularização
Exercício: Solução
FaçaoTAD,incluindocadaarquivo, paraequaçõespolinomiais.
polinomio.cRaphael M. Aula 10. Modularização
Exercício: Solução
FaçaoTAD,incluindocadaarquivo, paraequaçõespolinomiais.
main.c
Raphael M. Aula 10. Modularização