SlideShare una empresa de Scribd logo
1 de 16
Estructura de Datos
     Templates




                 Víctor Márquez
Templates
• Las plantillas o templates nos proporcionan de
  manera rápida y eficaz,         configuraciones
  prestablecidas de diferentes códigos de
  programación, agilizando y optimizando de esta
  manera nuestro proyecto C++.

• Las plantillas son uno de los grandes aportes de
  C++ al lenguaje C.
Templates

• Hasta antes de las plantillas, se pasaban variables
  como parámetros de las funciones. Gracias al
  concepto de plantilla, es posible pasar valores
  como parámetros, y de este modo definir
  funciones genéricas. Pero el concepto de
  plantillas no se limita a las funciones, también
  puede ser utilizado en clases y estructuras.
Ventajas
• Generalización: desde el momento en que el
  valor incluye todo lo que es utilizado en la
  función o clase-plantilla, es posible pasar
  cualquier valor como parámetro.

• Simplicidad: únicamente se codifica una
  función o clase sin importar el valor pasado
  como parámetro, lo que hace que el
  mantenimiento del código sea más fácil.
¿Como utilizar los templates?

• El uso de plantillas es apropiado para definir
  contenedores, es decir estructuras que sirven
  para almacenar una colección de objetos (una
  lista, un vector, un grafo)

• Las plantillas también son apropiadas para definir
  algoritmos genéricos que se aplican a una familia
  de clase. Por ejemplo, es interesante codificar un
  algoritmo del camino mas corto,
  independientemente de la estructura del grafo.
¿Como utilizar los templates?

• El uso de un functor puede ser apropiado para
  acceder a los pesos instalados sobre los arcos del
  grafo en este caso. La clase de grafo pasada como
  parámetro debe cumplir un cierto número de pre-
  requisitos para que el algoritmo pueda ser aplicado.
  Si no, el programa no compilará.
Convencion de notaciones
• Los parámetros de plantillas son generalmente
  escritos en mayúsculas (mientras que los otros tipos
  son generalmente escritos en minúscula). En la
  práctica, podemos escribirlos como queramos.
  Personalmente los escribo precedidos de una T (por
  ejemplo Tgraph para designar un parámetro de
  plantilla que representa un grafo). Esto puede
  parecer inútil pero veremos que es muy práctico con
  los typenames ya que vuelve el código más legible.
Templates comunes
STL
• La STL (Standard Template Library) viene por
  defecto con los compiladores C++. Esta biblioteca
  incluye un juego de contenedores genéricos,
  especialmente: std::vector: vectores (tabla de
  elementos de tipo T adyacentes en memoria),
  acceso en O(1), std::set: conjuntos de elementos
  de tipo T sin repeticiones y ordenados según el
  operador <, acceso en O(log(n)), std::list: listas
  encadenadas (acceso en O(n), inserción al inicio y
  al final de la lista en O(1)).
Templates comunes
 BGL
• La BGL (Boost Graph Library) proporciona clases de
  grafo genéricos y los algoritmos correspondientes
  (algoritmo del camino más corto, algoritmo de
  float, ect).
Templates de función

• Hemos visto anteriormente, que las funciones
  genéricas son un mecanismo C++ que permite
  definir una función mediante uno o varios
  parámetros (tipos genéricos). A partir de estas
  plantillas el compilador es capaz de generar
  código de funciones distintas que comparten
  ciertas características.
Templates de clase generica
• Son un artificio C++ que permite definir una
  clase mediante uno o varios parámetros. Este
  mecanismo es capaz de generar infinitas clases
  distintas pero compartiendo un diseño común.
  Al igual que en plantillas de funciones, las clases
  así generadas se denominan instancias o
  especializaciones de la plantilla.
Trabajar con templates

Para trabajar con plantillas, necesitamos 3 cosas:

• La palabra clave typename: indica que el tipo que
  sigue es abstracto (parámetro de plantilla o
  depende de un parámetro de plantilla) y debe ser
  tomado en cuenta únicamente cuando se le
  instancia.
Trabajar con templates
• La palabra clave template: indica que la clase o
  función que le sigue toma parámetros de plantilla.
  Después de la palabra clave template se escriben
  directamente los parámetros de plantilla (precedidos
  de la palabra clave typename, struct, class, o tipo de
  base según el tipo de parámetro de plantilla
  esperado) entre “<< >>”, seguidos de la clase o
  función.
