Вы находитесь на странице: 1из 4

Luna Reyes Brandon Manuel

Templates (Plantillas)
Una de las ideas clave en el mundo de la programacin es la posibilidad de
disear clases y funciones que acten sobre tipos arbitrarios o genricos. Para
definir clases y funciones que operan sobre tipos arbitrarios se definen los tipos
parametrizados o tipos genricos. La mayora de los lenguajes de
programacin orientados a objetos proporcionan soporte para la generacidad:
las unidades genricas en Ada, las plantillas (templates) en C++.
Las plantillas o tipos parametrizados se pueden utilizar para implementar
estructuras y algoritmos que son en su mayora independientes del tipo de
objetos sobre los que operan. Por ejemplo, una plantilla Pila puede describir
como implementar una pila de objetos arbitrarios, una vez que la plantilla se ha
definido, los usuarios pueden escribir el cdigo que utiliza pila de tipos de
datos reales, cadenas, enteros, apuntadores, etctera.
Las plantillas fueron propuestas por Stroustrup en la conferencia de Usenix C+
+ de Denver, en 1988. En esa ocasin planteo las siguientes preguntas:

Puede ser fcil utilizar la parametrizacion de tipos?


Pueden objetos de tipos parametrizados ser integrados en C++?
Pueden los tipos parametrizados ser implementados de modo que la
velocidad de compilacin y enlace sea similar a la de un sistema de
compilacin que no admite parametrizacion de tipos?
Puede tal sistema de compilacin ser simple y transportable?

Naturalmente, el mismo Stroustrup comentaba en la citada conferencia que la


respuesta a todas las preguntas era s.
El inters de las plantillas proviene del hecho de que esta generalidad no
arrastra perdida de rendimiento y no obliga sacrificar las ventajas de C++ en la
materia de control estricto de los tipos de datos.
Una plantilla es un patrn de creacin de clases o funciones como instancias o
especializaciones de la plantilla en tiempo de compilacin, de igual forma que
una clase es un patrn para crear objetos como instancias de la clase en
tiempo de ejecucin. Por esta razn, se denominan a veces funcin patrn y
clase patrn en lugar de plantilla de funciones y plantilla de clases.
Las plantillas o patrones son funciones y clases que no estn implementadas
para un tipo determinado, sino para un tipo que se debe definir en cada
momento. Para utilizar estas funciones o clases el programador solo debe
especificar el tipo para el cual debe realizarse la plantilla. As la funcin solo
debe definirse e implementarse una vez. Igual sucede con clases contenedoras
Bibliografa: Joyantes Aguilar, Luis, Programacin en C, C++, JAVA y UML, 2010,
p. 613

Luna Reyes Brandon Manuel

tales como pila, listas enlazadas, etc., que solo deben ser implementadas una
vez.
Una plantilla de funciones especifica un conjunto infinito de funciones
sobrecargadas. Cada funcin de este conjunto es una funcin plantilla y una
instancia de la plantilla de funcin. Una funcin plantilla apropiada se produce
automticamente por el compilador cuando es necesario.
Ventajas
La mayor ventaja de las plantillas es la genericidad.
La genericidad es una propiedad que permite definir una clase sin especificar el
tipo de datos de uno o ms de sus miembros (parmetros). De esta forma, se
puede cambiar la clase para adaptarla a los diferentes usos sin tener que
rescribirla. La razn de la genericidad se basa principalmente en el hecho de
que los algoritmo de resolucin de numerosos problemas no depende del tipo
de dato que procesa y, sin embargo, cuando se implementas en un lenguaje de
programacin, los programas que resuelven cada algoritmo sern diferentes
para cada tipo de dato que procesan. Por ejemplo, un algoritmo que
implementa una pila de caracteres es esencialmente el mismo que el algoritmo
necesario para implementar una pila de enteros o de cualquier otro tipo.
Implementacin
La sintaxis de una plantilla de funciones tiene dos formatos, segn se utiliza la
palabra reservada class o typename. Ambos formatos se pueden utilizar: class
es el formato clsico t que incorpora todos los compiladores y typename es el
formado introducido por el estndar ANSI/ISO C++para utilizar en lugar de
class.
Plantilla de funcin: Es parecida a cualquier otra funcin solo que se le aade al
principio una presentacin de la clase que se usara como referencial de la
plantilla.
template <class|typename <id>[,...]>
<tipo_retorno> <identificador>(<lista_de_parmetros>)
{
// Declaracin de funcin
};

Plantilla de clase: Es parecida a cualquier otra clase solo que se le aade al


principio una presentacin de la clase que se usara como referencial de la
plantilla.

Bibliografa: Joyantes Aguilar, Luis, Programacin en C, C++, JAVA y UML, 2010,


p. 613

Luna Reyes Brandon Manuel

template <class|typename <id>[,...]>


class <identificador_de_plantilla>
{
// Declaracin de funciones
// y datos miembro de la plantilla
};

Ejemplo:
#include <iostream>
using namespace std;
template <class T>
void intercambio(T& v1, T&v2)
{
T aux;
aux=v1;
v1=v2;
v2=aux;
}
int main(){
int numero1=5;
int numero2=8;
cout<<endl;
cout<<" UTILIZANDO TIPO ENTERO"<<endl;
cout<<"Los valores originales son: "<<numero1<<" y "<<numero2<<endl;
intercambio(numero1,numero2);
cout<<"Los nuevos valores son: "<<numero1<<" y "<<numero2<<endl;
cout<<endl;
cout<<"______________________________________"<<endl;
cout<<endl;
cout<<" UTILIZANDO TIPO CARACTER"<<endl;
char car1='L';
char car2='J';
cout<<"Las letras originales son: "<<car1<<" y "<<car2<<endl;
intercambio(car1,car2);
cout<<"Las nuevas letras son: "<<car1<<" y "<<car2<<endl;
cout<<endl;
system("pause");
return 0;
Bibliografa: Joyantes Aguilar, Luis, Programacin en C, C++, JAVA y UML, 2010,
p. 613

Luna Reyes Brandon Manuel

Bibliografa: Joyantes Aguilar, Luis, Programacin en C, C++, JAVA y UML, 2010,


p. 613

Вам также может понравиться