Plantillas (Templates)‏ Agustín J. González ELO-329.

Slides:



Advertisements
Presentaciones similares
Elementos básicos del Lenguaje
Advertisements

UNIVERSIDAD TECNOLOGICA DEL PERU DERIVADAS
Análisis y Diseño orientado a objetos con UML.
Tema 6: Clases Antonio J. Sierra.
UNIVERSIDAD AUTONOMA METROPOLITANA
1 Interfaces Agustín J. González ELO Introducción En C++ se permite la herencia múltiple; es decir, es posible derivar una clase de dos o más clases.
FACTORY METHOD Edmundo Álvarez Jiménez Antonio Fernández Alonso
Definiciones: conjuntos, grafos, y árboles
1 Input Streams “Flujos de Entrada” Agustín J. González Versión original de Kip Irvine ELO-329.
PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++
Programación III Clase 06 Funciones.
DESARROLLANDO TEMPLATES PARA JOOMLA! 1.5 Ing. Edwin Rolando Paredes Calderón. Comercio Electrónico.
DISEÑO Genera soluciones a requerimientos planteados
Vectors (Vectores) Agustin J. González ELO329. Contenidos Qué es un vector? Declaración de Objetos Vectores Inserción y eliminación de items Uso de sub-índices.
Ejemplo de Diseño Orientado A objetos Agustín J. González OOP&D.
ELO3201 Vectores (Vector) Agustín J. González ELO320.
DISEÑO DE SOFTWARE 1ª. Parte
Swin v7 simplicity. Versión 7 El ERP SWin ha sido sometido a un complejo tratamiento de reingeniería con el objetivo de conseguir una contundente mejora.
Programación Orientada a Objetos
1 6. PARAMETRIZACIÓN. 2 Parametrización La parametrización permite realizar una abstracción de la identidad de varios ejemplos de los datos Los valores.
1 Polimorfismo y Métodos Virtuales Agustín J. González ELO329.
1 Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 329.
1 Polimorfismo y Funciones Virtuales Agustín J. González ELO329.
Herramientas de polimorfismo y herencia en C++
Template Method Patrón de comportamiento. Propósito Definir el esqueleto de un algoritmo en una operación, dejando algunos pasos para las subclases. Permite.
ARQUITECTURA Modelo/Vista/Controlador Daniel Jiménez Pérez
Manejo de Punteros y objetos en memoria dinámica en C++
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
1 Manejo de Excepciones y otros Agustín J. González ELO-329.
DISEÑO Genera soluciones a requerimientos planteados Describe las especificaciones del sistema propuesto Define CÓMO lo va a hacer el nuevo Sistema Define.
ELO3291 Entrada y Salida Básica en Java ELO-329: Diseño y programación orientados a objetos Agustín J. González.
Funciones. def mi_funcion(param1, param2): print param1 print param2 Considerar identación Estructura de Funciones.
1 Clase Properties Agustín J. González ELO Introducción En contraste con C++ que tiene una rica variedad de contenedores, Java contiene cuatro.
1 Plantillas (Templates) Agustín J. González Versión Original de Kip Irvine Elo326: Seminario I 2do. Sem
1 Definición y Conversión de datos Agustín J. González ELO-329.
1 Clase Properties Agustín J. González ELO Introducción Java contiene cuatro clases contenedoras en el paquete java.util: Vector, Stack, Hashtable,
Importancia en la efectividad del:
1 Polimorfismo y Funciones Virtuales Agustín J. González Versión original de Kip Irvine ELO329.
1 Funciones Agustín J. González Versión Original de Kip Irvine ELO329.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
MULTIPLICACIONES DE UNA CIFRA POR 7, 8, 9 x 8x 7x 9.
Polimorfismo y Métodos Virtuales Agustín J. González ELO329.
1 Plantillas (Templates)‏ Agustín J. González ELO-329.
1 Interfaces Agustín J. González ELO Introducción En C++ se permite la herencia múltiple; es decir, es posible derivar una clase de dos o más clases.
2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 9: Funciones, variables y arreglos en BASH Nombre.
1 Funciones en C++: Nota: Este material es de estudio personal, en clases sólo revisaremos las láminas con. Usted revise todo. Agustín J. González ELO329.
Segundo encuentro presencial Junio, Agenda Bienvenida, acreditación y formación de grupos de trabajo9:00 hs. Dinámica 1: 9:30 hs. Diseñando mejores.
Programación orientada a objetos Capítulo Objetos y clases La clase es la abstracción de una categoría de objeto.
6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases.
Colegio de Bachilleres Plantel 13 Xochimilco - Tepepan
Ing. Johanna Macias Algoritmo, Estructura y Programación III.
Patrones de Diseño Agustín J. González ElO329.
Versión Versión
1 Definición y Conversión de datos Agustín J. González ELO-329.
Curso “Modelización WAN” M E N U. D e s a r r o l l o Organización del Curso Objetivo Temas a tratar.
Definición Partes Fundamentales Documento Word Libro de Excel Video Fuente:
Herencia en C++ Agustín J. González ELO329. Diseño y Programación Orientados a Objetos 2 Motor ElectricMotor Motor y ElectricMotor Consideremos dos clases.
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Clase 1. Clase 7 Clase 8.
Vectors (Vectores)‏ Agustín J. González ELO329.
Polimorfismo y Métodos Virtuales
Plantillas (Templates)‏
Escribe el nombre a los números 1 _______________________ 2 _______________________ 3_______________________ 4_______________________ 5 _______________________.
WINTER Template. WINTER Template WINTER Template.
Vectors (Vectores)‏ Agustín J. González ELO329.
Vectores (Vector) Agustín J. González ELO320 ELO320.
Templates (en español: Pantillas, modelos, patrones)‏
Clase
Templates (en español: Pantillas, modelos, patrones)‏
Transcripción de la presentación:

Plantillas (Templates)‏ Agustín J. González ELO-329

Diseño y Programación Orientados a Objetos 2 Definición Una plantilla (template) es un patrón para crear funciones y clases usando tipos de datos como parámetros. Hay dos tipos de templates: Funciones Templates (tipos parametrizados)‏ Clases Templates (clases parametrizadas)‏

Diseño y Programación Orientados a Objetos 3 Propósito Liberar al programador de la molestia de tener que escribir múltiples versiones de la misma función sólo para llevar a cabo la misma operación sobre datos de distinto tipo. Consideremos la función swap(). ¿Cuántos tipos diferentes de datos pueden ser intercambiados? intdouble stringStudent Motorbool etc...

Diseño y Programación Orientados a Objetos 4 Función Templates Una función plantilla tiene uno o más parámetros. template return-type function-name( T param )‏ T es un parámetro de la plantilla (o template). Este indica el tipo de dato que será suministrado cuando la función sea llamada.

Diseño y Programación Orientados a Objetos 5 La función Display puede mostrar cualquier tipo de dato con el operador de salida (<<) definido. Ejemplo: Display template void Display( const T & val ) { cout << val; } Display( 10 ); Display( "Hello" ); Display( true );

Diseño y Programación Orientados a Objetos 6 void swap(int & X, int & Y)‏ { int temp = X; X = Y; Y = temp; } void swap(string & X, string & Y)‏ { string temp = X; X = Y; Y = temp; } Función swap()‏ Notar las diferencias entre estas dos funciones sobrecargadas (overloaded). Éstas son distintas funciones para el compilador dado que la firma que caracteriza unívocamente a una función está compuesta por el nombre de la función y sus lista de parámetros. Este ejemplo es un buen candidato para una plantilla de función.

Diseño y Programación Orientados a Objetos 7 Plantilla para la Función swap()‏ Esta plantilla trabaja con cualquier tipo de dato que soporte el operador de asignación. template void Swap( TParam & X, TParam & Y ) { TParam temp = X; X = Y; Y = temp; }

Diseño y Programación Orientados a Objetos 8 void swap( string * pX, string * pY ) { string temp = *pX; *pX = *pY; *pY = temp; } Función swap() específica La siguiente instancia específica de la función swap() puede coexistir en el mismo programa con la plantilla para la función swap().

Diseño y Programación Orientados a Objetos 9 Llamando a swap()‏ Cuando llamamos a swap(), el único requerimiento es que ambos parámetros sean del mismo tipo y que sean modificables vía el operador de asignación =. int A = 5; int B = 6; swap( A, B ); string P("Al"); string Q("George"); swap( P, Q ); // calls the specific instance of swap()‏ string * pA = new string("Fred"); string * pB = new string("Sam"); swap( pA, pB );

Diseño y Programación Orientados a Objetos 10 Llamado a swap()‏ Por supuesto, algunas combinaciones no funcionan. No se puede pasar constantes, y no podemos pasar tipos incompatibles. /* casos que no funcionan */ int B = 6; swap( 10, B ); swap( "Harry", "Sally" ); bool M = true; swap( B, M );