Trabajar con templates
• El operador: permite acceder a los campos (en
  particular los tipos) y métodos estáticos de una
  clase o de una estructura. No es especifico a las
  plantillas (se aplica a las clases y estructuras en
  general y a los namespaces).
Recomendaciones
• Es aconsejable realizar el diseño y una
  primera depuración con una clase normal
  antes de convertirla en una clase genérica.
• Es más fácil imaginarse el funcionamiento
  referido a un tipo concreto que a entes
  abstractos.
• Es más fácil entender los problemas que
  pueden presentarse si se maneja una clase
  concreta.
• En estos casos es más sencillo ir de lo
  particular a lo general.
Fin

Más contenido relacionado

La actualidad más candente

Clases abstractas e interfaces (AlexandraPerez)
Clases abstractas e interfaces (AlexandraPerez)Clases abstractas e interfaces (AlexandraPerez)
Clases abstractas e interfaces (AlexandraPerez)Alexandra Pérez
 
A152 woia sistemasinteligentesyredesneuronales
A152 woia sistemasinteligentesyredesneuronalesA152 woia sistemasinteligentesyredesneuronales
A152 woia sistemasinteligentesyredesneuronalesjcbp_peru
 
Introduccion y operaciones basicas (matlab)
Introduccion y operaciones basicas (matlab)Introduccion y operaciones basicas (matlab)
Introduccion y operaciones basicas (matlab)Gino Pannillo
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaAngel Vázquez Patiño
 
Mapa conceptual del contenido de la unidad 4
Mapa conceptual del contenido de la unidad 4Mapa conceptual del contenido de la unidad 4
Mapa conceptual del contenido de la unidad 4K Manuel TN
 

La actualidad más candente (12)

MéTodos Java
MéTodos JavaMéTodos Java
MéTodos Java
 
TDA
TDATDA
TDA
 
MéTodos En Java
MéTodos En JavaMéTodos En Java
MéTodos En Java
 
Clases abstractas e interfaces (AlexandraPerez)
Clases abstractas e interfaces (AlexandraPerez)Clases abstractas e interfaces (AlexandraPerez)
Clases abstractas e interfaces (AlexandraPerez)
 
Resulset
ResulsetResulset
Resulset
 
A152 woia sistemasinteligentesyredesneuronales
A152 woia sistemasinteligentesyredesneuronalesA152 woia sistemasinteligentesyredesneuronales
A152 woia sistemasinteligentesyredesneuronales
 
Introduccion y operaciones basicas (matlab)
Introduccion y operaciones basicas (matlab)Introduccion y operaciones basicas (matlab)
Introduccion y operaciones basicas (matlab)
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en Java
 
Programación 1: modularización
Programación 1: modularizaciónProgramación 1: modularización
Programación 1: modularización
 
Mapa conceptual del contenido de la unidad 4
Mapa conceptual del contenido de la unidad 4Mapa conceptual del contenido de la unidad 4
Mapa conceptual del contenido de la unidad 4
 
Clases abstractas e interfaces en java
Clases abstractas e interfaces en javaClases abstractas e interfaces en java
Clases abstractas e interfaces en java
 
Metodos Java
Metodos JavaMetodos Java
Metodos Java
 

Destacado

Ejercicio filtros bases datos excel
Ejercicio filtros bases datos excelEjercicio filtros bases datos excel
Ejercicio filtros bases datos excelvictoriavirtual
 
Defensa tesis jose salinas 2013
Defensa tesis jose salinas 2013Defensa tesis jose salinas 2013
Defensa tesis jose salinas 2013maigva
 
Manual para hacer una base de datos en
Manual para hacer una base de datos enManual para hacer una base de datos en
Manual para hacer una base de datos enMeliDehoyos
 
Moodle 2.0 plantillas de Base de Datos
Moodle 2.0 plantillas de Base de DatosMoodle 2.0 plantillas de Base de Datos
Moodle 2.0 plantillas de Base de DatosMaria Moodle
 
Modelamientos de base de datos III ciclo
Modelamientos de base de datos III cicloModelamientos de base de datos III ciclo
Modelamientos de base de datos III ciclopelaodioses
 
Una base de datos de red
Una base de datos de redUna base de datos de red
Una base de datos de redweneliza99
 
