GENERICIDAD Es una propiedad que permite definir una clase o función sin especificar el tipo de datos de uno o mas de sus parámetros (Módulos Parametrizados).

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Abstracción de Datos Funciones.
Lenguaje de programación Java
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Listas enlazadas c++ Prof. Franklin Cedeño.
Estructuras de datos y algoritmos
Estructuras de datos y algoritmos
PROGRAMACION DE Pilas o Stacks y Colas
Aplicación del paradigma orientado a objetos
Unidad 3 Punteros.
Tecnología de la Programación Javier Nieves Acedo Standar Template Library (STL)
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Medio de tele-comunicación
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Lic. Rosemary Torrico Bascopé
Abstracción de los datos y Orientación a Objeto Clase 13.
Cont. Arbol Binario de Búsqueda (2). Sobre los recorridos Las versiones recursivas de los recorridos son costosas debido a la gran cantidad de llamadas.
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
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.
TABLAS Definición. El tipo tabla permite definir objetos formados por un conjunto de elementos del mismo tipo. Ejemplos. El tipo tabla se utiliza para.
Estructura de Datos y Algoritmos
Clase 10: Estructuras de datos y arreglos.
1.1 Concepto y terminología
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
Programación Orientada a Objetos
Herramientas de polimorfismo y herencia en C++
Clasificación de los TDA
Manejo de Punteros y objetos en memoria dinámica en C++
Dinamismo y Contenedores Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires (C++ Avanzado) Depto. de Computación Algoritmos y Estructuras.
Elementos básicos del lenguaje
Informática Ingeniería en Electrónica y Automática Industrial
Elementos básicos del lenguaje
Programación Orientada a Objetos
Punteros Recomendado: 1. Nivelación Funciones
INSTITUTO TECNOLOGICO DE APIZACO
PRINCIPIOS DE PROGRAMACIÓN
6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases.
Estructura de Datos..
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
CONSTANTES DENTRO DE UN CÁLCULO O EN LOS PASOS PARA SOLUCIONAR UN PROBLEMA, EXISTIRÁN VALORES QUE NUNCA VAN A CAMBIAR Y SE LOS CONOCE COMO CONSTANTES.
Integrantes:  Gómez Desire  Orgelys Linares  Oriannys Linares  Sánchez Alfredo  Wendher Villasmil.
MEMORIA DINÁMICA.
Herencias Conceptos básicos i
MODELOS DE DATOS Modelos ¿Que son los modelos? Tipos de modelos ¿La ropa se realizará en base a modelos?
1 ListaUna Lista se define como una serie de N elementos E 1, E 2,..., E N, ordenados de manera consecutiva, es decir, el elemento E k (que se denomina.
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Prof. Manuel B. Sánchez. La parte ingenieril de un proceso de desarrollo de software, comprende realizar un diseño del sistema antes de empezar a escribir.
 Modelo de Datos MD  Conjunto de conceptos que permiten describir, a distintos niveles de abstracción, la estructura de una B.D. Que llamaremos ESQUEMA.
LÓGICA DE PROGRAMACIÓN UNIDAD III. INTRODUCCIÓN AL LENGUAJE C.
1 La sobrecarga de funciones y operadores le da al programador la oportunidad de asignar nuevos significados a las funciones y a los operadores.
Unidad 6 Polimorfismo.
Tema 7: Ingeniería del software Definición de software El software es: 1. instrucciones (programas de computadora) que cuando se ejecutan proporcionan.
Prof. Manuel B. Sánchez. Declaración de Objetos Una vez que la clase ha sido implementada se pueden declarar objetos como variables locales de métodos.
Clase II Estructuras dinámicas (TAD) Listas Enlazadas. ¿A que llamamos estructuras dinámicas? ¿Por qué son necesarias? Ventajas y Desventajas que tendremos.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
This y static. This Normalmente, dentro del cuerpo de un método de un objeto se puede referir directamente a las variables miembros del objeto. Sin embargo,
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
RELACIONES ENTRE CLASES M.C. YOLANDA MOYAO MARTINEZ.
Prof. Manuel B. Sánchez.  El origen del término polimorfismo es simple: proviene de las palabras griegas poly (muchos) y morphos (forma) multiforme.
METODOS DE PROGRAMACION I Ing. Vania Flores Pinto.
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 7 – Funciones y Procedimientos.
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
Introducción a la Ingeniería del Software 1 El Diseño de Software Caracteristicas: Proceso Creativo Requiere de experiencia e ingenio Necesita del aprendizaje.
Transcripción de la presentación:

GENERICIDAD Es una propiedad que permite definir una clase o función sin especificar el tipo de datos de uno o mas de sus parámetros (Módulos Parametrizados). Es decir, se puede cambiar la clase para adaptarla a los diferentes usos sin tener que reescribirla. MÓDULOS GENÉRICOS O PARAMETRIZADOS 1. Llamadas también CLASES CONTENEDORAS o CLASES GENÉRICAS: Contienen objetos de algún otro tipo. 2. Este módulo no es directamente útil, más bien es un patrón de módulos. 3. Los Módulos reales (instancias del Módulo Genérico) se obtienen proporcionando tipos reales para cada uno de los tipos genéricos. 4. Estas clases se definen con independencia del tipo de los objetos contenidos, y es el usuarios de la clase quien especifica el tipo de argumento de la clase en el momento que se instancia

DEFINICIÓN:  Es una construcción que permite escribir funciones y clases muy generales que pueden aplicarse a objetos de tipos diferentes.  Permiten aumentar la reutilización.  Se pueden tener :- Plantillas de Funciones - Plantillas de Clases  Las plantillas se declaran normalmente en un archivo de Cabecera CARACTERÍSTICAS: - Es fácil la utilización de parametrizacion de tipos. - No afecta la velocidad de compilación y enlace. - Es simple y transportable.

DEFINICIÓN: Especifica un conjunto infinito de funciones sobrecargadas y describe las funciones genéricas de una función. template Tipo_Retorno Nombre_Función (Lista_Parámetros) { //Cuerpo de la función } ejm: template T& F (T Parámetro) {...} template T F (int a, T b) {...} template T F (T a, T b) {...} Pueden tener varios parámetros genéricos. template T1 F (T1 a, T2 b) {...} No puede ser vacía

Template T min(T a, T b) { return a < b ? a: b; } Int main() { int ia=1, ib=5; cout << "Menor: " << min(ia, ib) << endl; char la=‘a’, lb=‘n’; cout << "Menor: " << min(la, lb) << endl; float fa=88.4, fb=19.9; cout << "Menor: " << min(fa, fb) << endl; }

 Permiten definir Clases Genéricas que permiten manipular diferentes tipos de datos.  Una Clases Genéricas o Plantilla de Clase, define todos los algoritmos usados por la clase, pero la especificación del tipo de dato que se manipula se hace mediante un parámetro cuando se crean los objetos de dicha clase.  Las Clases Genéricas son útiles cuando una clase contiene una lógica generalizable.  Usando Clases Genéricas se pueden crear clases que mantengan colas, pilas, listas enlazadas, y similares para cualquier tipo de dato.

Los compiladores (c++ Builder incluido) necesitan que la plantilla completa (Clases e implementaciones de sus métodos) se encuentre en un único archivo.h (sin.cpp). CONSTRUCTOR: template class NombreClase { //... } Tipo de dato definido por el usuario utilizado por la plantilla (Tipo Genérico) Nombre de la clase genérica del tipo parametrizado para la plantilla template NombreClase :: NombreClase (Parámetros) { //... }

FUNCIONES MIEMBRO: La manipulación de un una plantilla requiere tres etapas: 1. Declaración del Tipo parametrizado (Ejm: Pila) 2. Implementación de la Pila 3. Creación de una instancia especifica de la plantilla template Tipo_Retorno NombreClase :: NombreFuncion (Parámetros) { //... }

ARGUMENTOS DE PLANTILLAS  Los parámetros de una plantilla pueden ser cadenas de caracteres, nombres de funciones y expresiones de constantes. Ejm: template class Vector { T Dato [n]; //... }  Dos instancias son compatibles si sus argumentos tipo son iguales y sus argumentos expresiones tienen el mismo valor. Ejm: Vector V1 Vector V2 Nota:Una Clase Plantilla es una clase construida a partir de una plantilla de clases

PREGUNTAS: 1. Cuales son las diferencias entre estos dos conceptos? 2. Se puede sustituir el polimorfismo por una plantilla? 3. Cual de las dos características es mejor?

 Una función es polimórfica si supone tipos de datos diferentes, además puede tener diferentes parámetros y diferente implementación.  El polimorfismo necesita punteros y su generalidad se limita a jerarquías. Recuérdese que el polimorfismo se basa en que en el momento de compilación se desconoce a qué clase de la jerarquía va a apuntar un puntero que se ha definido como puntero a la clase base. Desde este punto de vista las plantillas pueden considerarse como una ampliación del polimorfismo.  Una función es una función plantilla si se diseña, define e implementa pensando en la generalidad, evitando cualquier dependencia en tipos de datos.  Una desventaja de las plantillas es que tienden a crear un código ejecutable grande porque se crean tantas versiones de las funciones como son necesarias.  Una función polimórfica se puede ejecutar dinámicamente con parámetros de tipos diferentes.

template class Nodo { TIPO Valor; Nodo *Siguiente; public: Nodo(); Nodo(TIPO v, Nodo *Sig); TIPO GetValor(); Nodo * GetSgt(); }; template class Pila { Nodo *Ultimo; public: Pila(); ~Pila(); void Push(TIPO v); TIPO Pop(); }; EJEMPLO template Nodo ::Nodo() { Siguiente = NULL; Valor = -1; } template Nodo ::Nodo(TIPO v, Nodo *Sig) { Valor = v; Siguiente = Sig; } template TIPO Nodo ::GetValor() { return Valor;} template Nodo * Nodo ::GetSgt() { return Siguiente;}

template Pila ::Pila () { Ultimo = NULL; } template Pila ::~Pila() { while(Ultimo) Pop(); } template void Pila ::Push (TIPO v) { Nodo *Nuevo; /* Crear un Nodo nuevo */ Nuevo = new Nodo (v, Ultimo); /* Ahora, el comienzo de nuestra Pila es en nuevo Nodo */ Ultimo = Nuevo; } template TIPO Pila ::Pop() { /*Variable auxiliar para manipular Nodo*/ Nodo *Nodo; TIPO v; /*Variable auxiliar para retorno*/ /*Si no hay Nodos en la Pila retornamos 0*/ if(!Ultimo) return 0; /*Si hay nodos, Nodo apunta al primer elemento de la Pila*/ Nodo = Ultimo; /*Se asigna a la Pila toda la Pila menos el primer elemento */ Ultimo = Nodo->GetSgt(); /*Guardar el Valor de retorno*/ v = Nodo->GetValor(); delete Nodo; /* Borrar el Nodo */ return v; }

int main() { Pila iPila; Pila fPila; Pila cPila; Pila sPila; // Prueba con iPila.Push(20); iPila.Push(10); cout<<iPila.Pop()<< ","; iPila.Push(40); iPila.Push(30); cout<<iPila.Pop()<<","; iPila.Push(90); cout<<iPila.Pop()<<","; cout<<iPila.Pop()<<endl; //Prueba con fPila.Push(20.01); fPila.Push(10.02); cout<<fPila.Pop()<<","; fPila.Push(40.03); fPila.Push(30.04); cout<<fPila.Pop()<<","; fPila.Push(90.05); cout<<fPila.Pop()<<","; cout<<fPila.Pop()<<endl; //Prueba con cPila.Push('x'); cPila.Push('y'); cout<<cPila.Pop()<<","; cPila.Push('a'); cPila.Push('b'); cout<<cPila.Pop()<<","; cPila.Push('m'); cout<<cPila.Pop()<<","; cout<<cPila.Pop()<<endl; //Prueba con sPila.Push("Hola"); sPila.Push("somos"); cout<<sPila.Pop()<<","; sPila.Push("programadores"); sPila.Push("buenos"); cout<<sPila.Pop()<<","; sPila.Push("!!!!"); cout<<sPila.Pop()<<","; cout<<sPila.Pop()<<endl; return 0; }

 Como sabemos la reutilización de software, con el ahorro de tiempo y esfuerzo que conlleva, es uno de los objetivos primordiales de la POO.  La reutilización se consigue básicamente utilizando clases existentes y derivando nuevas clases a partir de clases existentes (herencia). En resumidas cuentas, aprovechando las clases existentes.  Así, cuanto más fácil sea aprovechar las clases existentes, más se fomentará la reutilización. Y las clases genéricas son adecuadas para muchas más situaciones que las que no son genéricas.  Una biblioteca de clases genéricas es, por definición, mucho más útil que una de clases no genéricas. C++ proporciona una biblioteca de clases genéricas: la Biblioteca Estándar de Plantillas (STL).  La STL es una colección de componentes reutilizables implementados como clases genéricas (plantillas).  Las clases han sido optimizadas para dotarlas de la mayor eficiencia.