Diseño y Programación Orientados a Objetos 11 Parámetros Adicionales Una plantilla de función puede tener parámetros adicionales que no son parámetros genéricos. template void Display( const T & val, ostream & os ) { os << val; } Display( "Hello", cout ); Display( 22, outfile );

Diseño y Programación Orientados a Objetos 12 Parámetros adicionales Pueden haber parámetros plantilla adicionales, mientras cada uno sea usado al menos una vez en la lista de parámetros formales de la función. Aquí, T1 es cualquier contenedor que soporte la operación begin(). T2 es el tipo de datos almacenado en el contenedor. template void GetFirst( const T1 & container, T2 & value )‏ { value = *container.begin(); } // more...

Diseño y Programación Orientados a Objetos 13 Llamado a la función GetFirst ()‏ A la función previa le podemos pasar un vector de enteros... vector testVec; testVec.push_back(32); int n; GetFirst(testVec, n );

Diseño y Programación Orientados a Objetos 14 Llamados a la Función GetFirst()‏ O le podemos pasar una lista de datos doubles. Pronto veremos la biblioteca estándar de contenedores y veremos vector y list entre otros. list testList; testList.push_back( ); double x; GetFirst( testList, x );

Diseño y Programación Orientados a Objetos 15 Plantillas para Clases (Class Templates)‏ Las plantillas de clases nos permiten crear nuevas clases durante la compilación. Usamos plantillas de clases cuando de otra manera estaríamos forzados a crear múltiples clases con los mismos atributos y operaciones. En Java también podemos crear plantillas para clases. Ver web, aquí veremos sólo caso C++. Las clases estándares de contenedores C++ (Standard C++ Container classes -vector, list, set) son un buenos ejemplos.

Diseño y Programación Orientados a Objetos 16 Declaración de una Plantilla de Clase Este es el formato general para declarar una plantilla de clases. El parámetro T representa un tipo de datos. template class className { public: private: };

Diseño y Programación Orientados a Objetos 17 Ejemplo: Clase Array Una clase simple de arreglo podría almacenar entradas de cualquier tipo de datos. Por ejemplo, ésta podría almacenar un arreglo asignado dinámicamente de enteros long: class Array { public: Array( int initialSize ); ~Array(); long & operator[]( int i ); private: long * m_pData; int m_nSize; };

Diseño y Programación Orientados a Objetos 18 Ejemplo: clase Array Aquí, la clase almacena strings. Difícilmente hay variaciones respecto a a versión previa. Esto la hace un buen candidato para una plantilla de clase. class Array { public: Array( int initialSize ); ~Array(); string & operator[]( int i ); private: string * m_pData; int m_nSize; };

Diseño y Programación Orientados a Objetos 19 Plantilla de clase Array Esta podría ser la plantilla de la clase Array. Notamos el uso de T como parámetro donde antes teníamos long o string. template class Array { public: Array( int initialSize ); ~Array(); T & operator[]( int i ); private: T * m_pData; int m_nSize; };

Diseño y Programación Orientados a Objetos 20 Implementación de Array Implementación del constructor. Notamos la declaración de la plantilla, la cual es requerida antes de cualquier función en una plantilla de clase. template Array ::Array( int initialSize )‏ { m_nSize = initialSize; m_pData = new T[m_nSize]; } Nota: Al usar plantillas, la implementación de las funciones debe estar en el archivo de encabezado.

Diseño y Programación Orientados a Objetos 21 Implementación de Clase Array Implementación del Destructor. template Array ::~Array()‏ { delete [] m_pData; }

Diseño y Programación Orientados a Objetos 22 Implementación de clase Array Operador subíndice. No chequearemos el rango todavía. Retorna una referencia, por ello puede ser usada tanto para escribir o leer miembros del arreglo. template T & Array ::operator[]( int i )‏ { return m_pData[i]; }

Diseño y Programación Orientados a Objetos 23 Prueba de la Plantilla Array Un programa cliente puede crear cualquier tipo de arreglo usando nuestra plantilla mientras la clase admita la asignación (operador =). Array myArray(20); myArray[2] = 50; Array nameArray(10); nameArray[5] = string("Fred"); cout << nameArray[5] << endl; Array students(100); students[4] = Student(" ");

Diseño y Programación Orientados a Objetos 24 Clase Student Aún si la clase no sobrecarga el operador asignación, C++ crea uno por defecto. Éste hace la copia binaria de cada uno de los miembros dato de la clase. Ojo: Poner atención con miembros puntero !! class Student { public: Student() { } Student(const string & id)‏ { m_sID = id; } private: string m_sID; };