Download Programación Orientada a Aspectos
Document related concepts
Transcript
PROGRAMACIÓN ORIENTADA A ASPECTOS HANS A. HERNANDEZ S. C.I. V-17.313.096 Programación Orientada a Aspectos ● Análisis evolutivo de la programación. ● POO. ¿Que le faltó? ¿como se puede mejorar? ● POA. ¿Que justifica su existencia? ¿Que es? Ventajas. ¿Qué se necesita par aplicarlo? ● POA. ¿Que conceptos maneja?. Con un ejemplo se entiende más rápido. Programación Orientada a Aspectos Al finalizar la exposición deberíamos saber: •¿Qué es POA y por qué surgió? •¿Qué lo diferencia de POO? •¿Que se necesita para desarrollarlo? •¿Cómo es un programa desarrollado con el paradigma de POA?. Programación Orientada a Aspectos Análisis evolutivo de la programación: •Programación imperativa: Etapa código espagueti. Datos y funcionalidades mezcladas, no había separación de conceptos. •Programación Funcional. División por funcionalidades, basado en las funciones aritméticas. Desventaja: datos compartidos y esparcidos por todo el código (scattering) •POO: datos + comportamiento, modularidad, Desventaja: funciones esparcidas por todo el código, a veces repetitivas. •POA:……. Programación Orientada a Aspectos Resolvamos problemas partiendo desde otro principio: Basado en los principios de Separación de incumbencias que establece que para resolver un problema hay que separarlo en diferentes temas o asuntos. Separando las incumbencias, se disminuye la complejidad a la hora de tratarlas y se puede cumplir con requerimientos relacionados con la calidad como adaptabilidad, mantenibilidad, extensibilidad y reusabilidad. Se generan incumbencias transversales, que cruzan diferentes partes del sistema. Lo que genera 2 problemas: •Código disperso: un mismo servicio invocado múltiples veces •Código enmarañado: una misma operación realiza otras funciones adicionales que no son su fundamento. Programación Orientada a Aspectos Programación Orientada a Aspectos (POA) es un paradigma cuya intención es permitir una adecuada modularización de las aplicaciones, posibilitando mejor separación de incumbencias. Separa componentes de aspectos creando un mecanismo para abstraerlos y componerlos para formar todo el sistema. Presentación Loggin Concurrencia ¿Aspecto? Es la unidad que encapsula uno o más conceptos transversales, y que con la programación orientada a objetos no es posible diferenciarlo de forma clara. POA permite tratar la funcionalidad pura por un lado, y los aspectos por otro, de forma separada. Luego ambos se combinan con un tipo de programa llamado 'Weaver') para dar por resultado el sistema final. Otros conceptos: Joint point (punto de enlace) es el punto de ejecución dentro del sistema donde un aspecto puede ser conectado. Puede ser una llamada a un método, el lanzamiento de una excepción o la modificación de un campo. Pointcut (punto de corte) define los Advice (consejos) que se aplicarán a cada punto de enlace. Advice (consejo) es la implementación del aspecto. Introducciones (introduction) permiten cambiar la estructura de clases de un programa agregando o extendiendo interfaces y clases con nuevos atributos, constructores o métodos. Programación Orientada a Aspectos Estructura Tradicional Estructura POA POO Comparación y •POO agrupa clases en función de conceptos comunes . •El sistema toma forma de un conjunto de objetos que colaboran entre sí. •Falla al modelar conceptos que se entrecruzan. •Crea implementaciones modularizadas enfocado en los conceptos comunes y los ubica en el árbol de herencia. POA •POA trata a los conceptos entrecruzados y los coloca como elementos de primera clase, extrañándolos horizontalmente de la estructura vertical del árbol de herencia. •Crea implementaciones modularizadas pero se enfoca en los conceptos que se entrecruzan. •POA puede utilizar como base cualquier paradigma de programación. POO y POA no son lo mismo, ni tampoco una deriva de la otra. Programación Orientada a Aspectos ¿Qué se necesita par aplicarlo? 1. Un lenguaje para definir la funcionalidad básica, conocido como lenguaje base. El mismo puede ser un lenguaje imperativo, o no. Por ejemplo C++, Java, PHP, Python, Perl, Etc. 2. • Uno o varios lenguajes de aspectos, para especificar el comportamiento de los distintos aspectos. Algunos ejemplos son: AspectJ, AspectC, phpAspect, Aspyct, Aspect, Cool, RIDL, etc. 3. • Un tejedor de aspectos, del inglés weaver, que se encarga de combinar los lenguajes (componentes y aspectos) en tiempo de ejecución o de compilación. Ventajas y Desventajas •Un código menos enmarañado, más natural y más reducido. •Una mayor facilidad para razonar sobre las materias, ya que están separadas y tienen una dependencia mínima. •Más facilidad para depurar y hacer modificaciones en el código. •Se consigue que un conjunto grande de modificaciones en la definición de una materia tenga un impacto mínimo en las otras. •Se tiene un código más reusable y que se puede acoplar y desacoplar cuando sea necesario. El diseño de los puntos de enlace entre los aspectos es más complejo. • Se debe tener en cuenta el análisis de nuevas características dentro del desarrollo de sistemas. • Surgen nuevos problemas de choque entre el lenguaje base y el lenguaje funcional. • Pueden existir problemas de herencia de un aspecto a otro. Con un ejemplo se entiende más fácilmente. Cuenta bancaria Aplicando primera solución Solución con Diseño POA. Gracias