Programación Orientada a Aspectos

Slides:



Advertisements
Presentaciones similares
2. Manejo de memoria Manejo de memoria estática
Advertisements

Introducción a C#.
Curso de java básico (scjp)
Definición de Clases y Variables de referencia.
EXCEPCIONES UNIDAD 5.
Fundamentos de la programación orientada a objetos
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Arquitectura CLARO-TECNOTREE
El proceso de desarrollo de software
Lección 1 Introducción a la POO
Introducción a la programación orientada a aspectos.
Capitulo 4 Excepciones.
Siguiente Excepciones Introducción. AnteriorSiguiente Definición Una excepción es un evento que ocurre durante la ejecución de un programa que desestabiliza.
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Tratamiento de listas en Java
UNIVERSIDAD LATINA (UNILA)
UNIVERSIDAD LATINA (UNILA)
Aplicación del paradigma orientado a objetos
Encapsulamiento y Abstracción
Programación Orientada a Objetos en Java
PROGRAMACIÓN EN JAVA Curso-taller inicial de programación en JAVA Facultad de Estadística e Informática TEMA II.
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Enterprise Java Beans Rubén Trujillo Sept-Dic 2008.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Modificadores.
Programación Orientada a Aspectos (AOP)
TALLER DE PROGRAMACIÓN III
PROGRAMACIÓN ORIENTADA A OBJETOS
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
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.
Tema 6: Clases Antonio J. Sierra.
Unidad I Java y C++ : Similitudes y diferencias
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.
Clase Teórica No. 4 Programación IV
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
El lenguaje de programación Java
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Programación Orientada a Aspectos (POA)
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
ESTRUCTURA DE DATOS EN JAVA
Tema 11: Excepciones Antonio J. Sierra.
Patrones Creacionales
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Un programa no es nada mas que una serie de instrucciones dadas al ordenador en un lenguaje entendido por el, para decirle exactamente lo que queremos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Unidad VI Documentación
Herramientas de polimorfismo y herencia en C++
Control de errores visual basic
Unidad III Manejo de Excepciones en Java y C++
Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,
Programación Orientada a Aspectos
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.
Capítulo 2 “Subprogramas/Funciones - Arreglos”
Universidad Tecnológica de Izúcar de Matamoros Programa Educativo: Tecnologías de la Información Asignatura: Base de datos para aplicaciones Tema: Base.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
Abstracción El concepto de abstracción es esencial en ciencias de la computación. Un programa es en sí mismo una abstracción, un modelo de la resolución.
Acceso a Datos Erick López Ovando Licenciado en Informática.
Programación Orientada a Objetos: CLASES Y OBJETOS
Encapsulamiento Miguel Ángel Rojas Aguilar Esthela Carmina Carranza Cabrera.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
LICETH CAJAS 3RO ASI 26/10/2010. Es un lenguaje de programación diseñado para crear una amplia gama de aplicaciones que se ejecutan en.NET Framework,
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Cómo empezar Java. ¡Cómo se divide la plataforma de desarrollo de Java?  Edición estándar (JSE)  Edición empresarial (JEE)  Edición de dispositivos.
Programación I Clases. Paradigma POO La programación Orientada a objetos (POO) es una forma programar, más cercana a como expresaríamos las cosas en la.
ALUMNO ALUMNO: DIEGO URES LEGAJO LEGAJO: La prueba unitaria es la herramienta para la Calidad Presentación Trabajo Final de Grado.
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
PROGRAMACION ORIENTADA A OBJETOS
Introducción a la Programación Orientada a Objetos (POO) Conceptos de clase, objeto e interfaz. Atributos y métodos Fundamentos de Programación Departamento.
Transcripción de la presentación:

Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas

Construcción del SW Tipos, bloques, procedimientos. Tipos de datos abstractos… Objetos: datos + comportamiento. Antes, el programador => un ermitaño, programaba en el sótano.

Evolución del SW

Evolución del SW

Problemática Actual Un sistema complejo puede verse como una implementación combinada de múltiples áreas de interés (concerns)

Problemática Actual Clase Libro { ….. <todas las cosas de libro> <manejo de errores> … } Clase Socio { ….. <todas las cosas de socio> <manejo de errores> <controles de acceso> } Clase Alquiler {….. <todas las cosas de alquiler> <manejo de errores> <controles de acceso> }

