Download Modelo de Orientación a Aspectos
Document related concepts
Transcript
Modelo de Orientación a Aspectos Noviembre, 2010 Ing. Sahyra Yépez Agenda ¿Qué es el Modelo Orientado a Aspectos? ¿Qué es un Aspecto? Programación Orientada a Aspectos Funcionamiento de POA Características de POA Tejido estático Vs. dinámico Lenguajes Orientados a Aspectos Comparación entre POA y POO Ventajas y Desventajas ¿Qué es el Modelo Orientado a Aspectos? Define un mecanismo que ayuda a resolver problemas complementarios de código disperso o scattered (un mismo servicio es invocado de manera similar desde muchas partes del programa) y código enmarañado o tangled (una misma operación tiene que acceder a varios servicios, además de cumplir con su función específica). ¿Qué es el Modelo Orientado a Aspectos? Provee una unidad modular llamada aspecto y un mecanismo de composición que permite entremezclar unidades modulares de comportamiento común con otras unidades modulares básicas del sistema. ¿Qué es el Modelo Orientado a Aspectos? Fig. 1: Proceso de tejido de Aspectos con el código base ¿Qué es el Modelo Orientado a Aspectos? OA se basa en el principio de “separation of concerns” (separación de intereses, asuntos o propiedades del sistema). Este principio se orienta hacia la descomposición del dominio del problema y de la solución. ¿Qué es el Modelo Orientado a Aspectos? Fig. 2: Descomposición Modular Vs. Aspectual ¿Qué es el Modelo Orientado a Aspectos? Ejemplo 1 Existen Conceptos entrecruzados: Clase Libro { ….. <todas las cosas de libro> <manejo de errores> … } Clase Socio { ….. <todas las cosas de socio> <manejo de errores> <controles de acceso> } * Errores * Seguridad Clase Alquiler {….. <todas las cosas de alquiler> <manejo de errores> <controles de acceso> } ¿Qué es un Aspecto? “Un aspecto es una unidad modular que se disemina por la estructura de otras unidades funcionales. Los aspectos existen tanto en la etapa de diseño como en la de implementación...” (G. Kiczales). ¿Qué es un Aspecto? Un componente es aquella propiedad que se puede encapsular claramente en un procedimiento (un objeto, un método, un API), mientras que un aspecto no se puede encapsular en un procedimiento con los lenguajes tradicionales. Los aspectos no suelen ser unidades de descomposición funcional del sistema, sino propiedades que afectan al rendimiento o la semántica de los componentes. ¿Qué es un Aspecto? Algunos ejemplos de aspectos son: Patrones de acceso a memoria. Sincronización de procesos concurrentes. Manejo de errores. Manejo de persistencia, etc. Programación Orientada a Aspectos Es un paradigma de programación cuya intención es permitir una adecuada modularización de las aplicaciones y posibilitar una mejor separación de incumbencias. Programación Orientada a Aspectos Objetivo: Separación de las funcionalidades dentro del sistema: • Por un lado funcionalidades comunes utilizadas a lo largo de la aplicación. • Por otro lado, las funcionalidades propias de cada módulo. Programación Orientada a Aspectos Una implementación basada en POA consiste en: El lenguaje base o componente para programar la funcionalidad básica. Uno o más lenguajes de aspectos para especificar los aspectos. Programación Orientada a Aspectos Un tejedor de aspectos para la combinación de los lenguajes. El programa escrito en el lenguaje componente que implementa los componentes. Uno o más programas de aspectos que implementan los aspectos. Programación Orientada a Aspectos Fig. 3: Estructura POA Funcionamiento de POA Consiste de tres Pasos: 1. Descomposición de es descomponer los requerimientos para distinguir aquellos que son componentes de los que son aspectos. 2. Implementación de implementar separado. 3. Recomposición: cada aspectos: requerimientos: requerimiento por dar las reglas de recomposición que permitan combinar el sistema completo. Características de POA Las características relevantes de la POA se pueden definir de la siguiente forma: 1. 2. Punto de unión o enlace (join point): por ejemplo, una llamada a un método, o un constructor, o el acceso a un miembro de una clase en particular. Intersección o punto de corte (pointcut): por ejemplo, "llamadas a los métodos que empiecen por set". Características de POA 3. Guía/Consejo/Orientación (advice): por ejemplo el before, que se ejecuta antes de un punto de unión o el after que se ejecuta después. 4. 5. Aspecto (aspect): es la combinación de advices y puntos de corte. Weaving (tejido): es el proceso de insertar aspectos en el código de la aplicación en el punto apropiado. Tejido Estático Vs. Tejido Dinámico El tejido estático consiste en la modificación en tiempo de compilación del código fuente, insertando llamadas a las rutinas específicas de los aspectos. Tejido Estático Vs. Tejido Dinámico El tejido dinámico requiere que los aspectos existan y estén presentes de forma explícita tanto en tiempo de compilación como en tiempo de ejecución. Tejido Estático Vs. Tejido Dinámico Tejido Estático Tejido Dinámico Mayor eficiencia (menor sobrecarga en ejecución). Decrementa la eficiencia de la aplicación. Menor flexibilidad. Mayor flexibilidad y libertad al programador. Mayor seguridad obtenida efectuando controles en compilación. Pone en riesgo la seguridad de la aplicación. Más fáciles de implementar. Implementación más compleja. Lenguajes Orientados a Aspectos Hasta ahora se han distinguido dos enfoques diferentes en el diseño de los lenguajes de aspectos: los lenguajes de aspectos de dominio específico y los lenguajes de aspectos de propósito general. Lenguajes Orientados a Aspectos Lenguajes de aspectos de dominio específico: Son capaces de manejar uno o más aspectos, pero no pueden manejar otros aspectos más allá para los cuales fueron diseñados. Tienen un nivel de abstracción mayor que el lenguaje base. Expresan los conceptos de dominio específico en un nivel de representación más alto. Lenguajes Orientados a Aspectos Algunos ejemplos de LOA de dominio específico son: COOL (COOrdination Language), de Xerox, un lenguaje para sincronización de hilos concurrentes. RIDL (Remote Interaction and Data transfers Language), para el aspecto de distribución: invocación remota y transferencia de datos. Lenguajes Orientados a Aspectos Lenguajes de aspectos de propósito general : Son diseñados para describir cualquier clase de aspecto, no solo específicos, por lo que no pueden imponer restricciones al lenguaje base. El nivel de abstracción del lenguaje base y del lenguaje de aspectos de propósito general es el mismo. Lenguajes Orientados a Aspectos Un ejemplo de LOA de propósito general es AspectJ, donde Java es el lenguaje base, y las instrucciones de los aspectos también se escriben en Java. La principal desventaja de este tipo de lenguaje es que no garantizan la separación de conceptos. Comparación entre POA y POO La mayor fortaleza de la POO se demuestra cuando hay que modelar conceptos comunes. Sin embargo, falla al modelar los conceptos que se entrecruzan. POA logra este objetivo al tratar los conceptos entrecruzados como elementos de primera clase. Tanto la POA como la POO crean implementaciones modularizadas y con mínimo acoplamiento. Comparación entre POA y POO Ventajas POA Ayuda a superar los problemas causados por el Código Mezclado y Código Diseminado. Implementación modularizada. Mayor escalabilidad, permite agregar nuevos aspectos, modificar y / o remover aspectos existentes fácilmente. Mayor reusabilidad. Desventajas POA El diseño de los puntos de enlace entre los aspectos es más complejo. Posibles choques entre el código funcional y el código de aspectos. Posibles choques entre los aspectos. Pueden existir problemas de herencia de un aspecto a otro. Ejemplo 2: Biblioteca Class Biblioteca { private libro [] libros ; private socio [] socios; public Biblioteca() { … public void prestamo( socio S, libro L) { if controlDeAccesoValido() then{ // código del método } else{ generarExcepcion(); } } public void ingresarSocio(socio S){ if controlDeAccesoValido() then{ // código del método } else{ generarExcepcion(); } } // demás métodos… } Control de acceso Funcionalidad básica Definición de un aspecto Aspecto Control { Punto de enlace operacionesSeguras = llamadas a Biblioteca.prestamo & llamadas a Biblioteca.ingresarSocio& ... antes de operacionesSeguras: { if !=(controlDeAccesoValido()) then{ generarExcepcion(); } } } Modelo de Orientación a Aspectos ¿Preguntas? Ing. Sahyra Yépez Referencias PROGRAMACIÓN ORIENTADA A ASPECTOS: Análisis del paradigma. http://www.lafhis.dc.uba.ar/~ferto/docs/tesis.pdf Visión General de la Programación Orientada a Aspectos. http://www.willydev.net/descargas/abcpoa.pdf El Desarrollo de Software Orientado a Aspectos. http://pisis.unalmed.edu.co/avances/archivos/ediciones/Edi cion%20Avances%202008%202/08.pdf