Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La...

12
Agosto 13, Jueves

Transcript of Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La...

Page 1: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en

Agosto13,Jueves

Page 2: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en

Agendaparaestaclase� MetaprogramaciónyProgramaciónGenérica� ArreglosAsociativos�  IntroducciónaÁrboles

Prof. Esp. Ing. José María Sola 269

Page 3: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en

Prof. Esp. Ing. José María Sola 270

Page 4: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en

�  Laprogramacióngenérciapermiteimplementartiposyfuncionesparametrizados

�  Alimplementarunafuncióngenérica,enrealidadestamosimplementandounafamiliadefunciones

�  Lomismoaplicaatipos

�  Lametaprogramaciónesprogramarunconstructoqueleindiquealcompiladorqueprogrameenlenguajefuentepornosotros

�  Nuestroconstructoresultadonoesunprograma,sino,unprogramaparaquelecompiladorprograme

�  ElconstructoenC++estemplate(molde)

�  EnC++,laProgramaciónGenéricaselograconmetaprogramación

�  EnJavanohaymetaprogramación,perosíprogramacióngenérica,conimpactoeneltiempodeejecuciónperoconcódigomásbreve

�  C#yDsiguenunmodelomássimilaraC++

�  Clolograconmétodosnosseguroscomovoid*.

ProgramaciónGenéricayTemplates

Page 5: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en

void PrintArrayInt5(const array<int,5>& x){ for(auto e : x) cout << e << '\t'; cout << '\n';

} PrintArrayInt5(a);

template <size_t n> void PrintArrayInt(const array<int, n>& x){

for(auto e : x) cout << e << '\t'; cout << '\n';

} PrintArrayInt(a);

FamiliadeFuncionessobreTamaño,TipoyAmbosh=ps://josemariasola.wordpress.com/aed/papers#ArraysAndTemplates

template <typename T, size_t n> void PrintArray(const array<T, n>& x){

for(auto e : x) cout << e << '\t'; cout << '\n';

} PrintArray(a);

Prof. Esp. Ing. José María Sola 272

array<int, 5> a = {{1,2,3,4,5}};

Page 6: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en

array<array<int,3>,5> aai35; Matrix<int,5,3> mi53; Matrix<> mi11; Matrix<double> md11; Matrix<char,2> mc22;

template <typename T = int, std::size_t rows = 1, std::size_t columns = rows> using Matrix = std::array< // array std::array< // of arrays T, // of T columns // of columns elements >, rows // of rows elements >;

FamiliadeTipoMatricesporTipo&TamañoyDefaults

Prof. Esp. Ing. José María Sola 273

template <typename T = int, std::size_t rows = 1, std::size_t columns = rows> using Matrix = std::array<std::array<T,columns>,rows>;

Page 7: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en

a.k.a.:-  LookupTable,-  TabladeBúsqueda,-  TabladeSímbolos,ó-  Mapa

Prof. Esp. Ing. José María Sola 274

Page 8: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en

�  Problema�  Almacenarparesdenombresyteléfonosy

buscarpornombre�  TipodeDatoAbstracto:AgendaTelefónica

�  Valores�  Agenda={(nombre,teléfono)/nombre,teléfonoin

Sigma*,nombrenotempty,telefononotempty}�  Agenda=NombrexxTeléfono,

Nombre=Teléfono=Sigma*�  Operaciones

�  Add(a,nombre,teléfono)�  Get(a,nombre)�  Set(a,nombre,telefono)�  Remove(a,nombre)

�  EjemploAgenda a; Add(a, "Superman","555-4567"); Add(a, "Batman","555-5555"); Add(a,"Wonder Woman","555-1234"); Add(a, "Lois","555-4567"); Add(a, "Bruce","555-5555"); Add(a, "Diana","555-1234"); Add(a, "Darkside","555-6666"); cout<<Get(a,"Lois");//555-4567

�  Implementación�  Representaciónen:

�  Arreglo�  Listaenlazada�  Comparar

�  Espacio�  O(n)

�  Tiemposdeoperaciones�  O(n)�  O(logn)

AgendaTelefónica

Page 9: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en

Prof. Esp. Ing. José María Sola 276

Page 10: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en

� MejorSoluciónÁrbol�  Tiemposlogarítmicos

�  UnÁrboltambiénpermiteimplementarConjuntoFinito�  Add�  IsMember�  Remove

�  ¿Podemosimplementarunconjuntoinfinito?¿Unasecuenciainfinita?

ÁrboldeBúsquedaBinario:BST

Prof. Esp. Ing. José María Sola 277

Page 11: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en
Page 12: Agosto 13, Jueves 2018 K1051 Cl… · una familia de funciones Lo mismo aplica a tipos La metaprogramación es programar un constructo que le indique al compilador que programe en