Actualizador de bases de datos en excel
Actualizador de bases de datos en excelActualizador de bases de datos en excel
Actualizador de bases de datos en excelGuillermo Barreda
 
Bases de Datos en Excel - Ordenación
Bases de Datos en Excel - OrdenaciónBases de Datos en Excel - Ordenación
Bases de Datos en Excel - OrdenaciónMariaEu79
 
Letras para imprimir en excel
Letras para imprimir en excelLetras para imprimir en excel
Letras para imprimir en excelGuillermo Barreda
 
Plantilla Generadora de Codigo VBA para Bases de Datos con Excel
Plantilla Generadora de Codigo VBA para Bases de Datos con ExcelPlantilla Generadora de Codigo VBA para Bases de Datos con Excel
Plantilla Generadora de Codigo VBA para Bases de Datos con ExcelJFKSOFT CORP.
 
Ensayo base de datos
Ensayo base de datosEnsayo base de datos
Ensayo base de datosluisinojosa
 

Destacado (20)

Ejercicio filtros bases datos excel
Ejercicio filtros bases datos excelEjercicio filtros bases datos excel
Ejercicio filtros bases datos excel
 
Generación de tráfico al sitio web
Generación de tráfico al sitio webGeneración de tráfico al sitio web
Generación de tráfico al sitio web
 
Clase enlaces quimicos
Clase enlaces quimicosClase enlaces quimicos
Clase enlaces quimicos
 
Construcción y desarrollo de un sitio web de éxito
Construcción y desarrollo de un sitio web de éxitoConstrucción y desarrollo de un sitio web de éxito
Construcción y desarrollo de un sitio web de éxito
 
Defensa tesis jose salinas 2013
Defensa tesis jose salinas 2013Defensa tesis jose salinas 2013
Defensa tesis jose salinas 2013
 
Manual para hacer una base de datos en
Manual para hacer una base de datos enManual para hacer una base de datos en
Manual para hacer una base de datos en
 
Funciones de bd
Funciones de bdFunciones de bd
Funciones de bd
 
Moodle 2.0 plantillas de Base de Datos
Moodle 2.0 plantillas de Base de DatosMoodle 2.0 plantillas de Base de Datos
Moodle 2.0 plantillas de Base de Datos
 
Gestión de una ruta y territorio
Gestión de una ruta y territorioGestión de una ruta y territorio
Gestión de una ruta y territorio
 
Modelamientos de base de datos III ciclo
Modelamientos de base de datos III cicloModelamientos de base de datos III ciclo
Modelamientos de base de datos III ciclo
 
Una base de datos de red
Una base de datos de redUna base de datos de red
Una base de datos de red
 
Actualizador de bases de datos en excel
Actualizador de bases de datos en excelActualizador de bases de datos en excel
Actualizador de bases de datos en excel
 
Software de negocios II - Excel Avanzado
Software de negocios II - Excel AvanzadoSoftware de negocios II - Excel Avanzado
Software de negocios II - Excel Avanzado
 
Bases de Datos en Excel - Ordenación
Bases de Datos en Excel - OrdenaciónBases de Datos en Excel - Ordenación
Bases de Datos en Excel - Ordenación
 
Identificación y cualificación de clientes. listas y bases de datos
Identificación y cualificación de clientes. listas y bases de datosIdentificación y cualificación de clientes. listas y bases de datos
Identificación y cualificación de clientes. listas y bases de datos
 
Letras para imprimir en excel
Letras para imprimir en excelLetras para imprimir en excel
Letras para imprimir en excel
 
Ensayo base de datos
Ensayo base  de datosEnsayo base  de datos
Ensayo base de datos
 
Plantilla Generadora de Codigo VBA para Bases de Datos con Excel
Plantilla Generadora de Codigo VBA para Bases de Datos con ExcelPlantilla Generadora de Codigo VBA para Bases de Datos con Excel
Plantilla Generadora de Codigo VBA para Bases de Datos con Excel
 
Ensayo base de datos
Ensayo base de datosEnsayo base de datos
Ensayo base de datos
 
Los cinco mitos del liderazgo
Los cinco mitos del liderazgoLos cinco mitos del liderazgo
Los cinco mitos del liderazgo
 

Similar a Templates C

Tipos de datos_para_c_
Tipos de datos_para_c_Tipos de datos_para_c_
Tipos de datos_para_c_Jesus22barrera
 