Biblioteca Control de acceso Funcionalidad básica 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(); Funcionalidad básica public void ingresarSocio(socio S){ if controlDeAccesoValido() then{ // código del método } else{ generarExcepcion(); // demás métodos…

Tiranía de la descomposición dominante Descomponer por forma, por color, por tamaño. Nos vemos obligados a elegir un modelo como principal.

Distintos Modelos Ordenado por Forma Ordenado por Color

Jerarquía Color-Forma Nos vemos obligados a elegir un modelo como principal. En este caso: color, y luego forma

Definición de POA Fue presentada en público por Gregor Kickzales y su equipo de investigación de Palo Alto Research Center en 1996. “ 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…”

Definición de Aspecto Un aspecto de diseño es una unidad modular del diseño que se entremezcla en la estructura de otras partes del diseño. Un aspecto de programa o de código es una unidad modular del programa que aparece en otras unidades modulares del programa (G. Kiczales) ”

POA La POA promueve la separación de conceptos a través de mecanismos, que permiten abstraer y componer estos conceptos a lo largo del sistema. Un aspecto es un concepto que no es posible encapsularlo claramente, y que resulta diseminado por todo el código. Un aspecto será la unidad que encapsulará un concepto entrecruzado.

Estructura Tradicional

Estructura POA

Estructura POA Programa Modelo de objetos Aspecto de sincronización Aspecto de gestión de errores … Aspecto de distribución Aspecto de gestión de memoria Programa

Esquema POA

Conceptos Básicos de POA Punto de unión (Join Point) Una posición bien definida dentro del código orientado a objetos, por ejemplo, la declaración de un método. Punto de corte (Pointcut) Un conjunto de condiciones aplicadas a un punto de unión que, al cumplirse, activarán el punto de corte y se ejecutará el punto de ejecución asignado a dicho punto de corte. Punto de ejecución (Advice) Fragmento de código que se ejecuta cuando se activa un punto de corte. Aspecto (Aspect) La combinación de puntos de corte, puntos de unión y puntos de ejecución.

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(); } }

Relación POA y POO Clase A Clase A1 Attb1 Attb2 Método 1 Clase A2 POO: conceptos comunes Clase A Clase A1 Attb1 Attb2 Método 1 Clase A2 Attb 3 Método 2 POA: conceptos entrecruzados

Evolución de la POO en la POA

Ventajas de la POA Un código menos enmarañado, más natural y más reducido. Mayor facilidad para razonar sobre los conceptos, ya que están separados y las dependencias entre ellos son mínimas. Un código más fácil de depurar y más fácil de mantener.

Herramientas POA Lenguajes para programar Aspectos: AspectJ: Extensión a Java para aplicar aspectos. La más popular. AspectC++, AspectS, CAESAR. En .NET: Weave.NET, Source Weave. Si bien al principio todo era programar, los conceptos AOP se trasladaron a todo el proceso de Software. AORE: Aspect Oriented Requirement Engineering. AOD: Aspect Oriented Design. Extensiones a UML para soportar el manejo de aspectos en la etapa de diseño. Extensiones Generales y Específicas. Verificación, Formalización &Model Checking OA

