UNIVERSIDAD DE OVIEDO

Documentos relacionados
PROGRAMACIÓN ORIENTADA A OBJETOS PROGRAMACIÓN ORIENTADA A OBJETOS. TEMA5: Herencia y UML2Java

PROGRAMACIÓN ORIENTADA A OBJETOS

PIZARRA VIRTUAL BASADA EN REALIDAD AUMENTADA

Lenguajes y Paradigmas de Programación. Programación Orientada a Objetos y Scheme

Presentación del Curso Presencial. Programación en Java Nivel Básico

Guideline to apply the ISO 90003:2004 Standard to SMEs of software development

Meta-circular Dynamic Languages

Introducción a la Informática Año XVII, No 05, Mes 09 de Añoxx. Universidad Tecnológica de Pereira. ISSN Ejemplos de JQuery

Universidad de Sevilla

Objetivos y Temario CURSO JAVA 7

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Cuerpo de Profesores Técnicos de Formación Profesional

JAVA 7 Los fundamentos del lenguaje Java

CLASE 9 -HERENCIA Y POLIMORFISMO

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS (Universidad del Perú, DECANA DE AMÉRICA)

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS (Universidad del Perú, DECANA DE AMÉRICA)

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Java en 2 horas. Rodrigo Santamaría

Características Avanzadas en C# Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

CAPÍTULO I Investigación Preliminar

Programación Orientada a Objetos y Patrón MVC en PHP5. Pablo Ramirez A.

Biblioteca de recursos. Descargado desde

Guía Docente 2013/14

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

FACULTAD DE ARQUITECTURA

Modelado de Arquitectura Software

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11

APLICACIONES DEL LENGUAJE VRML (VIRTUAL REALITY MODELLING LANGUAGE) A LA CIENCIA DE MATERIALES

Híper introducción a Objetos

La clase Integer y sus métodos. Los Operadores (concepto). Operadores Lógicos y a nivel de Bits. Operadores de desplazamiento. Concatenaciones. La Con

EVALUACIÓN DE TIERRAS PARA EL CULTIVO DEL AGUACATE DE ACUERDO CON EL CONOCIMIENTO LOCAL DEL PAISAJE EN LA REGIÓN DEL PICO DE TANCÍTARO, MICHOACÁN.

Guía Docente

Entendiendo expresiones lambda en C# con Mono

Práctica 1. Entorno de Trabajo e Introducción a Java. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos. Versión 1.0.

Herencia en Java. Agustín J. González Diseño y Programación Orientados a Objetos

Diplomado C#.NET con Visual Studio

Práctica 2. Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones

Lenguaje de Modelamiento Unificado.

Áreas de aplicación de la programación lineal

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERIA ESCUELA DE CIENCIAS Y SISTEMAS

Rational Developer for System z Unit Test. Sergio González Consultor Calidad Ingeniería del Software

Recogiendo la basura. Herencia de interfaz Transversal Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Lenguajes de Cuarta Generación

Apoyo a la docencia. Web de Martínez Durbán, María Mercedes

Herencia en Java. Agustín J. González Diseño y Programación Orientados a Objetos

HOJA DE EJERCICIOS 3 HERENCIA ENTRE CLASES Y POLIMORFISMO DE MÉTODOS

MAGIC DRAW UML. Índice. José Ignacio Colmenero González Carlos Pérez Herrero José Luis Bravo Sánchez

Tema: Programación Orientada a Objetos

UNIVERSIDAD NACIONAL DEL CALLAO

UNIVERSIDAD NACIONAL DEL CALLAO

Master en Java Certificación para Programadores

Biblioteca de recursos. Descargado desde

Curso de Java orientado a Android Parte 2

Consejería de Hacienda y Administración Pública

Ingeniería del Software de Gestión

1 Software de una computadora 2 Sistemas operativos 3 Manejo avanzado y programación en ms-dos 4 Lenguajes de programación

PROGRAMACIÓN EN JAVA

Análisis arquitectural y funcional de la maquina virtual en la plataforma J2ME ÍNDICE

ALTA TEMPERATURA HIGH TEMPERATURE

Patrones de diseño. Reuso del desarrollo a nivel arquitectural. M. Telleria, L. Barros, J.M. Drake