Presentación de Tipos de datos para c++ de programacion
Presentación de Tipos de datos para c++ de programacionPresentación de Tipos de datos para c++ de programacion
Presentación de Tipos de datos para c++ de programacionValeriaBerrones
 
Bibliotecas para c_
Bibliotecas para c_Bibliotecas para c_
Bibliotecas para c_Maztherprozh
 
Trabajo tutorial de visual C++
Trabajo tutorial de visual C++Trabajo tutorial de visual C++
Trabajo tutorial de visual C++Bryangio2002
 
Modelamiento con uml definiciones
Modelamiento con uml definicionesModelamiento con uml definiciones
Modelamiento con uml definicionesBoris Salleg
 
bibliotecasolibreriasenc-170322144450-1.pdf
bibliotecasolibreriasenc-170322144450-1.pdfbibliotecasolibreriasenc-170322144450-1.pdf
bibliotecasolibreriasenc-170322144450-1.pdfssuser948499
 
Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_Oziel Solis Juarez
 
Bibliotecas o libreria de c++
Bibliotecas o libreria de c++Bibliotecas o libreria de c++
Bibliotecas o libreria de c++Idalia Tristan
 
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptxFabianAndresNuezPinz
 
Consideraciones pragmatica
Consideraciones pragmaticaConsideraciones pragmatica
Consideraciones pragmaticaJose Gallardo
 
Uso de las clases iostream
Uso de las clases iostreamUso de las clases iostream
Uso de las clases iostreamTensor
 

Similar a Templates C (20)

Tipos de datos_para_c_
Tipos de datos_para_c_Tipos de datos_para_c_
Tipos de datos_para_c_
 
Presentación de Tipos de datos para c++ de programacion
Presentación de Tipos de datos para c++ de programacionPresentación de Tipos de datos para c++ de programacion
Presentación de Tipos de datos para c++ de programacion
 
Clase 01 290615
Clase 01 290615Clase 01 290615
Clase 01 290615
 
Bibliotecas para c++
Bibliotecas para c++Bibliotecas para c++
Bibliotecas para c++
 
Bibliotecas para c_
Bibliotecas para c_Bibliotecas para c_
Bibliotecas para c_
 
Trabajo tutorial de visual C++
Trabajo tutorial de visual C++Trabajo tutorial de visual C++
Trabajo tutorial de visual C++
 
librerias.pptx
librerias.pptxlibrerias.pptx
librerias.pptx
 
Programacion Funcional
Programacion FuncionalProgramacion Funcional
Programacion Funcional
 
Modelamiento con uml definiciones
Modelamiento con uml definicionesModelamiento con uml definiciones
Modelamiento con uml definiciones
 
bibliotecasolibreriasenc-170322144450-1.pdf
bibliotecasolibreriasenc-170322144450-1.pdfbibliotecasolibreriasenc-170322144450-1.pdf
bibliotecasolibreriasenc-170322144450-1.pdf
 
Tutorial jared
Tutorial jaredTutorial jared
Tutorial jared
 
Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_
 
BIBLIOTECAS PARA C++
BIBLIOTECAS PARA C++BIBLIOTECAS PARA C++
BIBLIOTECAS PARA C++
 
Bibliotecas o libreria de c++
Bibliotecas o libreria de c++Bibliotecas o libreria de c++
Bibliotecas o libreria de c++
 
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
_Concepto de interfaz_interfaz_interfaz_interfaz_interfaz_.pptx
 
Consideraciones pragmatica
Consideraciones pragmaticaConsideraciones pragmatica
Consideraciones pragmatica
 
Uso de las clases iostream
Uso de las clases iostreamUso de las clases iostream
Uso de las clases iostream
 
Programacion java
Programacion javaProgramacion java
Programacion java
 
Tema 1[1][1]
Tema 1[1][1]Tema 1[1][1]
Tema 1[1][1]
 
Javaqert
JavaqertJavaqert
Javaqert
 

