Download optimización de aplicaciones orientada a objetos aplicando
Document related concepts
no text concepts found
Transcript
Universidad Libre, Ariza. A. P. J, Optimización de aplicaciones orientada a objetos aplicando JAVABENAS y la API REFLECTION de JAVA 1 OPTIMIZACIÓN DE APLICACIONES ORIENTADA A OBJETOS APLICANDO JAVABEANS Y LA API REFLECTION DE JAVA Ariza Acevedo, Pedro José Pedro.ariza@unilibrecucuta.edu.co Universidad Libre Seccional Cúcuta Resumen: Lo que se busca en este proyecto, es visualizar la diferencia entre la Programación Orientada a Objetos tradicional y la optimización de ésta aplicando la API Reflection del lenguaje de programación Java y Javabeans, construcción de métodos prototipo, le permite así al desarrollador realizar instancias dinámicas de objetos por medio de JavaBeans e introspección de ellos, optimizando costos de código y tiempo como lo realizan diferentes FrameWorks como Hibernate, Spring entre otros y base de la Programación Orientada a Aspectos POA. Palabras Clave: API, Reflection, objetos, JavaBeans, abstracción, encapsulamiento, FrameWork. modificación de sus contenidos. Los JavaBeans se localizan dentro de un proyecto orientado a objetos en la capa de la Vista, el uso permitirá al desarrollador desplegar una serie de funcionalidad correspondiente a la lógica del negocio y, por medio de la API Reflection de java, los programadores pueden realizar creación de objetos en tiempo de ejecución e introspección de ellos, ya sea a sus atributos privados a través de sus métodos. En este trabajo, se visualiza las ventajas al aplicar los JavsBeans y la API Reflection de Java, optimizando los procesos normales de la programación orientada a objetos y reduciendo el costo de la escritura de código. II. I. GENERALIZADES INTRODUCCIÓN. Java es un lenguaje de programación orientado a objetos, basado en cuatro propiedades: abstracción, encapsulamiento, herencia y polimorfismo. La potencia de Java radica en su repositorio de clases embebidas en paquetes nativos, es por esto, que gran cantidad de desarrolladores de software aplican java en la construcción de sus aplicaciones, pero desconocen su API Reflection, siendo una eficaz herramienta en la optimización de métodos, generando la independencia de código y de sus estructuras, reduciendo así el costo de implementación y mejorando los procesos para la calidad del software. El diseño de las abstracciones es muy relevante para la eficacia de los JavaBeans, ya que sus atributos permiten el encapsulamiento de éstos y por medio de sus métodos la obtención o Herramientas de pruebas automatizadas de software inspeccionar y evaluar programas, sin requerir el acceso en tiempo de compilación para la estructura del programa. Asimismo, numerosas plataformas de desarrollo de software (por ejemplo, Google Web Toolkit) administrar componentes de código de una manera que reduce el tiempo de compilación de las dependencias entre ellos. [1] A. Lenguaje de Programación Java Los lenguajes de programación son idiomas artificiales diseñados para expresar cálculos y procesos que serán llevados a cabo por ordenadores. Un lenguaje de programación está formado por un conjunto de palabras reservadas, símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. El proceso de programación consiste en la escritura, compilación y Tercer Encuentro Internacional Universidad – Empresa en el sector de la Ingeniería – Hotel Bolívar - San José de Cúcuta 2016 2 Universidad Libre, Ariza. A. P. J, Optimización de aplicaciones orientada a objetos aplicando JAVABENAS y la API REFLECTION de JAVA verificación del código fuente de un programa [15]. Un programa en Java como lenguaje se compila para ser ejecutado sobre una plataforma independiente. Esta plataforma de ejecución independiente está formada básicamente por: • La máquina virtual de Java • La interfaz de programación de aplicaciones en Java o API. Esta dualidad que consigue la independencia de una plataforma es igual que la que hemos identificado en Smalltalk-80: imagen virtual y máquina virtual. [11] El API es un conjunto de clases que están compiladas en el formato de código binario de la máquina abstracta. Estas clases son utilizadas por el programador para realizar aplicaciones de una forma más sencillas. La máquina virtual de Java es el procesador del código binario de esta plataforma. El soporte a la orientación a objetos está definido en su código binario aunque no se define su arquitectura. Por lo tanto la implementación del intérprete y la representación de los objetos en memoria quedan a disposición del diseñador del simulador. Aprender lenguajes de programación como Java, Lenguaje de programación orientado a objetos, es un gran desafío, especialmente cuando se está todavía en el nivel básico de programación de eficiencia. Un montón de ejercicios prácticos son necesarios para ayudar a los estudiantes a llevar a mejor entender permanente sobre un tema en particular [14]. B. Programación Orientada a Objetos. Los sistemas de software deben evolucionar para responder a las cambiantes necesidades del cliente y la evolución de sus entornos. Pero, por desgracia, la evolución de las aplicaciones heredadas, se genera un costo exorbitante. [2] En los lenguajes orientados a objetos, variables de programa están a menudo ligados a estructuras de datos complejas que pueden superponerse. Este es el caso de los programas de Java, cuyos objetos se almacenan en una memoria compartida denominada “heap” [3]. En programación estructurada, una función trabaja sobre unos datos, y no debería modificar datos que no le corresponde hacer, pero de eso tiene que encargarse el programador, en la programación orientada a objetos POO es el propio sistema de trabajo el que impide que esto ocurra. Además, la reusabilidad del código escrito es mucho mayor que con el uso de funciones, y las portabilidad es también mayor. La POO, no es un lenguaje de programación, de hecho las técnicas de POO pueden utilizarse en cualquier lenguaje conocido y los que están por venir, aunque estos últimos, al menos en los próximos años, incluirán facilidades para el manejo de objetos [8]. La POO, es una metodología de diseño de software y un paradigma de programación que define los programas en términos de “clases de objetos”, objetos que son entidades que combinan estado (es decir, datos) y comportamiento (esto es, procedimientos o métodos)...”. La programación orientada a objetos es un programa con un conjunto de objetos, que se comunican entre ellos para realizar tareas y que es un modelo que representa un subconjunto del mundo real, tal fielmente como sea posible, de modo fácil y natural, donde los objetos van a tener características (atributos) y comportamientos (métodos). Que a diferencia de los lenguajes procedurales, en donde los datos y los procedimientos se encuentran separados y sin relación alguna [9]. Entonces, la programación orientada a objetos es una técnica de análisis y diseño que se enfoca en los elementos de un sistema, sus atributos y responsabilidades, el modelo abstracto está formado de clases. Una clase describe a un conjunto de objetos que comparte los mismos atributos, comportamiento y semántica, un objeto es una instancia de una clase [12]. Todos los objetos de la misma clase pueden recibir los mismos mensajes (realizar las mismas acciones). La clase es el lugar donde se define el comportamiento de los objetos y su esteuctura interna. [7] C. JavaBeans. Un JavaBean es una clase puramente Java desarrollada con unos patrones de diseño bien definidos, que Permiten que sea usada en posteriores aplicaciones y Permiten gestionar los componentes de forma automática. JavaBeans representa una implementación del módelo Propiedad-Evento-Método, un componente Tercer Encuentro Internacional Universidad – Empresa en el sector de la Ingeniería – Hotel Bolívar - San José de Cúcuta 2016 3 Universidad Libre, Ariza. A. P. J, Optimización de aplicaciones orientada a objetos aplicando JAVABENAS y la API REFLECTION de JAVA JavaBean se define a través de [10]: • Las propiedades que expone • Los métodos que ofrece • Los eventos que atiende o genera Para gestionar estas características, todo JavaBean debe ofrecer [10]: • Soporte para “Introspection”: El bean tiene que ofrecer la información necesaria para que la herramienta de diseño pueda analizar sus características de forma opaca. • Soporte para “Customization”: La herramienta de construcción de la aplicación puede adaptar (“customizar”) la apariencia o comportamiento del bean a la aplicación. • Soporte para Persistencia: El estado de un bean customizado puede ser almacenado para ser utilizado más tarde. • Soporte para Eventos: Los beans se comunican a través del envío y recepción de evento gran promesa para el mejoramiento de la calidad de software proporcionando técnicas de lenguaje de programación para abordar cuestiones de modularidad, reusabilidad, mantenibilidad y extensibilidad. [4] Se enuncian a continuación las clases del API Reflection: TABLA 1. Clases de la API Reflection. Clases de la API Reflection Nombre de la clase Descripción java.lang.reflect.Constr uctor Proporciona información y acceso sobre un método constructor java.lang.reflect.Metho d. Proporciona información y acceso a un método java.lang.reflect.Array Proporciona métodos estáticos para crear y acceder dinámicamente a los arrays. java.lang.reflect.Memb er Interfaz que refleja información sobre un miembro de una clase (atributo, método o constructor) Reflection es la capacidad de un programa para manipular datos como algo que representa el estado del programa durante su ejecución. Hay dos aspectos de este tipo de manipulación: la introspección y la intercesión. La introspección es la capacidad de un programa para observar y, por lo tanto, razón acerca de su propio estado. La intercesión es la capacidad de un programa para modificar su propio estado de ejecución o alterar su propia interpretación o significado. [1] java.lang.reflect.Field Proporcionan información y acceso dinámico a un atributo de una clase. El atributo puede ser de clase (static) o de instancia java.lang.Class Representa clases e interfaces java.lang.Package Proporciona paquete. java.lang.ClassLoader Clase abstracta. Proporciona servicios para cargar clases dinámicamente JavaBeans proporciona métodos que utilizan la API Reflection para la creación de objetos y el método de invocación. Estas capacidades son proporcionadas por el paquete java.beans.expresión y java.beans.statement. Estas clases se utilizan internamente en Frameworks JavaBeans para manipular componentes de software mediante herramientas construidas, pero también están disponibles para su uso en programas de cliente. [1] java.lang.Class forName Carga una clase del classpath a partir de su nombre (nombre completo, con todos los paquetes. D. API Reflection La API Reflection de Java proporciona una forma dinámica para manipular un objeto en tiempo de ejecución. Tiene la capacidad de examinar o modificar el comportamiento en tiempo de ejecución de las aplicaciones que se ejecutan en la máquina virtual de Java.[14] Reflection computacional ha demostrado una información sobre un Métodos en Clases public getName() public isInterface( ) String boolean Devuelve el nombre de la clase reflejada por este objeto Class. Devuelve cierto si la clase es un interfaz. public boolean isArray( ) Devuelve cierto si la clase es un array public Class getSuperclass( ) Devuelve el objeto Class que representa a la clase base de la clase actual public Devuelve un array de objetos Class que representan los interfaces implementados Class[] Tercer Encuentro Internacional Universidad – Empresa en el sector de la Ingeniería – Hotel Bolívar - San José de Cúcuta 2016 4 Universidad Libre, Ariza. A. P. J, Optimización de aplicaciones orientada a objetos aplicando JAVABENAS y la API REFLECTION de JAVA getInterfaces( ) por esta clase. public Object newInstance( ) Crea una instancia de esta clase (invocando al constructor por defecto) public Constructor[] getConstructors( ) Devuelve un array con todos los constructores públicos de la clase actual. public Method[] getDeclaredMethods( ) Devuelve un array de todos los métodos públicos y privados declarados en la clase actual. public Method[] getMethods( ) public Method getMethod( String methodName, Class[] paramTypes ) public Method getDeclaredMethod( String methodName, Class[] paramTypes ) invokeGetterMethod ( Object target, Cadena nombre) Static object Devuelve un objeto Method que representa el método público identificado por su nombre y tipo de parámetros, declarado en esta clase o heredado de una clase base. Devuelve un objeto Method que representa el método público identificado por su nombre y tipo de parámetros, declarado en esta clase. El método puede ser privado. TABLA 2. Contructor Reflectiontestutils. Constructor ReflectionTestUtils() TABLA 3. Métodos que implementan Reflection en Spring. Métodos getField ( Object target, Cadena nombre) Conseguir el campo con el dado name de objeto Se invoca el método getter con el nombre determinado objeto suministrado con el value proporcionado. Static void invokeSetterMethod (Object target, C adena nombre, Object value) Se invoca el método setter con el nombre determinado objeto suministrado con el proporcionado value static void invokeSetterMethod (Object target, Cadena nombre, objeto de valor, la clase de tipo) Invoque el método setter con lo dado nombre en el objeto de destino se suministra con la suministrada valor. static void SetField (Object target, Cadena nombre, Object value ) Establezca el atributo con el nombre proporcionado target object al value suministrado. static void SetField (Object target, Cadena nombre, objeto de valor, la clase de tipo) Establezca el atributo con el nombre proporcionado target object al value suministrado. Devuelve un array de todos los métodos públicos en la clase actual, así como los declarados en todas las clases base o interfaces implementados por esta clase Reflection en Frameworks Los FrameWork, se puede considerar como Sistemas los cuales embeben soportes definidos como componentes o módulos de software. Son de gran utilidad para minimizar el coste de código y optimización de tiempos, ejemplo Spring. Se describen constructor y métodos del FrameWork Spring. ReflectionTestUtils, es una colección de métodos de utilidad basado en la Reflection, para su uso en la unidad y la integración de pruebas de escenarios; siempre se recomienda el uso de atributos nopúblicos. Static object proporcionado. Las investigaciones en los lenguajes de programación han sido conducidas por la necesidad de adquirir un software bien modularizado respetando el principio de separación de intereses. La buena modularización sirve muchas propiedades de la ingeniería de software tales como el entendimiento, extensibilidad, reusabilidad etc. También ayuda a hacer el software más adaptable, debido a que para que un interés sea adaptable (posiblemente dinámico) primero este tiene que ser limpiamente modularizado. El trabajo en la Reflection computacional, metaprogramación, y más recientemente, programación orientada a aspectos (AOP) ha sido un camino fructuoso para alcanzar mejor modularización y adaptación en muchos sistemas, tales como Middleware, sistemas concurrentes, programación distribuida, sistemas operativos, interfaces de usuario, aplicaciones contextualizadas.[5] 1. Metodología Propuesta. En la presente investigación se pretenden analizar los factores que inciden en la Optimización de Aplicaciones Orientada a Objetos aplicando Javabeans y la API Reflection de Java, realizando conocimiento profundo de las áreas implicadas, Tercer Encuentro Internacional Universidad – Empresa en el sector de la Ingeniería – Hotel Bolívar - San José de Cúcuta 2016 5 Universidad Libre, Ariza. A. P. J, Optimización de aplicaciones orientada a objetos aplicando JAVABENAS y la API REFLECTION de JAVA considerando algunos estudios previos que ya se tienen en otras investigaciones, e implementando métodos y aplicativo para generar resultados y documentación correspondiente. En este caso se busca evaluar las ventajas y diferencias que puede existir entre la programación orienta a objetos tradicional y la incidencia de la API Reflection de Java. El nivel de investigación, hace referencia al grado de profundidad con que se aborda el problema de investigación [13], en éste caso corresponde a una investigación inicialmente descriptiva, pero con predominio de carácter explicativa. Aplicación Sin API Reflection – Caso Cabecera de Reportes Clientes. public void cabecera() { jLabel1.setText("LISTADO DE "); String col[] = {"documento","primer_nombre","primer_apellido”}; String data[][] = {}; model = new DefaultTableModel(data,col); jTable1.setModel(model); jLabel1.setText(jLabel1.getText() + Metodos.etiqueta.toUpperCase()); } Aplicación de API Reflection – Caso Cabecera de Reportes. En el siguiente código, se ilustra la aplicación de la API Reflection en la generación dinámica de obtener la cabecera de una tabla por medio de la introspección de los contenidos de los campos de un objeto dado como parámetro en tiempo de ejecución. La ventaja incide en la reusabilidad del código, además de la independencia del objeto analizado, es decir, si a la abstracción “cliente” o “Persona” se le agregan más atributos, esto no afecta al código, manteniendo la independencia del JavaBeans. Dado contrario ocurre sin la aplicación de la API Reflection, ya que cada modificación de atributos a la abstracción obliga al cambio manual de los nombres de columnas de la cabecera, incurriendo en posibles errores y perdidas constantes de tiempo, es decir, la cantidad de modificaciones a las abstracciones del proyecto es proporcional a la perdida y costo del proyecto. Aplicación Sin API Reflection – Caso Cabecera de Reportes Personas. public void cabecera(){ jLabel1.setText("LISTADO DE "); String col[] = {"cedula","nombre”}; String data[][] = {}; model = new DefaultTableModel(data,col); jTable1.setModel(model); jLabel1.setText(jLabel1.getText() + Metodos.etiqueta.toUpperCase()); } En los códigos anteriores se ilustra la creación del encabezado en la programación orientada a objetos sin la aplicación de la API Reflection. Vemos que se debe especificar manualmente los nombres de las columnas dependiendo de los atributos presentados en la abstracción. Esto indica que por cada abstracción y Javabeans creado se debe generar un método donde especifique los nombres de las columnas del encabezado, significando la falta de optimización y costo en el desarrollo del código. Figura 1. Formulario de Reportes En la figura 1, se ilustra el Formulario de Reportes (Frame) que contiene los objetos “Table” y dos objetos de tipo “Button”. Al hacer click en el botón “Personas” o “Clientes” se genera el evento “ActionPerformed” como vemos: private void personasActionPerformed(java.awt.event.ActionEve nt evt) { Persona p1 = new Persona("12345", "ANA"); cabecera(p1); } private void clientesActionPerformed(java.awt.event.ActionEvent evt) { Tercer Encuentro Internacional Universidad – Empresa en el sector de la Ingeniería – Hotel Bolívar - San José de Cúcuta 2016 6 Universidad Libre, Ariza. A. P. J, Optimización de aplicaciones orientada a objetos aplicando JAVABENAS y la API REFLECTION de JAVA potencia de las clases y métodos embebidos en la API Reflection de Java. Estos métodos se reflejan la eficiencia en los FrameWork ya mencionados como Hibernate y Spring entre otros.Las siguientes abstracciones ya mencionadas son la base para la generación de los JavaBeans. Cliente c1= new Cliente(12345,"JUAN","ARIAS"); cabecera(c1); } En el evento “ActionPerformed “se instancia un objeto – JavaBeans ya sea “Cliente” o “Persona”, dependiendo del botón seleccionado y se invoca al método “cabecera”. public void cabecera(Object p){ jLabel1.setText("LISTADO DE "); String data[][] = {}; model = DefaultTableModel(data,Metodos.saber(p)); jTable1.setModel(model); jLabel1.setText(jLabel1.getText() Metodos.etiqueta.toUpperCase()); } new + El método “cabecera” recibe como parámetro cualquier objeto, crea el modelo de datos e invoca al método “saber”, éste se comporta como un método prototipo, ya que recibe en tiempo de ejecución cualquier objeto y retorna un vector de tipo String, que contiene los nombres de las columnas del encabezado para ser asignado al modelo de la tabla. public static String[] saber(Object objeto){ String[] col=null; Class clase = objeto.getClass(); etiqueta= clase.getSimpleName(); Field[] userfield = clase.getDeclaredFields(); col = new String[userfield.length]; for(int x=0;x<userfield.length;x++) { userfield[x].setAccessible(true); col[x]=userfield[x].getName(); } return col;} En el método estático “saber”, se muestra la potencia de la API Reflection de Java, recibiendo como parámetro cualquier objeto, realizando introspección de éste en tiempo de ejecución (RunTime), obteniendo así el nombre de la clase del objeto relacionado, los nombres de sus atributos por medio de un vector de tipo “Field” y, un vector String que los almacena, para retornarlo y asignarlo al modelo relacionado. Los prototipos de métodos se pueden diseñar y crear dependiendo de las necesidades aplicando la package reflection_table; public class Cliente { private long documento; private String primer_nombre; private String primer_apellido; public long getDocumento() { return documento;} public void setDocumento(long documento) { this.documento = documento;} public String getPrimer_nombre() { return primer_nombre;} public void setPrimer_nombre(String primer_nombre) { this.primer_nombre = primer_nombre;} public String getPrimer_apellido() { return primer_apellido;} public void setPrimer_apellido(String primer_apellido) { this.primer_apellido = primer_apellido;} public Cliente(long documento, String primer_nombre, String primer_apellido) { this.documento = documento; this.primer_nombre = primer_nombre; this.primer_apellido = primer_apellido;}} package reflection_table; public class Persona { private String cedula; private String nombre; public Persona(String cedula, String nombre){ this.cedula = cedula; this.nombre= nombre;} public Persona(){ } public String getCedula() { return cedula;} public void setCedula(String cedula) { this.cedula = cedula;} public String getNombre() { return nombre;} public void setnombre(String nombre) { this.nombre = nombre;}} Una vez aplicado la API Reflection de Java, se visualiza los siguientes formularios. Tercer Encuentro Internacional Universidad – Empresa en el sector de la Ingeniería – Hotel Bolívar - San José de Cúcuta 2016 7 Universidad Libre, Ariza. A. P. J, Optimización de aplicaciones orientada a objetos aplicando JAVABENAS y la API REFLECTION de JAVA } catch (IllegalArgumentException ex) { Logger.getLogger(Persona.class.getName()).log(Lev el.SEVERE, null, ex); } catch (IllegalAccessException ex) { Figura 2. Cabecera Listado de Personas aplicando API Reflection. Logger.getLogger(Persona.class.getName()).log(Lev el.SEVERE, null, ex);}} campos=campos.substring(0, campos.length()1); String sql="insert into"+" "+base+" "+" "+"("+nombres+") VALUES ("+campos.trim()+")"; Figura 3. Cabecera Listado de Clientes aplicando API Reflection. El siguiente ejemplo donde actúa la API Reflection de java es el método “generarsql”, retorna un String que representa el Sql de la cláusula insert dado el nombre de la tabla de la base de datos donde se realiza la inserción y el objeto a insertar. public static String generarSql(String base, Object objeto){ Class clase = objeto.getClass(); Field[] userfield = clase.getDeclaredFields(); String nombres=""; String campos=""; for(int x=0;x<userfield.length-1;x++) { userfield[x].setAccessible(true); nombres+=userfield[x].getName()+",";} nombres+=userfield[userfield.length1].getName(); for(int x=0;x<=userfield.length-1;x++){ try { campos += "'" + userfield[x].get(objeto)+"',"; return sql; } IV. RESULTADOS Resultados Parciales Anteriormente se pensaba que si un algoritmo es sencillo su eficiencia no es tan óptima, sin embargo, la sencillez es una característica muy interesante a la hora de diseñar un algoritmo, pues facilita su verificación, el estudio de su eficiencia, mantenimiento como escalabilidad y confiabilidad. Por eso es mejor un código legible y sencillo que algoritmos redundantes. Respecto al uso eficiente de los recursos, éste suele medirse en función de dos parámetros: el espacio, es decir, memoria que utiliza, y el tiempo, lo que tarda en ejecutarse. Ambos representan los costes que supone encontrar la solución al problema planteado mediante un algoritmo. Dichos parámetros van a servir además para comparar algoritmos entre sí, permitiendo determinar el más adecuado, de entre varios que solucionan un mismo problema. A la hora de medir el tiempo, se hace en función del número de operaciones elementales que realiza dicho algoritmo, entendiendo por operaciones elementales (en adelante OE) aquellas que el ordenador realiza en tiempo acotado por una constante. En general, es posible realizar el estudio de la complejidad de un algoritmo sólo en base a un conjunto reducido de sentencias, aquellas que caracterizan que el algoritmo sea lento o rápido en el sentido que nos interesa[6]. Tercer Encuentro Internacional Universidad – Empresa en el sector de la Ingeniería – Hotel Bolívar - San José de Cúcuta 2016 8 Universidad Libre, Ariza. A. P. J, Optimización de aplicaciones orientada a objetos aplicando JAVABENAS y la API REFLECTION de JAVA Una vez se tiene algoritmos cuya funcionalidad es eficiente, es necesario definir criterios para medir su rendimiento o comportamiento. Estos criterios se centran principalmente en su simplicidad y en el uso eficiente de los recursos. En este trabajo se identificaron variables como líneas de código, rehúso, bloques try-catch, llamados a métodos dentro de muchas que pueden indicar la optimización una vez aplicada la API Reflection de java. Los resultados parciales se ajustan a la siguiente figura 4 obtenidos del método “saber”. POO VS API REFLECTION programación orientada a objetos • La API Reflection de Java y JavaBeans, permite al programador realizar instancias dinámicas de objetos e introspección de ellos en tiempo de ejecución • Aplicando la API reflection de Java se reduce la sobrecarga de métodos utilizado en la Programación orientada a objetos tradicional • Aplicando los métodos nativos de la API Reflection de Java de forma eficiente, se pueden crear métodos prototipo, optimizando costos de código y tiempo • Con la API Reflection de Java se pueden construir FrameWorks para enlazar con bases de datos relacionales REFERENCIAS 15 lineas de codigo 10 llamados a metodos 5 0 [1] Z. Shams and S. H. Edwards, “Reflection Support : Java Reflection Made Easy,” pp. 38–52, 2013. [2] POO (No API reflection) Reflection Figura 4. Medición de Factores entre la POO y API Reflection En la gráfica anterior se ilustra como con la Aplicación de la API Reflection de Java, facilita la construcción de aplicaciones Orientado a objetos. Prestando oportunidad a desarrolladores e investigadores a optimizar procesos de desarrollo y construcción de frameWork. Optimizando procesos se genera reducción de los costos, ya que se optimizan acciones relacionados de tipo CRUID (create, read, update, insert, delete), ahorro de tiempo y dinero. El proyecto dará por resultado una vez terminado, una matriz que visualice las ventajas de la API Reflection de java sobre la Programación orientada a objetos tradicional. El aplicativo tendrá métodos embebidos que soportan la incidencia de la API Reflection de Java. V. CONCLUSIONES. • La programación orientada a objetos tradicional no optimiza procesos, ni reduce el coste de implementación de un proyecto de software orientado a objetos. • Con la API Reflection de Java y JavaBeans, se optimizan los métodos tradicionales de la S. Allier, H. Sahraoui, S. Sadou, S. Allier, H. Sahraoui, S. Sadou, and V. R. Object-oriented, “Restructuring Object-Oriented Applications into Component-Oriented Applications by Using Consistency with Execution Traces To cite this version : Restructuring Object-Oriented Applications into Component-Oriented Applications by using Consistency with Execution Traces,” 2010. [3] G. Amato, M. Chiara, and M. Francesca, “Exploiting Linearity in Sharing Analysis of Object-oriented Programs,” Electron. Notes Theor. Comput. Sci., vol. 322, pp. 3–18, 2016. [4] “RESEARCH PAPERS OPENC : EXTENDING C WITH COMPUTATIONAL REFLECTION,” vol. 8, no. 4, p. 2014, 2014. [5] É. Tanter, R. Toledo, G. Pothier, and J. Noyé, “Flexible metaprogramming and AOP in Java,” vol. 72, pp. 22–30, 2008. [6] Universidad de Málaga, Lenguajes y Ciencias de la Computación, [Documento en línea]. Disponible en: http://www.lcc.uma.es/~av/Libro/CAP1.pdf. [Consulta: 2016, Marzo 20]. [7] Universidad de Alicante, Introducción al Paradigma Orientado a objetos, [Documento en línea]. Disponible http://rua.ua.es/dspace/bitstream/10045/15993/1/POO-1-Intro-10-11.pdf. [8] Morero,Francisco. Introducción a la OOP. Versión 1.0.0 19992000 © Grupo EIDOS. [9] Arenas Luís. Universidad Nacional Autónoma de México, facultad de contaduría y administración. [Documento en línea]. Disponible http://fcasua.contad.unam.mx/apuntes/interiores/docs/98/opt/java.pdf. Tercer Encuentro Internacional Universidad – Empresa en el sector de la Ingeniería – Hotel Bolívar - San José de Cúcuta 2016 9 Universidad Libre, Ariza. A. P. J, Optimización de aplicaciones orientada a objetos aplicando JAVABENAS y la API REFLECTION de JAVA [10] Tecnología de componentes JavaBeans. [Documento en línea]. Disponible http://www.ctr.unican.es/asignaturas/MC_OO/Doc/JavaBeans_0910.pdf [11] Universidad de Oviedo. DISEÑO DE MÁQUINAS ABSTRACTAS BASADAS EN REFLECTIVIDAD COMPUTACIONAL. [Documento en línea]. Disponible http://di002.edv.uniovi.es/~cueva/asignaturas/TI/pi-ortin.pdf. [12] Universidad de Nebrija. Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática. [Documento en línea]. Disponible. http://www.nebrija.es/~oruano/java/04%20Programacion%20orienta da%20a%20objetos%20con%20Java.pdf. [13] Arias, F. (2006). El Proyecto de Investigación. Introducción a la Metodología Científica. Caracas: Editorial Episteme. [Consulta: 2015 Abril 5]. [14] Norazah Yusof, Nur Ariffin Mohd Zin, Noor Shyahira Adnan. Java Programming Assessment Tool for Assignment Module in Moodle E-learning System. [15] Universidad Complutense de Madrid. Facultad de informática. [Documento en línea]. Disponible. http://pendientedemigracion.ucm.es/info/tecnomovil/documentos/fjava.p df. NOTA ACLARATORIA El documento no ha sido publicado previamente, o no presenta ninguna restricción previamente declarada o certificada en otro medio de publicación. Es un trabajo original. Se autoriza así su Publicación en cualquier medio, digital o impreso. Tercer Encuentro Internacional Universidad – Empresa en el sector de la Ingeniería – Hotel Bolívar - San José de Cúcuta 2016