INFORMACION GENERAL DEL PROGRAMA DE FORMACION DENOMINACIÓN DEL PROGRAMA: PROGRAMACION DE SOFTWARE. Productiva 6 MESES

Programa de actualización profesional ACTI.NET Desarrollo de aplicaciones locales y web con tecnología VB.NET

Paquete de curso Programación Java SE (Exclusivo Estudiantes y catedráticos)

PROGRAMACIÓN EN C#.NET Programación Orientada a Objetos en C# Ing. Bruno López Takeyas

Introducción a C# y la plataforma.net

Guía práctica de estudio 08: Polimorfismo

Programa de actualización profesional ACTI.NET Desarrollo de aplicaciones locales y web con tecnología VB.NET 2010

DESARROLLO DE APLICACIONES WEB EN EL ENTORNO SERVIDOR 90h

Optimización de Lenguajes con Comprobación Estática y Dinámica de Tipos Miguel García Rodríguez Francisco Ortín Soler

Universidad Nacional de Piura

PLANIFICACIÓN PROGRAMACION II

Programación para Dispositivos Móviles. Company LOGO

PARTE 1: INTRODUCCIÓN DE LA PLANIFICACIÓN. Carrera y plan: Analista Programador Universitario Plan 2008.

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Mejora del rendimiento de la reflexión estructural mediante técnicas de compilación JIT

Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez

Análisis de técnicas caligráficas para la mejora del reconocimiento automático de firma

PLANIFICACIÓN DE LA MATERIA PROGRAMACION ORIENTADA A OBJETOS (Plan 2004) NOMBRE DE MATERIA: PROGRAMACION ORIENTADA A OBJETOS

Introducción a la programación

Algoritmos y Estructuras de Datos: Introducción a los TAD y los Algoritmos. Guillermo Román Díez

Examen Teórico. Convocatoria de Febrero de 2015

Aprendizaje Automático

Tecnología de software para sistemas de tiempo real

Caja conectorizada COYOTE DTC COYOTE DTC Cross-Connect Closure. Caja conectorizada COYOTE LCC COYOTE LCC Cross-Connect Closure

PYTHON PARA PROGRAMADORES. Si tienes conocimientos de programación con Java o C++ y quieres introducirte en la programación Python, este es tu curso.

Índice de contenido. Índice de contenido

Presentación del Curso Presencial. Programación Web con Java J2EE

TEMARIO DE PROFESORES TÉCNICOS DE F.P. : SISTEMAS Y APLICACIONES INFORMÁTICAS. Octubre 1997 (Publicado en el B.O.E. de 13 de Febrero de 1.

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

DESARROLLO DE SOFTWARE

IFCD0111 Programación en Lenguajes Estructurados de Aplicaciones de Gestión

PLANIFICACIÓN DE LA MATERIA PROGRAMACION II AÑO 2005

Integración de datos

DISTRIBUCIÓN HORARIA DE LA ASIGNATURA SEGÚN NORMATIVA

GUÍA DOCENTE ABREVIADA DE LA ASIGNATURA

HIBERNATE. Universidad Nacional de Jujuy Analista Programador Universitario JTP Jorge R. Mendoza Año 2010

Programación Avanzada con PHP Duración: 40 horas Código: DAW-106

Transcripción:

UNIVERSIDAD DE OVIEDO ESCUELA DE INGENIERÍA INFORMÁTICA TRABAJO FIN DE MASTER JMPlib: Librería de Intercesión Estructural para Java DIRECTOR: Jose Manuel Redondo López Francisco Ortín Soler AUTOR: Ignacio Lagartos Ibáñez Vº Bº del Director del Proyecto

Resumen Los lenguajes dinámicos han llegado a ser ampliamente utilizados debido a la flexibilidad que requieren ciertas aplicaciones y sistemas. Por este motivo, características propias de este tipo de lenguajes han sido incorporadas progresivamente a los lenguajes estáticos. Nuestro trabajo tiene por objetivo aumentar la flexibilidad de Java en tiempo de ejecución sin realizar modificaciones sobre la máquina virtual. Hemos desarrollado una librería que permite al lenguaje Java la utilización de dos funcionalidades de meta-programación: 1) intercesión estructural y 2) evaluación dinámica de código. Esto ha sido logrado mediante el versionado de clases, la instrumentación de código y técnicas de Hot-Swapping. Concluyendo, la librería permite a los programadores utilizar estas dos funcionalidades sobre código nuevo o existentes para mejorar su flexibilidad en tiempo de ejecución. Máster en Ingeniería Web - Escuela de Ingeniería Informática - Universidad de Oviedo UO196684@uniovi.es 3