Templates C

  • 1. Estructura de Datos Templates Víctor Márquez
  • 2. Templates • Las plantillas o templates nos proporcionan de manera rápida y eficaz, configuraciones prestablecidas de diferentes códigos de programación, agilizando y optimizando de esta manera nuestro proyecto C++. • Las plantillas son uno de los grandes aportes de C++ al lenguaje C.
  • 3. Templates • Hasta antes de las plantillas, se pasaban variables como parámetros de las funciones. Gracias al concepto de plantilla, es posible pasar valores como parámetros, y de este modo definir funciones genéricas. Pero el concepto de plantillas no se limita a las funciones, también puede ser utilizado en clases y estructuras.
  • 4. Ventajas • Generalización: desde el momento en que el valor incluye todo lo que es utilizado en la función o clase-plantilla, es posible pasar cualquier valor como parámetro. • Simplicidad: únicamente se codifica una función o clase sin importar el valor pasado como parámetro, lo que hace que el mantenimiento del código sea más fácil.
  • 5. ¿Como utilizar los templates? • El uso de plantillas es apropiado para definir contenedores, es decir estructuras que sirven para almacenar una colección de objetos (una lista, un vector, un grafo) • Las plantillas también son apropiadas para definir algoritmos genéricos que se aplican a una familia de clase. Por ejemplo, es interesante codificar un algoritmo del camino mas corto, independientemente de la estructura del grafo.
  • 6. ¿Como utilizar los templates? • El uso de un functor puede ser apropiado para acceder a los pesos instalados sobre los arcos del grafo en este caso. La clase de grafo pasada como parámetro debe cumplir un cierto número de pre- requisitos para que el algoritmo pueda ser aplicado. Si no, el programa no compilará.
  • 7. Convencion de notaciones • Los parámetros de plantillas son generalmente escritos en mayúsculas (mientras que los otros tipos son generalmente escritos en minúscula). En la práctica, podemos escribirlos como queramos. Personalmente los escribo precedidos de una T (por ejemplo Tgraph para designar un parámetro de plantilla que representa un grafo). Esto puede parecer inútil pero veremos que es muy práctico con los typenames ya que vuelve el código más legible.
  • 8. Templates comunes STL • La STL (Standard Template Library) viene por defecto con los compiladores C++. Esta biblioteca incluye un juego de contenedores genéricos, especialmente: std::vector: vectores (tabla de elementos de tipo T adyacentes en memoria), acceso en O(1), std::set: conjuntos de elementos de tipo T sin repeticiones y ordenados según el operador <, acceso en O(log(n)), std::list: listas encadenadas (acceso en O(n), inserción al inicio y al final de la lista en O(1)).
  • 9. Templates comunes BGL • La BGL (Boost Graph Library) proporciona clases de grafo genéricos y los algoritmos correspondientes (algoritmo del camino más corto, algoritmo de float, ect).
  • 10. Templates de función • Hemos visto anteriormente, que las funciones genéricas son un mecanismo C++ que permite definir una función mediante uno o varios parámetros (tipos genéricos). A partir de estas plantillas el compilador es capaz de generar código de funciones distintas que comparten ciertas características.
  • 11. Templates de clase generica • Son un artificio C++ que permite definir una clase mediante uno o varios parámetros. Este mecanismo es capaz de generar infinitas clases distintas pero compartiendo un diseño común. Al igual que en plantillas de funciones, las clases así generadas se denominan instancias o especializaciones de la plantilla.
  • 12. Trabajar con templates Para trabajar con plantillas, necesitamos 3 cosas: • La palabra clave typename: indica que el tipo que sigue es abstracto (parámetro de plantilla o depende de un parámetro de plantilla) y debe ser tomado en cuenta únicamente cuando se le instancia.
  • 13. Trabajar con templates • La palabra clave template: indica que la clase o función que le sigue toma parámetros de plantilla. Después de la palabra clave template se escriben directamente los parámetros de plantilla (precedidos de la palabra clave typename, struct, class, o tipo de base según el tipo de parámetro de plantilla esperado) entre “<< >>”, seguidos de la clase o función.
  • 14. Trabajar con templates • El operador: permite acceder a los campos (en particular los tipos) y métodos estáticos de una clase o de una estructura. No es especifico a las plantillas (se aplica a las clases y estructuras en general y a los namespaces).
  • 15. Recomendaciones • Es aconsejable realizar el diseño y una primera depuración con una clase normal antes de convertirla en una clase genérica. • Es más fácil imaginarse el funcionamiento referido a un tipo concreto que a entes abstractos. • Es más fácil entender los problemas que pueden presentarse si se maneja una clase concreta. • En estos casos es más sencillo ir de lo particular a lo general.
  • 16. Fin