Download Programación Orientada a los Aspectos
Document related concepts
Transcript
Introducción La aparición de la programación Orientada a Objetos (OO) tuvo un efecto dramático en el desarrollo de software. En la actualidad, los desarrolladores crean aplicaciones utilizando clases y objetos y la interacción entre los objetos. El problema con la programación OO es el manejo del código transversal , donde un cambio en los requerimientos puede tener un profundo impacto en el tiempo de desarrollo. Introducción El presente Webinar explicará acerca de la Programación Orientada a Aspectos (POA), como una mejora al problema del código transversal. Agenda • Programación Orientada a los Objetos • Caso práctico • Código Transverso • Programación orientado a los aspectos. Definición • Es un paradigma de programación cuyo fundamento es dividir el programa en pequeñas unidades lógicas de código, llamadas objetos. • Los objetos son unidades independientes que se comunican entre ellos mediante mensajes. Definición Una clase es una plantilla la cual se crean los objetos requeridos para la solución del problema. Un objeto es una instancia de una clase. Hace uso de los atributos y métodos de la clase Características Abstracción Polimorfismo Herencia Encapsulamiento Ventajas • Reutilización del código • Relaciona el sistema al mundo real • Facilita la creación de programas visuales. • Construcción de prototipos. • Agiliza el desarrollo de software. • Facilita el mantenimiento del software. Si es tan productivo la Programación OO, en que está fallando? Caso Práctico Tenemos un app de banca electrónica: los clientes consultan el estado de sus cuentas, realizan operaciones y actualizan sus datos personales Caso Práctico Tanto Cliente como CuentaBancaria, tienen el método IngresarCuenta(). Tal como está planteada esta solución, este métodos expresa la existencia de asunto transversal: autorización Caso Práctico Estos asuntos transversales no representan problema, pero si nos piden cambios en el proceso de IngresarCuenta() debido a que se requiere más detalle de información. Caso Práctico O si tenemos un nuevo tipo de cuenta bancaria llamada Cuenta PlazoFijo, con una política distinta de permisos en el proceso IngresarPlazoFijo(). Los sistemas se modelan como un conjunto de objetos que interactúan entre sí, y no es posible modularizar operaciones esparcidas en toda la aplicación. Este problema se le llama ASUNTOS TRANSVERSALES Definición Es aquel código que no puede encapsularse en una unidad funcional porque atraviesa en varias partes del sistema. Problemas Menor reuso del código Conceptos entrelazados Baja calidad del código Evolución más dificultosa Consecuencias de Asuntos Transversales • Código disperso: los métodos se encuentran esparcidos en varios módulos: cuando un servicio es ejecutado desde muchas partes del programa. • Código mezclado: en un mismo módulo puede convivir más de un requerimiento: acceso a varios servicios (logueo, autenticar, seguridad). En que casos se presenta este asunto? Loggin Seguridad Otros aspectos Sincronización Funcionalidad Gestión de Memoria Gestión de Errores Y cómo podemos resolver este tipo de código A través de la Programación Orientada a los Aspectos Definición • Es una metodología de programación que aspira a resolver el problema del código transversal. • Es soportado por los “lenguajes de aspectos” que proporcionan constructores para capturar los métodos dispersos por todo el sistema. Definición Objetivos Código mas natural y reducido Código reusable Facilidad para depurar Facilidad para razonar sobre los módulos Aspect (Aspecto) Es la funcionalidad que atraviesa a lo largo de la aplicación, que se va a implementar de forma modular y separada del resto del sistema. Ejemplo: logueo al sistema, afecta a todos los accesos al sistema por cuestión de seguridad. Anatomía de un Aspecto aspect MiCodigoDisperso{ //Attributes //Methods //Poincuts //Advices } Jointpoint (Punto de Cruce) Es un punto de ejecución dentro del sistema donde un aspecto puede ser conectado Ejemplo: llamada a un método, el manejo de una excepción o la asignación de un valor a una variable. Jointpoint : Sintaxis De construcción call (new (Clase (nro parámetros))) execution (new (Clase (nro parámetros))) De llamado execution (modificador(Clase.Metodo((nro parámetros)) Pointcut (Puntos de Corte) Conjunto definido joinpoints. Se especifica mediante Expresiones Regulares o mediante patrones de nombres (de clases, métodos o campos) Ejemplo: invocar a los metodos de una clase, manejo de excepciones de una clase. Pointcut: Sintaxis call(void Clase.metodoA(int)) call(void Clase.metodoA(int)) || call(void Clase.metodoB(int)) pointcut mipunto(): call(void Clase.metodoA(int)) || call(void Clase.metodoB(int)) Advice (Aviso) Implementa el comportamiento transversal, contiene el código que implementa la nueva funcionalidad. Se inserta en los Joinpoints Ejemplo: un advice de logueo, otro de transacciones, etc. Advice: Sintaxis Ejecuta antes de alcanzar punto de enlace before(): mi_pointcut() { // sentencias } En un punto de enlace particular se ejecuta después de que el programa proceda con ese punto de enlace. after(): mi_pointcut() { // sentencias } Introduction (Introducción) Permite añadir métodos o atributos a clases ya existentes. Ejemplo: agregar un atributo para auditoría que almacenar la fecha de la actualización de un objeto, Target(Destinatario) Es el objeto que contiene los pointcuts Ejemplo: el caso de ClientesDAO Weaver(Tejedor) Es el encargado de integrar el código base con los aspectos, estos son implementados en los lenguajes orientado aspectos Lenguaje Orientado a los Aspectos Lenguaje de Aspectos Lenguaje Base AspectJ Java Aspect Component AspectWerkz Java AspectC C AspectC++ C++ AspectR Ruby Pythius Python AspectS Apostle SmallTalk Ejemplo en POO Ejemplo en POA Conclusiones • La POA es una tecnología relativamente nueva. • Son de destacar AspectJ y AspectC++, lenguajes de OA en ser utilizados cada vez por más programadores. • AOP se extiende hacia todos las etapas del diseño de software, en especial hacia la etapa de análisis. • Los conceptos introducidos en POA están ingresando cada vez mas en los procesos de desarrollo de software.