Programação de ComputadoresII - SICCCiber · 2019. 11. 3. · soma(), produtoInterno(),...

Preview:

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

Recommended