1. Funciones genéricas 2. Clases genéricas



Documentos relacionados
Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Un puntero no es más que una variable estática cuyo contenido es una dirección de memoria.

Plantillas de clases ( Templates )

La herencia. Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

LENGUAJE. Tema 1 - Introducción

Tema: Sobrecarga de Operadores.

Programación Orientada a Objetos con Java

CONTENIDOS. 1. Completar el ejemplo de Herencia: Superclase Persona-Subclase Alumno

Plantillas: un mecanismo de polimorfismo

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

Constructores y Destructores

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Bloque 4. La descomposición funcional y el diseño descendente

Curso de Doctorado: Tecnologías de Objetos

COMPROMISOS ENTRE CLASES Y CLIENTES

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

El lenguaje de Programación C. Fernando J. Pereda

Las plantillas permiten definir funciones genéricas.

Arreglos. // Incluir E/S y Librerías Standard #include <stdlib.h> #include <stdio.h>

Titulo: Suma de N primeros números

Prof. Dr. Paul Bustamante

1.2 Algoritmo. Proceso de solución de un problema. Resolviendo problemas con la computadora. Programación

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

Introducción al tipo de dato ARRAY

Resumen Lenguaje Java

Vectores y matrices. Arrays Declaración Creación Acceso a los elementos de un array Manipulación de vectores y matrices

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

Tipos primitivos y clases de interés

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Estructura de Computadores

Tema 7 Vectores y cadenas de caracteres. Fundamentos de Informática

Clases y Objetos. Informática II Ingeniería Electrónica

8. Sentencia return y métodos

3.2 Operaciones aritmético-lógicas en Pascal

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

Tema 2. Memoria Dinámica. 2.1 Datos estáticos y dinámicos

Modulo 1 El lenguaje Java

Objetivo de aprendizaje del tema

Introducción a la programación orientada a objetos

Clases abstractas no polimórficas para C++

Contenido. Capítulo 1. Introducción a lenguaje C 1

Programación Orientada a Objetos en Java

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

Ejercicio 1 (2 puntos. Tiempo: 25 minutos)

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

Se guardan en archivos con extencion c y los cabezales con extension h

11. Algunas clases estándar de Java (II)

3. Indicar la salida por pantalla (2 puntos-15 minutos)

INSTITUTO TECNOLOGICO de la laguna Programación Orientada a Objetos en C++

Tema 6: Generación de código (parte 2)

Funciones. Diseño de funciones. Uso de instrucción jal y retorno de subrutina.

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Tema: Arreglos de Objetos en C++.

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8

10. Algunas clases estándar de Java (I)

INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA UNIDAD CULHUACÁN INTEGRANTES

Objetivos. El alumno conocerá los elementos indispensables de un ambiente de programación y será capaz de realizar programas básicos en lenguaje C.

PART II: Moviendo al jugador

Ejercicios de evaluación de fundamentos de programación en Java

Dpto. Lenguajes y Ciencias de la Computación E.T.S.I. Telecomunicación. Laboratorio de Programación Introducción a Allegro con Dev-C++

Capítulo 6. Introducción a la POO

2. Estructura de un programa en Java

2ª Convocatoria 2008/2009 (15-IX-2009) 4º Ing. Informática. CPS. Universidad de Zaragoza Tiempo de realización: 3 horas

Prof. Dr. Paul Bustamante

Procesadores de lenguaje Tema 5 Comprobación de tipos

TIPOS DE DATOS DEFINIDOS POR EL PROGRAMADOR: Estructuras CONTENIDOS

Práctica 2: El problema de la sección crítica

Tema 2: La clase string

Lo básico de Javascript. ISIS2603 Departamento de Sistemas y Computación Universidad de los Andes

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Curso 0 de Informática

Memoria compartida y semáforos r/w. La página del manual que podría servir para describir estas funciones es la siguiente:

15. ANEXO # 5 GAMEPLAYOBJECT

Índice ÍNDICE EJERCICIO 1: CÁLCULO FINANCIERO (5 PTOS.) EJERCICIO 2: AGENCIA DE COLOCACIONES (5 PTOS.)...4

Tiempo de Compilación. Programa fuente. Secuencia. de caracteres. Scanner. Secuencia. de símbolos Parser. Compilador.

Librerías estándar en C++ STL: Standard Template Library. Álvaro Sánchez Miralles José Porras (Fidel Fernández)

Repaso de las características más importantes de la programación Java y su adaptación a Android

Clases. Java: Clases y Objetos. Clases. Clases. Modificadores de clase. Definición de una clase. Cada objeto es un ejemplar de una clase

Listados y Etiquetas personalizados de PrefGest WhitePaper Julio 2008

Para dudas, comentarios escribe a: C BASICO

Conceptos. ELO329: Diseño y Programación Orientados a Objetos. ELO 329: Diseño y Programación Orientados a Objetos

Generalidades sobre el concepto de herencia

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Esquema de un programa en C: bloques básicos

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante

Prof. Dr. Paul Bustamante

Tema: Patrones de Diseño.

TEMA 3: EL LENGUAJE C: PRESENTACIÓN

Arrays y Cadenas en C

9. Objetos y clases Clases

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

Variables y tipos de datos

Fundamentos de la Programación

Programación III. 1. Facultad: Ingeniería Escuela: Computación Asignatura:Programación III I. OBJETIVOS II. INTRODUCCIÓN TEÓRICA

