Metaprogramación?, qué es la …

Slides:



Advertisements
Presentaciones similares
Introducción a C++ Sistemas Operativos
Advertisements

CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Pruebas Unitarias [UTN - Tecnologías de desarrollo de software IDE] 2008 nUnit Ezequiel GhioneEzequiel Ghione [fecha][fecha]
Estructura de Datos Unidad 4. Recursividad Dra. María Lucía Barrón Estrada Enero-Junio 2007.
Uso de variables de tipo referencia
Programación II Listas
Programación, Algoritmos y Estructuras de Datos
A partir del lenguaje C Entorno de programación Visual C++
1 Parsing Un parser podría ser definido como un programa que analiza una porción de texto para determinar su estructura lógica: la fase de parsing en un.
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
¿Qué es un algoritmo? “(del árabe al-Khowârizmî, sobrenombre del célebre matemático árabe Mohámed ben Musa). Conjunto ordenado y finito de operaciones.
Cont. Arbol Binario de Búsqueda
Compiladores Análisis Léxico Oscar Bonilla Universidad Galileo.
JAVA 1.5 Fernando Almeida Octubre Introducción Java Specification Request (JSR) 14Java Specification Request (JSR) 14 propone introducir tipos y.
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Unidad I Java y C++ : Similitudes y diferencias
Archivos Programación.
ÁRBOLES BINARIOS DE BÚSQUEDA
Framework Class Library (FCL) Dr. Diego Lz. de Ipiña Gz. de Artaza
Contenido: 1- Que es el .Net Framework 2- Arquitectura en .Net
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
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
Elementos básicos del lenguaje
Elementos básicos del lenguaje
6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases.
Repaso de archivos #include int main(void) { FILE *fp; fp=fopen(“prueba.txt”, “w”); if (fp==NULL) { printf(“Error al abrir el archivo\n”); printf(“No lo.
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2009.
Fundamentos de Ingeniería de Software Facultad de Ingenieria Universidad Distrital Francisco José de Caldas PROGRAMACION ORIENTADA A OBJETOS Asignatura:
LICETH CAJAS 3RO ASI 26/10/2010. Es un lenguaje de programación diseñado para crear una amplia gama de aplicaciones que se ejecutan en.NET Framework,
Estructura de un sistema de base de datos Partes que conforman un sistema de base de datos.
¿Que es PHP? PHP Hypertext Preprocessor Y solo porque me quiero hacer el profesor cool y meter un chiste: PHP también significa: Para Hacer Páginas.
Pruebas de Funcionalidad de Software: Caja Negra y Caja Blanca Curso: Diseño de Sistemas 9no. Semestre.
Diseño y Programación Orientados a Objetos
Taller de Java Universidad de los Andes
Lic. Xóchitl minerva García cruz
Diseño y Programación Orientados a Objetos
Herencia y Clases Abstractas
Diseño y Programación Orientada a Objetos
PHP Hypertext Preprocessor
LOS DIFERENTES LENGUAJES DE PROGRAMACION PARA LA WEB
Diseño y Programación Orientados a Objetos
EL MUNDO DE LOS OBJETOS PROGRAMANDO EN JAVA.
Ingeniero en Computación José Alfredo Cobián Campos
Colecciones Carlos Fontela, 2008.
Introducción a C#.
Clase 8 Reflexión e IC.
LISTAS..
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
Diseño y Programación Orientada a Objetos
Diccionarios y Colecciones
Sonia Rueda Herencia y Polimorfismo
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Resumen: Análisis de requerimientos
Test Driven Development
Plantillas (Templates)‏
Diseño y Programación Orientados a Objetos
Fundamentos básicos del lenguaje C#. Parte 1 Introducción a C#
Conceptos básicos de.NET Explorar el entorno de desarrollo Crear un proyecto Visual Basic.NET Use Visual Studio.NET Acceso a datos Depurar e implantar.
Funciones del Analizador Sintáctico
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
Diccionarios y Colecciones
Espacio para el texto.
Diseño y Programación Orientados a Objetos
Diseño y Programación Orientados a Objetos
Templates (en español: Pantillas, modelos, patrones)‏
Manejo de Excepciones y otros
Transcripción de la presentación:

Metaprogramación?, qué es la … Pablo D. Roca <pablodroca@gmail.com>

Metaprogramación Para qué? Si así estoy bien… Mucho código repetido. ABMs de muchos archivos. Código genérico pero no optimizado para casos particulares. Estructuras muy rígidas.

Metaprogramación?, qué es la … “Programar programas que programen programas” Plantear un escalón más de abstracción. Generalizar aún más lo repetible. Aplicar mejoras a situaciones predecibles.

Metaprogramación - Cómo? Cuándo? Compiletime o Runtime. Cómo? Técnicas de metaprogramación: Generación de código. Lenguajes de usos particulares. Templates/generics. Metadata y reflection.

MyGeneration - Velocity? - Gennit Generación de Código + muchas variantes + sin overhead en runtime - muy estático (requiere recompilar) MyGeneration - Velocity? - Gennit

Ejemplo plantilla de generación using System.Collections.Generic; namespace <%=namespaceName%> { public class <%=className%>Comparer:IComparer public int Compare(<%=className%> x, <%=className%> y) ... }

Lenguajes de propósito particular + entradas muy variadas para generar igual salida. + usados en compiletime y runtime - BNFs complicados de codificar ? Lex – Yacc - Antlr

Ejemplo BNF modificado presentacion : (diapositiva)* EOF ; diapositiva : ESPACIOS* texto '-' transicion TEXTO : CHAR (CHAR|ESPACIOS)* CHAR Console.WriteLine($text); TRANSICION : 'pause;' Console.WriteLine("Presione una tecla"); Console.ReadKey(true); Console.WriteLine(); | 'delay(' INT ');' Thread.Sleep( Convert.ToInt32($INT.text));

Templates en C++ - Generics en Java y .Net Templates / Generics + runtime y compiletime (dependiendo del lenguaje) - complejidad notacional, código críptico Templates en C++ - Generics en Java y .Net

Metadata y reflection + runtime o compiletime (depende del lenguaje?) + código más intuitivo al trabajar con objetos. + mayor dinamismo en runtime + mayor control en compiletime

Metadata Dónde guardarla? Qué guardar? Reflector

Metadata - Jerarquía de Clases en .Net

Compiletime reflection + sin overhead en runtime + puede mejorar la implementación utilizada según el contexto - overheads molestos en compilación - complejidades extras en el código - difícil de mantener y probar

Runtime reflection + sin overhead en compile time  + permite funcionalidad más dinámica + RTTI (inspección) + modificación del estado interno de los objetos + manejo de interacciones entre objetos - LENTA + definición de nuevas estructuras

Ejemplo encapsulamiento de rutinas public class PropertyGetter { private object target; public PropertyGetter(object target) {this.target = target;} public object GetValue(string propName) Type type = target.GetType(); PropertyInfo property = type.GetProperty(propName); if (property == null) return null; else return property.GetValue(target, null); }

Compiletime Reflection Compiletime - Runtime RTTI Compiletime Reflection Runtime Reflection

Resumen Motivaciones. Realizaciones. Espectativas? Listo, ya lo vi todo… y después qué?