Problemática Clase Banco public class Banco { // declaraciones varias public double ProcesarDebito(long cuentaId, double monto) { // apertura de demarcacion transaccional try { // recupero de la cuenta // validaciones de negocio // logica de negocio asociada al débito // persistencia del nuevo estado // traceo del movimiento para auditoria // cierre exitoso de la transacción (commit) return nuevo saldo cuenta; } catch (Excepcion e) { // traceo de la excepcion para auditoría // cierre anormal de la transacción (rollback) // relanzamiento de la excepcion para las capas superiores } // declaraciones de otros métodos de negocio Transaccionalidad Persistencia Trazabilidad

Descomposición aspectual Separación de intereses (separation of concerns) Busca aislar aquellos intereses transversales (cross cutting concerns) Cada uno de dichos intereses se implementará en una unidad separada

Recomposición Aspectual

? Versión AOP de Banco Transaccionalidad Persistencia Trazabilidad public class Banco { // declaraciones varias public double ProcesarDebito(long cuentaId, double monto) { // apertura de demarcacion transaccional try { // recupero de la cuenta // validaciones de negocio // logica de negocio asociada al débito // persistencia del nuevo estado // traceo del movimiento para auditoria // cierre exitoso de la transacción (commit) return nuevo saldo cuenta; } catch (Excepcion e) { // traceo de la excepcion para auditoría // cierre anormal de la transacción (rollback) // relanzamiento de la excepcion para las capas superiores } // declaraciones de otros métodos de negocio Transaccionalidad Persistencia Trazabilidad Persistencia Trazabilidad

Versión AOP de Banco public class Banco { // declaraciones varias Transaccionalidad public class Banco { // declaraciones varias public double ProcesarDebito(long cuentaId, double monto) { // validaciones de negocio // logica de negocio asociada al débito return nuevo saldo cuenta; } // declaraciones de otros métodos de negocio Persistencia Trazabilidad

Hola Mundo en Aspectos package ejemplo; public class HW { private String mensaje; public HW() { this.mensaje = “Hello World"; } public void setMensaje(String M){ this.mensaje = M; public String getMensaje(){ return this.mensaje; public void showMensaje(){ System.out.println(this.mensaje);

Hola Mundo en Aspectos package ejemplo; public class HelloWorld { public static void main(String[] args) { HW H; H= new HW(); H.showMensaje(); }

Hola Mundo en Aspectos package ejemplo; public aspect Aspecto { pointcut mensajesAImprimir() : call (void HW.showMensaje()); before(): mensajesAImprimir(){ System.out.println(“Hola a todos"); } after(): mensajesAImprimir(){ System.out.println(“Chao a todos");

Actividad Desarrollar un programa que utilice una estructura de datos Cola la cual tenga definida dos operaciones: insertar y eliminar. La implantación del comportamiento de validación de las operaciones de la cola se realizará a través de un aspecto. La cola se realizará a través de un arreglo estático que puede contener cualquier tipo de datos

Alternativas a los Aspectos Lenguajes (OO, Basados en Componentes) Diseño de patrones Reflexión

Puntos de Corte

Ejemplo de Designadores de Puntos de Corte Cuando un método particular se ejecuta: execution(void Point.setX(int)) Cundo un método es invocado: call(void Point.setX(int)) Cuando un manejador de excepciones se ejecuta: handler(ArrayOutOfBoundsException) Cuando el objeto está actualmente ejecutánode: this(SomeType)

Ejemplos de Designadores de Puntos de Cortes Cuando se ejecuta el método perteniciente a una clase within(MyClass) Cunado el punto de enlace está en el flujo de control de una llamada a un método main de prueba sin argumentos. El punto de corte target hace referencia a cualquier punto de enlace posible

Pointcut designator wildcards Es posible ejecutar comodines execution(* *(..)) call(* set(..)) execution(int *()) call(* setY(long)) call(* Point.setY(int)) call(*.new(int, int))

Puntos de Corte Tipos de Puntos de Enlace Métodos Constructores a Line call join points dispatch execution join points Tipos de Puntos de Enlace Métodos Constructores Get/Set Manejo de Excepciones

Ejemplos de Designadores de Puntos de Corte Se pueden aplicar las siguientes operaciones: or (“||”), and (“&&”) y not (“!”). Ejemplos: target(Point) && call(int *()) call(* *(..)) && (within(Line) || within(Point)) within(*) && execution(*.new(int)) !this(Point) && call(int *(..))

Tipos de Advice before advice after advice after returning after throwing after around advice

Advice con Parámetros Se puede acceder al contexto de un punto de enlace de la siguiente forma: pointcut setXY(FigureElement fe, int x, int y): call(void FigureElement.setXY(int, int)) && target(fe) && args(x, y); after(FigureElement fe, int x, int y) returning: setXY(fe, x, y) { System.out.println(fe + " moved to (" + x + ", " + y + ")."); }

Otro ejemplo * Display Figure makePoint(..) makeLine(..) FigureElement moveBy(int, int) Point getX() getY() setX(int) setY(int) moveBy(int, int) Line getP1() getP2() setP1(Point) setP2(Point) moveBy(int, int) 2 HistoryUpdating

Otro Ejemplo HTTPRequest SessionInterceptor getCookies() requestMap(request) beforeBody(req, resp) ... getCookies() getRequestURI()(doc) getSession() getRequestedSessionId() ... Session getAttribute(name) setAttribute(name, val) invalidate() ... HTTPResponse getRequest() setContentType(contentType) getOutptutStream() setSessionId(id) ... Servlet

Refactorización Consiste en modificar la estructura interna de un programa sin modificar su compartimiento externo. Es útil para mejor el mantenimiento de software. Refactorizar las aplicaciones de Triangulo (dos métodos para calcular el área) y las raíces de una ecuación cuadrática para que modelen los comportamientos de validación y manejo de errores en forma de aspectos.

Actividad Juntar esos dos modelos (Beans) en un solo programa con interfaz gráfica. Tratar de que los puntos de corte sean lo más genérico para que se puedan utilizar el mismo advice en los métodos de la clase

Bibliografìa Mejía, Pedro, Programación Orientada a Aspectos, CINVESTAV, México. Antonia Mª Reina Quintero (2000), Visión General de la Programación Orientada a Aspectos. Departamento de Lenguajes y Sistemas Informáticos. Facultad de Informática y Estadística Universidad de Sevilla. (2000).

Bibliografìa Mario Rodriguez, POA, Gerente Relaciones Académicas, Microsoft Cono Sur

¿Preguntas, dudas y comentarios?