Palabras Clave Intercesión Estructural, Evaluación Dinámica de Código, Java, Instrumentación de Código, Tipado Estático, Detección Temprana de Errores Máster en Ingeniería Web - Escuela de Ingeniería Informática - Universidad de Oviedo UO196684@uniovi.es 5

Abstract Dynamic languages are widely used due to the flexibility needed in some applications or systems. Therefore, dynamic language metaprogramming features have been incorporated gradually to statically-typed languages. Our work is aimed to improve the flexibility of Java language without modifying the Java Virtual Machine. We developed a library that allows Java language to support two types of metaprogramming features: 1) structural intercession y 2) dynamic code evaluation. This was achieved using class versioning, code instrumentation and Hot-Swapping. In conclusion, the library allows programmers to use these two functionalities in new or legacy code to improve its runtime flexibility. Máster en Ingeniería Web - Escuela de Ingeniería Informática - Universidad de Oviedo UO196684@uniovi.es 7

Keywords Java, Metaprogramming, Structural Intercession, Dynamic Code Evaluation, Static Typing, Early Error Detection. Máster en Ingeniería Web - Escuela de Ingeniería Informática - Universidad de Oviedo UO196684@uniovi.es 9

Tabla de Contenidos CAPÍTULO 1. INTRODUCCIÓN... ERROR! MARCADOR NO DEFINIDO. 1.1 MOTIVACIÓN... ERROR! MARCADOR NO DEFINIDO. 1.2 FINALIDAD DEL PROYECTO... ERROR! MARCADOR NO DEFINIDO. CAPÍTULO 2. CAPÍTULO 3. NO DEFINIDO. CAPÍTULO 4. FIJACIÓN DE OBJETIVOS... ERROR! MARCADOR NO DEFINIDO. ESTADO ACTUAL DE LOS CONOCIMIENTOS CIENTÍFICO-TÉCNICOS. ERROR! MARCADOR DESCRIPCIÓN DEL SISTEMA... ERROR! MARCADOR NO DEFINIDO. 4.1 DISEÑO DEL SISTEMA... ERROR! MARCADOR NO DEFINIDO. 4.2 CONCEPTOS IMPORTANTES... ERROR! MARCADOR NO DEFINIDO. 4.2.1 Versionado de Clases... Error! Marcador no definido. 4.2.2 Campo _newversion... Error! Marcador no definido. 4.2.3 Instrumentación de código... Error! Marcador no definido. 4.2.4 Campo _oldversion... Error! Marcador no definido. 4.2.5 Invoker y Creator... Error! Marcador no definido. 4.2.6 Atributos de Instancia: fieldgetter, fieldsetter y unary... Error! Marcador no definido. 4.2.7 Atributos Estáticos: Getter, Setter y unary... Error! Marcador no definido. 4.2.8 Árbol de Herencia... Error! Marcador no definido. 4.3 JMPLIB AGENT... ERROR! MARCADOR NO DEFINIDO. 4.3.1 Proceso de Instrumentación de Clases... Error! Marcador no definido. 4.4 JMPLIB CORE... ERROR! MARCADOR NO DEFINIDO. 4.4.1 Guardar código de las clases... Error! Marcador no definido. 4.4.2 Ejecución de las Primitivas... Error! Marcador no definido. 4.4.3 Obtención de Interfaces, Getters y Setters... Error! Marcador no definido. 4.4.4 Evaluación Dinámica de Código... Error! Marcador no definido. 4.4.5 Incorporación Dinámica de Clases... Error! Marcador no definido. 4.5 MÉTODOS DE LA LIBRERÍA... ERROR! MARCADOR NO DEFINIDO. 4.5.1 Primitivas... Error! Marcador no definido. 4.5.2 Acceso a Miembros... Error! Marcador no definido. 4.5.3 Evaluación dinámica de código... Error! Marcador no definido. 4.6 LIMITACIONES CON EL API DE REFLEXIÓN DE JAVA... ERROR! MARCADOR NO DEFINIDO. CAPÍTULO 5. CAPÍTULO 6. METODOLOGÍA DE TRABAJO... ERROR! MARCADOR NO DEFINIDO. RESULTADOS OBTENIDOS... ERROR! MARCADOR NO DEFINIDO. 6.1 SIN META-PROGRAMACIÓN... ERROR! MARCADOR NO DEFINIDO. 6.2 CON META-PROGRAMACIÓN... ERROR! MARCADOR NO DEFINIDO. 6.3 INSTRUMENTACIÓN... ERROR! MARCADOR NO DEFINIDO. 6.4 MICRO-BENCHMARKS... ERROR! MARCADOR NO DEFINIDO. 6.5 MEMORIA... ERROR! MARCADOR NO DEFINIDO. 6.6 INTERPRETACIÓN DE LOS RESULTADOS... ERROR! MARCADOR NO DEFINIDO. 6.6.1 Rendimiento en Start-up... Error! Marcador no definido. 6.6.2 Rendimiento en Steady-state... Error! Marcador no definido. 6.6.3 Consumo de Memoria... Error! Marcador no definido. 6.7 DISCUSIÓN... ERROR! MARCADOR NO DEFINIDO. Máster en Ingeniería Web - Escuela de Ingeniería Informática - Universidad de Oviedo UO196684@uniovi.es 11