Transcripción:

Genericidad 1. Funciones genéricas 2. Clases genéricas Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas.

Genericidad Re-utilización del código: Uno de los problemas: tipos de datos. class A; { int x; int operator>(a a) {return( x>a.x? 1:0); // máximo de dos objetos de la clase A A maximo(a a,a b) { return( a>b? a : b); // máximo de dos números float float maximo(float a,float b) { return( a>b? a : b); Ambas funciones son prácticamente iguales: sólo cambian en los tipos de datos. Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas. 109

Genericidad En C++, para utilizar tipos genéricos de datos: uso de plantillas (templates): funciones genéricas. clases genéricas. Funciones genéricas: T maximo(t a,t b) { return( a>b? a : b); void main(void) { A a,b,c; int x,y,z; c=maximo(a,b); z=maximo(x,y); -Se utiliza la misma función. -El compilador genera el código necesario a partir de las plantillas que ha guardado internamente. -Es una forma de poliformismo: número infinito de potenciales sobrecargas de una función. Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas. 110

Funciones genéricas Uso de funciones genéricas: T min(const T a,const T b) { return( a<b? a : b); void main(void) { int x,y,z; float f; void *u,*v,*w; z=min(x,y); // correcto. u=min(x,y); // correcto, aunque puede haber // un error en tiempo de // ejecución. Sólo se mira el // tipo de los parámetros. u=min(v,w); // correcto, devuelve la // dirección más pequeña. z=min(x,f); // incorrecto: los parámetros // x,f no son del mismo tipo. Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas. 111

Sobrecarga de funciones genéricas Se pueden sobrecargar de la misma forma que los otros tipos de funciones. T min(t a,t b) { return( a<b? a : b); template <class T1,class T2> T1 min(t1 a,t2 b) { <class T> T min(int a,t b) { <class T> // incorrecto T min(int a,int b) // alguno de los { return( a<b? a : b); // parámetros // tiene que ser // genérico Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas. 112

Especialización de funciones genéricas Cuando definimos una función genérica: especificamos un tratamiento para todos los tipos de datos. a veces, se precisa un tratamiento específico para algún tipo de dato en concreto. Ejemplo: Dada la anterior función genérica maximo(): char n1[30]= Hola ; char n2[30]= Saludos ; maximo(n1,n2); Especialización (sobrecarga): Esta llamada funcionaría, pero no haría lo que esperaríamos. const char maximo(const char *s1, const char *s2) { return( strcmp(s1,s2)? s1 : s2 ); Se busca primero si hay una función especializada, y si no se encuentra, se busca una genérica. Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas. 113

Patrones para definiciones genéricas de clases. Durante la compilación se expanden para definir completamente clases. Ejemplo de definición: class vector { T *v; int tam; vector(int); T & operator[] (int); ; // instanciación de clases genéricas, // cuando se declaran objetos vector<int> vi(10); //vector de 10 int vector<char> vc(50); //vector de 50 char vector<double> vd(3); //vector de 3 doubles Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas. 114

Definición de métodos en clases genéricas: class vector { T *v; int tam; vector(int); T & operator[] (int); ; vector<t>::vector(int size) { tam=size; v=new T[tam]; T & vector<t>::operator[] (int i) { return(v[i]); void main(void) { vector<double> d(30); vector<char> *p=new vector<char>(50); Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas. 115

Especialización de métodos en clases genéricas: Para ciertos tipos, las clases genéricas no se comportan como esperaríamos. Añadir declaraciones explícitas de métodos especializados. Ejemplo: class pila { int tam; T* buffer; int cabeza; Pila(int size); ~Pila(); int Vacia(void); int Llena(void); int Push(T d); T Pop(void); ; Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas. 116

int pila<t>::push(t d) { if(llena()) return -1; else { buffer[cabeza]=d; cabeza++; return 0; // Especialización del método Push() int pila<char *>::Push(char * cad) { char *copia; if(llena()) return -1; else { copia=new char[strlen(cad)+1]; strcpy(copia,cad); buffer[cabeza]=copia; cabeza++; return 0; Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas. 117

Tipos de parámetros formales: Tipos genéricos. Parámetros constantes. Genericidad con parámetros constantes: template <int TAM, class T> class vector { T vect[tam]; T & operator[] (int i); ; TAM debe ser una constante conocida en tiempo de compilación template <int TAM, class T> T & vector<tam,t>::operator[](int i) { if(i<tam && i>=0) return(vect[i]); else exit(-1); Instanciación de objetos void main(void) { vector<30,int> vi; Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas. 118

Clases anidadas: Las clases genéricas no se pueden anidar. Una clase genérica puede contener la definición de una clase no genérica. Herencia en clases genéricas: Se pueden derivar clases genéricas de otras clases genéricas: template <class T,int TAM> class pila { T buffer[tam]; int cabeza; void Push(T a); ; template <class T,int TAM> class doble_pila: public pila<t,tam> { void Push2(T a); ; Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas. 119

Herencia en clases genéricas (continuación): Se puede derivar una clase no genérica de una genérica: //clase genérica template <class T,int TAM> class pila { T buffer[tam]; int cabeza; void Push(T a); ; //clase no genérica derivada de genérica class monton: public pila<int,5> { // Aquí se hereda lo de la clase pila // de enteros y de tamaño 5. ; Lenguaje C++. Leng. Prog. II. Filiberto Pla y Jorge Badenas. 120