Pablo Fernández Busch - Marcos Pasqualino

Slides:



Advertisements
Presentaciones similares
ANALIZADOR SEMANTICO DIANA CAROLINA CASTAÑO YANCI VIVIANA CASTRO PEDRO LUIS FLÓREZ SANTIAGO GUTIÉRREZ A.
Advertisements

FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
POLIMORFISMO UNIDAD 4.
Herencia en C#.
Lenguaje de programación Java
Pruebas Orientadas a Objeto
Qbox-Fundation Una plataforma de metadatos para la medición de la calidad Cecilia Stevenazzi Laura Cuadrado.
Herencia simple y multiple
Arquitectura CLARO-TECNOTREE
Polimorfismo Unidad 4.
Introducción a la Orientación a Objetos
La Programación Orientado a Objetos
Fundamentos de Ingeniería de Software
POO Santiago, Mayo 2004 TRABAJO DE INVESTIGACIÓN POO Programación Orientada a Objetos CENAFOM Carolina Bravo V. Jaime Jofré B.
CONSTRUCCIÓN DEL MARCO TEÓRICO
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
Aplicación del paradigma orientado a objetos
DIAGRAMAS DE CLASES Completando los diagramas de interacción, es posible identificar la especificación de las clases que participarán en la solución indicando.
Diseño y programación de
Ingeniería del Software
CLASES, OBJETOS, HERENCIA y COMPOSICIÓN
El Modelo de Objetos -. Modelo de Objetos2 Descomposición de un problema zEncontrar los conceptos centrales del problema zDefinir las responsabilidades.
HERENCIA.
Medio de tele-comunicación
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Lic. Rosemary Torrico Bascopé
El paradigma de la orientación a objetos La programación orientada a objetos genera códigos eficientes y estandariza la metodología de programación, además.
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.
Introducción a la programación Orientada a objetos
Tema 10: Interfaces Antonio J. Sierra.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
I NSTITUTO TECNOLOGICO SUPERIOR DE LIBRES INGENIERIA EN SISTEMAS COMPUTACIONALES PROGRAMACION ORIENTADA A OBJETOS ESMERALDA LIMON ESCUTIA REDEFINICION.
Criterios de la Orientación a Objetos 1. Método y Lenguaje (proceso de pensamiento y notaciones para analizar y producir software). 2. Implementación y.
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
LEDA Un Lenguaje para la Especificación y Validación de Arquitecturas de Software Carlos Canal Velasco Depto. de Lenguajes y Ciencias de la Computación.
Ingeniería de Software
Programación orientada a objetos
Ciclo de Vida del Software Paradigmas de Desarrollo
LA IMPORTANCIA DE LAS PyMEs
Métricas Técnicas para Sistemas Orientados a Objeto
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
Integrantes: Daniel Briceño Luis Carrera..  CommonKADS es la metodología desarrollada para apoyar la ingeniería del conocimiento.
Distribución y Movilidad en Arquitecturas Software Orientadas a Aspectos Nour Ali Director: Isidro Ramos NODO: UPV.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Importancia en la efectividad del:
Diseño de Software y su Proceso
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
INTRODUCCIÓN A LA INGENIERÍA DEL SOFTWARE
UNIVERSIDAD LATINA BASES DE DATOS DISEÑO DE BASES DE DATOS (modelos para el diseño)
Especialización en Desarrollo de Software
Presentado por: PABLO ANDRES DIAZ SAIN HASSAM CAICEDO
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD
Programación orientada a objetos
Herencia y Clases Abstractas
Actividades en el Proceso de desarrollo de Software
Simulador Redes Nombres etc,,.
PROGRAMACIÓN IV INTRODUCCIÓN.
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación CLASES DE JAVA Diciembre de 2008.
Ing. Johanna Macias Algoritmo, Estructura y Programación III.
Tipo de relación entre clases Es uno de los aspectos que distinguen el paradigma de orientación a objetos frente a otros paradigmas. Mecanismo que,
La Programación Orientado a Objetos
DISEÑO DE BASES DE DATOS (modelos para el diseño)
Clases “ Es una Abstracción de un elemento del mundo real ”
Herencias Conceptos básicos i
Programación Orientada a Objetos Unidad 5. Los objetos son entidades que combinan estado Contiene toda la información denominados atributos REPASO Cada.
Técnica de programación que utiliza abstracciones de la vida real (Objetos) como bloque esencial de construcción.
Prof. Manuel B. Sánchez. Es un mecanismo y uno de los pilares de la POO que permite definir nuevas clases a partir de otras preexistentes. La Herencia.
Transcripción de la presentación:

Pablo Fernández Busch - Marcos Pasqualino Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos Pablo Fernández Busch - Marcos Pasqualino

Contenido Motivación: Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología Implementación: Jerónimo Casos de Estudio: Collections y Swing Análisis de Resultados: Patrones de codificación Lecciones Aprendidas Conclusiones Motivación Algunos conceptos que impulsan el desarrollo de este trabajo. ACF Herramienta sobre la cual se basa la metodología desarrollada. Desarrollo Metodología Proceso desarrollado. Implementación Detalla la herramienta construida en base a la metodología planteada. Casos de Estudio Algunos de los casos interesantes que surgieron de la experimentación con Collections y Swing. Análisis de Resultados Se analizan los resultados obtenidos. Lecciones Aprendidas Se comentan algunas de las lecciones aprendidas durante el desarrollo de este trabajo. Conclusiones Presentamos las conclusiones. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Motivación Herencia Reingeniería Tipos : Construcción evolutiva Implementación / Subclasificación Interfaz Clase Construcción evolutiva Contratos implícitos Reingeniería La herencia es uno de los mecanismos de construcción más importantes de POO. Resulta crucial poder desarrollar y mantener fácilmente las jerarquías de clases. Contar con jerarquías bien formadas facilita tanto la comprensión como el mantenimiento de un sistema orientado a objetos, permitiendo la introducción de cambios y corrección de errores ordenadamente. Existen 3 tipos de herencia: Implementación/Subclasificación: se heredan implementación de métodos de la clase padre. Interfaz: se hereda la interface pero no la implementación de los métodos. Clase: combinación de los otros dos tipos de herencia. Por ejemplo: heredar de una clase abstracta (con implementación y sin) Construcción evolutiva Las jerarquías de clases se construyen normalmente en forma evolutiva, participando en el proceso diferentes desarrolladores. Esto hace que se generen distintos contratos implícitos (dependencias implícitas), los cuales deben ser entendidos por los desarrolladores a la hora de realizar cambios o extensiones a un sistema orientado a objetos. Reingeniería “Modificación de sistemas, luego de haber aplicado una ingeniería inversa, generalmente para añadir nueva funcionalidad o corregir errores”. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Jerarquía de Clases Las clases B y C reutilizan comportamiento definido en la clase A, vía this Las clases D y E utilizan comportamiento definido en la superclase vía super Las clases D y E utilizan estado de sus superclases Las clases D y E extienden comportamiento de sus superclases Decir que lo mas importante es que se identifican grupos de invocaciones que cumplen con esa condición a la vez ¿? Jerarquía de ejemplo, muestra dependencias en el código. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Contratos Implícitos Detección no trivial ¿Qué esconden? Documentación desactualizada No explícitos en el código fuente. ¿Qué esconden? Definiciones, utilizaciones, reutilizaciones, extensiones, cancelaciones … Contratos Implícitos Son dependencias que se generan entre las distintas clases y que no se ven explícitamente en el código fuente. Resultan difíciles de detectar al momento de utilizar o modificar una clase perteneciente a una jerarquía, o inclusive al tener que incorporar una o varias clases nuevas a ésta. Es importante que un desarrollador comprenda los contratos y dependencias implícitas entre clases y subclases, de otra manera se corre el riesgo de romper los contratos al introducir cambios. ¿Qué esconden? Si una clase define y utiliza (o no) su propio estado y comportamiento. Si las clases utilizan estado definido en superclases. Si las clases reutilizan o extienden (o no) comportamiento de sus superclases. Si una clase cancela el comportamiento de una superclase. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Análisis de Conceptos Formales Es una herramienta que permite identificar grupos de elementos que tienen propiedades comunes. Elementos importantes Tabla de incidencia Concepto Lattice El ACF ha sido aplicado en diversas áreas como psicología, sociología, antropología, medicina, biología, lingüística, ciencias de la computación, matemáticas e ingeniería industrial. Tabla de incidencia AKA Contexto. Es la principal estructura de ACF. Es un conjunto finito de: Elementos, propiedades y una relación entre cada uno de ellos. Es un subconjunto del producto cartesiano entre E y P. Concepto Es un conjunto maximal de elementos que comparten propiedades. Lattice El conjunto de todos los conceptos forman un orden parcial completo, llamado Lattice. La representación gráfica se lleva a cabo mediante un diagrama de líneas (diagrama de Hasse). Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Tabla de Incidencia Rock Pop Jazz Blues Salsa Merengue Tango Mambo José X Juan Ana Camila Pedro María Nicolás Gastón Es un ejemplo que plantea los gustos musicales para un conjunto de personas Las personas son consideradas elementos de la tabla. Los géneros musicales son considerados propiedades. Las x indican la relación “le gusta”. Para entender la noción de Concepto Formal observemos la propiedades de Ana, y preguntémonos por todos aquellos a quienes les gustan los mismos géneros que a ella: Camila. De esta forma, obtenemos los conjuntos {Ana, Camila} y {Pop, Salsa, Merengue}, que es un concepto de este contexto. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Lattice Completo Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Lattice Reducido Este es el lattice que se obtiene al calcular los conceptos de la tabla de incidencia presentada anteriormente. Cada vértice (o nodo) representa un concepto. A este lattice se le aplicó un proceso de eliminación de la información redundante, conocido como poda (prunning). Por ejemplo el concepto ({Ana}, {<vacío>}), antes de la poda se leía ({Ana, Camila}, {Pop, Salsa, Merengue}) Como se interpreta un lattice podado: Cada concepto tiene todas las propiedades de los conceptos que están arriba, y todos los elementos de los que están abajo. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Metodología Desarr0llada Jerarquía de clases Tabla de incidencia Patrones Lattice Propiedades La metodología desarrollada consiste en 5 pasos. Jerarquía de clases El proceso comienza con un análisis de las jerarquías de clases en estudio. Propiedades De la jerarquía se extrae un conjunto de propiedades predefinidas. Tabla de incidencia Se construye a partir de las propiedades. Lattice Se obtienen conceptos a partir de la tabla, y se construye el lattice. Patrones Mediante un análisis semiautomático se detectan patrones en los conceptos del lattice. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Propiedades ¿Qué son? ¿Para qué sirven? ¿Cómo se detectan? Conjunto de características ¿Para qué sirven? Extracción de información Agrupadas conforman patrones ¿Cómo se detectan? ¿Qué es una propiedad? Es un conjunto de características dadas en una invocación o un acceso a estado en el código fuente. ¿Para qué sirven? Sirven para extraer información valiosa del código fuente. Agrupando diferentes conjuntos de propiedades podemos detectar distintos patrones, los cuales representan prácticas buenas, malas o irregulares. ¿Cómo se detectan? Para explicar como se detectan las propiedades utilizaremos un ejemplo simple detectado en la jerarquía de clases de Java Collections… Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Detección de Propiedades Ejemplo Acceso directo a estado local Esta propiedad es detectada cuando se accede a una variable definida localmente en forma directa. En la clase ArrayList se define una variable de instancia llamada size, la cual es accedida en forma directa por el método isEmpty(). ¿Cómo funciona la detección en este caso particular? En una primera instancia, se detecta que existe una referencia a la variable de instancia size. Luego se analiza si la clase donde se produce la referencia coincide con la clase donde se encuentra definida dicha variable, en caso de que sea así, una instancia de la propiedad Acceso directo a estado local es detectada. Concreto en ancestro El método putAll(), que es invocado en EnumMap, se encuentra definido y es concreto en la superclase AbstracMap. Acceso directo a estado local Concreto en ancestro ArrayList -> size X EnumMap -> putAll Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Patrones ¿Qué son? Tipos Conjunto de propiedades Buenas prácticas Prácticas irregulares Malas prácticas Al aplicar ACF a las jerarquías de clases, obtenemos distintos conjuntos de propiedades, algunos de los cuales conforman patrones. La detección de estos patrones permite analizar si se han llevado a cabo decisiones de diseño buenas, malas o irregulares. Consideramos patrones de tres tipos diferentes: Buenas prácticas: esquemas que minimizan la redundancia y se alinean con la herencia por especialización de clases, características generalmente aceptadas como buenas prácticas de diseño orientado a objetos. Prácticas irregulares: son decisiones de diseño dudosas que generalmente pueden ser mejoradas fácilmente, aplicando cambios mínimos. Malas prácticas: representan decisiones que atentan contra la reusabilidad, compresibilidad y mantenimiento de la jerarquía en estudio. Frecuentemente requieren un cambio substancial del diseño para su eliminación, motivo por el cual representan un costo considerable de mantenimiento. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Detección de Patrones Ejemplo Comportamiento concreto local redefinido Propiedades: Concreto localmente Concreto en descendiente Invocado vía this Identifica un método concreto tanto localmente como en un descendiente. La figura muestra un ejemplo de este patrón, con el método installDefaults() y la clase BasicProgressBarUI. BasicProgressBarUI invoca this.installDefaults(), que es heredado y redefinido en una subclase. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Implementación Nuestra herramienta: Jerónimo Cuatro etapas de análisis: Análisis de código fuente Extracción de propiedades Construcción de la tabla de incidencia y el lattice Inferencia de patrones Cálculo de métricas Con el motivo de llevar a cabo la metodología descripta, implementamos una herramienta que llamamos Jerónimo. Implementada en Java De forma transversal al proceso, se calculan métricas que aportan información valiosa. A continuación describiremos cada una de las etapas de análisis. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Proceso Jerónimo Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Análisis de Código Fuente Construcción de un metamodelo del código fuente Se utilizó una biblioteca de terceros: Recoder Metamodelo Código fuente Se decidió utilizar esta herramienta para analizar el código fuente Java, ya que el metamodelo generado brinda la información necesaria para detectar propiedades y posteriormente, construir el contexto sobre el cual se basa el análisis propuesto en este trabajo. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Extracción de Propiedades Análisis del metamodelo Invocaciones a métodos Acceso a variables de instancia Características consideradas Ubicación de la declaración Tipo de invocación Métodos de acceso a estado, concretos, abstractos y cancelados Comparación de métodos Propiedades Metamodelo Del metamodelo generado analizamos cada una de las invocaciones a métodos y accesos a estado. Ubicación de la declaración: si el destinatario del mensaje es la misma clase que lo emite, una superclase, una subclase u otra clase externa a la jerarquía (local, ancestro, descendiente o externo). Tipo de invocación: si es this, super o externa. Métodos…: Hubo que tomar decisiones sobre que determina que un método sea de acceso a estado, concreto, abstracto o cancelado. Comparación de métodos: Decidimos considerar a 2 métodos iguales cuando su declaración es igual (nombre, parámetros y retorno). No consideramos ni el nivel de protección ni el cuerpo. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Construcción de la Tabla de Incidencia y el Lattice Se utilizó y extendió la biblioteca de ACF Colibri Construcción de la tabla de incidencia a partir de las propiedades detectadas Usando la tabla de incidencia se construye el lattice Propiedades Tabla de incidencia Lattice Motivos para elegir Colibri: Las estructuras (tabla de incidencia y el lattice) se ajustaban a nuestro requerimientos funcionales. La biblioteca es fácilmente extensible. Ofrecía una buena performance. Para obtener el lattice reducido, se extendió Colibri. El lattice reducido nos asegura que cada invocación aparezca en exactamente 1 concepto, participando eventualmente en un patrón. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Inferencia de Patrones Dos fases: Búsqueda automática de instancias de patrones conocidos Descubrimiento de nuevos patrones a través de un análisis manual Detección de patrones contenidos en otros más generales Lattice Realizando un análisis manual, pudo mejorarse el catálogo de patrones. El análisis manual de los resultados reveló que, con frecuencia, se dan casos en los que el conjunto de propiedades de un concepto puede contener distintos tipos de patrones. Patrones Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Métricas Aportan información sobre el proceso y los resultados obtenidos Distintos grupos de métricas De las jerarquías analizadas Del contexto estudiado Del análisis realizado De los patrones detectados Métricas de las jerarquías: Número de clases Número de interfaces Profundidad de la jerarquía Métricas del contexto: Número de elementos Número de propiedades Densidad del contexto (Número de relaciones / Tamaño de la tabla) Métricas del análisis: Número de conceptos (prefiltrado) Número de conceptos (postfiltrado) Tiempo total de ejecución Métricas de patrones: Número de instancias de patrones detectadas Número de conceptos con inclusión de patrones Tipos de patrones Tipos de patrones “buenas prácticas” Tipos de patrones “malas prácticas” Tipos de patrones “prácticas irregulares” Métricas Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Casos de Estudio Se probó la metodología y la herramienta en: Java Collections Swing Los resultados se utilizaron para validar y enriquecer el análisis Se decidió utilizar Collections por los siguiente motivos: Presenta una jerarquía de clases de tamaño manejable para el análisis manual de resultados. Es la jerarquía escogida por muchos autores para validar sus resultados. Es una jerarquía de clases madura, basada en la biblioteca de colecciones de Smalltalk. Forma parte de Java Foundation Classes Es utilizada en una gran cantidad de proyectos. Se decidió utilizar Swing debido a que su mayor tamaño (x10), permite obtener más información. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Caso de Estudio: Buena Práctica Comportamiento concreto de ancestro redefinido y extendido TreeMap extiende comportamiento heredado En este caso aparecen dos clases. Las clases son AbstractMap y la subclase TreeMap. La buena práctica se presenta cuando la clase TreeMap sobreescribe el método putAll() (heredado de la superclase) incluyendo comportamiento propio y reutilizando el comportamiento de la superclase usando la referencia a super. Además del patrón del patrón detectado de forma estricta, se detectan otros 6 tipos de patrones contenidos en el concepto. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Caso de Estudio: Irregularidad Uso de nombres incorrecto El nombre del método size() coincide con el nombre de la variable de instancia size. Este caso es considerado una irregularidad debido a que denota una mala decisión al escoger los nombres de los métodos. Este caso podría solucionarse simplemente renombrando el método size() a getSize(). Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Caso de Estudio: Mala Práctica Acceso directo a estado en ancestro SyntTableHeaderUI accede directamente a una variable definida en su superclase La subclase accede directamente a una variable de instancia header definida en BasicTableHeaderUI, violando así uno de los principios fundamentales de la programación orientada a objetos, el encapsulamiento. Resulta interesante haber detectado 632 instancias de este patrón al analizar Swing. Estos casos podrían solucionarse definiendo métodos de acceso a estado (getters y setters) y elevando el nivel de protección de las variables de instancia. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Métricas de Patrones Collections Swing Instancias de patrones 54 1258 Conceptos con inclusión de patrones 25 357 Tipos de patrones 8 17 Tipos de patrones Buenas Prácticas 5 10 Tipos de patrones Malas Prácticas 3 Tipos de patrones Prácticas Irregulares 2 El cuadro muestra un resumen de la cantidad y los tipos de patrones encontrados en Java Collections y Swing. La diferencia de tamaños impacta sobre las mediciones mostradas. Una primera observación es que Collections no tiene prácticas irregulares para documentar. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Análisis de Resultados Collections vs Swing Densidad de la tabla de incidencia Por un lado, el numero de invocaciones analizadas en Swing es unas 20x más que en Collections. Por el otro lado, hay sólo doble de propiedades detectadas. Esto resulta en una densidad mucho menor en Swing. Esto indica que cada invocación posee pocas características en común con el resto de las invocaciones. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Análisis de Resultados Lattice completo vs lattice reducido Proporción de patrones Lattice completo vs lattice reducido El lattice podado reduce notablemente la información a ser analizada, agilizando su procesamiento. Collections: ~ 1/6 Swing: ~ ½ Proporción de patrones Collections Como se puede observar en el gráfico, en Collections se detectó una gran proporción de buenas prácticas. Predominantemente reutilización de comportamiento del ancestro vía this, lo cual quiere decir que las clases reutilizan mucho el comportamiento provisto por sus superclases. Con respecto a las malas prácticas se detectaron algunas cancelaciones de métodos y rupturas de encapsulamiento por acceso directo a estado. Resulta extraño que no se observen instancias del patrón Template & Hook ya que sería normal que este tipo de jerarquías definan comportamientos comunes para todas las colecciones y éstas últimas definan el comportamiento específico. Swing Swing presenta al igual que Collections, una gran cantidad de reutilizaciones de comportamiento definido en superclases. Resulta interesante haber detectado prácticas irregulares, entre ellas, la definición de comportamiento que no es utilizado en la jerarquía. Con respecto a las malas prácticas, se detectó un gran número de casos de acceso directo a estado en ancestro, lo cual significa que se viola el encapsulamiento de las superclases. También se encontraron algunas cancelaciones. Falsos Positivos Hay que tener en cuenta que los números presentados resultan del análisis automático, y que una porción de ellos podrían representar falsos positivos, que actualmente sólo son detectables a través de un análisis manual. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Lecciones Aprendidas Análisis de conceptos formales Análisis manual de resultados Evolución del proceso Detección de nuevos patrones Patrones contenidos (Superpatrones) Volumen de información Análisis de Conceptos Formales: Resultó sumamente útil para la detección de patrones de codificación no documentados. Análisis manual de resultados Evolución del proceso: el análisis manual no sólo permitió enriquecer la información generada, sino también el proceso, que evolucionó significativamente desde que comenzó la implementación. Detección de nuevos patrones: el proceso iterativo e incremental desarrollado permitió el descubrimiento de nuevos e interesantes patrones (Ej: mal uso de nombres). Patrones contenidos: son patrones que incluyen a otros en la definición de su conjunto de propiedades (intensión del concepto). Volumen de información: el análisis de Swing ocasionó en un principio problemas de rendimiento debido al gran volumen de información que debía ser procesado. Un análisis realizado con un profiler permitió detectar y eliminar cuellos de botella, mejorando la performance en un factor de 10x. Aún así, el alto requerimiento de memoria obligó a realizar las pruebas en un entorno linux. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Conclusiones Descubrimiento de patrones de codificación Detección de fortalezas y debilidades Análisis semiautomático Descubrimiento de patrones de codificación Ayudan a contestar preguntas tales como ¿Qué clases definen y usan (o no) su propio estado y comportamiento? o, ¿Qué clases reutilizan o extienden (o no) el comportamiento de sus superclases? Detección de fortalezas y debilidades La clasificación de estos patrones nos permite encontrar rápidamente fortalezas y debilidades en el diseño de la jerarquía de clases. Análisis semiautomático El análisis sigue siendo semiautomático y se necesita una activa participación de los desarrolladores para identificar los patrones. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Trabajo Futuro Definición de Superpatrones Ampliar información de las propiedades Continuar con el análisis de resultados Analizar cuerpo de los métodos Incorporar propiedades negativas Muchas nuevas características y requerimientos surgieron durante el desarrollo de la aplicación y con la implementación del proceso explicado anteriormente en este trabajo. Algunas de ellas pudieron ser integradas a la metodología, y forman parte actualmente de la herramienta presentada. Otras, no pudieron ser implementadas. Superpatrones: considerar la posibilidad de definir superpatrones como la combinación de otros patrones. Información Propiedades: tener en cuenta el orden de las clases en la jerarquía. Esto permitiría conocer la morfología de la jerarquía, pudiendo generar nuevas propiedades basadas en este tipo de información. Continuar con el análisis de resultados: identificando distintos conjuntos de propiedades, para luego considerarlos como nuevos patrones. Analizar cuerpo de los métodos: enriquecer la detección de propiedades mediante un análisis del cuerpo de los métodos. En especial para getters y setters y métodos que contienen mensajes con el mismo nombre y llamados con super. Incorporar propiedades negativas: excluir explícitamente propiedades en las definiciones de patrones, como por ejemplo: no implementado en descendiente. Para asegurar la identificación de patrones con mayor precisión. Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos

Preguntas Construcción de jerarquías de clases Análisis de Conceptos Formales Desarrollo de la Metodología Implementación: Jerónimo Casos de Estudio: Collections y Swing Patrones de codificación Patrones de Codificación de Jerarquías de Clases en Aplicaciones Orientadas a Objetos