6.7.1 Discusión sobre Start-up... Error! Marcador no definido. 6.7.2 Discusión sobre Steady-state... Error! Marcador no definido. 6.7.3 Discusión de la Memoria... Error! Marcador no definido. CAPÍTULO 7. CONCLUSIONES Y TRABAJO FUTURO... ERROR! MARCADOR NO DEFINIDO. 7.1 TRABAJO FUTURO... ERROR! MARCADOR NO DEFINIDO. 7.2 DIFUSIÓN DE LOS RESULTADOS... ERROR! MARCADOR NO DEFINIDO. CAPÍTULO 8. GESTIÓN DEL PROYECTO... ERROR! MARCADOR NO DEFINIDO. 8.1 PLANIFICACIÓN... ERROR! MARCADOR NO DEFINIDO. 8.2 PRESUPUESTO... ERROR! MARCADOR NO DEFINIDO. CAPÍTULO 9. CAPÍTULO 10. BIBLIOGRAFÍA... ERROR! MARCADOR NO DEFINIDO. ANEXOS... ERROR! MARCADOR NO DEFINIDO. 10.1 CONFIGURACIÓN DE LA LIBRERÍA... ERROR! MARCADOR NO DEFINIDO. 10.1.1 Fichero config.properties... Error! Marcador no definido. 10.1.2 Parámetro de ejecución... Error! Marcador no definido. 10.2 DEPENDENCIAS... ERROR! MARCADOR NO DEFINIDO. 10.2.1 ASM 5.0.4... Error! Marcador no definido. 10.2.2 JavaParser 2.3.0... Error! Marcador no definido. 10.2.3 Polyglot... Error! Marcador no definido. 10.2.4 Java 1.8... Error! Marcador no definido. 10.3 DATOS DE LA REVISTA Y ARTÍCULO PRESENTADO... ERROR! MARCADOR NO DEFINIDO. INTRODUCCIÓN... Error! Marcador no definido. EJEMPLO MOTIVADOR... Error! Marcador no definido. DESCRIPCIÓN... Error! Marcador no definido. ESTADO DEL ARTE... Error! Marcador no definido. CONCLUSIÓN... Error! Marcador no definido. REFERENCIAS... Error! Marcador no definido. 12 UO196684@uniovi.es Máster en Ingeniería Web - Escuela de Ingeniería Informática - Universidad de Oviedo

Aviso El contenido de esta documentación no puede ser publicado en este repositorio público debido a que es una investigación en curso cuyos derechos de publicación pueden haber sido cedidos a una revista. Cualquier interesado que desea acceder al contenido de este documento póngase en contacto con el autor, Ignacio Lagartos Ibañez, mediante el correo electrónico: UO196684@uniovi.es. Máster en Ingeniería Web - Escuela de Ingeniería Informática - Universidad de Oviedo UO196684@uniovi.es 13