![Page 1: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/1.jpg)
Programación Orientada a Aspectos
M.C. Juan Carlos Olivares Rojas
![Page 2: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/2.jpg)
Construcción del SW
![Page 3: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/3.jpg)
Evolución del SW
![Page 4: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/4.jpg)
Evolución del SW
![Page 5: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/5.jpg)
Problemática Actual
• Un sistema complejo puede verse como una implementación combinada de múltiples áreas de interés (concerns)
![Page 6: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/6.jpg)
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>
}
![Page 7: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/7.jpg)
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 accesoControl de acceso
Funcionalidad básicaFuncionalidad básica
![Page 8: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/8.jpg)
Tiranía de la descomposición dominante
• Descomponer por forma, por color, por tamaño.• Nos vemos obligados a elegir un modelo como principal.
![Page 9: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/9.jpg)
Distintos Modelos
• Ordenado por Forma
• Ordenado por Color
![Page 10: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/10.jpg)
Jerarquía Color-Forma• Nos vemos obligados a elegir un modelo como principal. En este caso: color, y luego forma
![Page 11: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/11.jpg)
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…”
![Page 12: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/12.jpg)
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) ”
![Page 13: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/13.jpg)
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.
![Page 14: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/14.jpg)
Estructura Tradicional
Lenguaje
Compilador o Intérprete
EJECUTABLE
PROGRAMA
![Page 15: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/15.jpg)
Estructura POA
... Lenguaje base
Lenguaje de aspectos 1
Lenguaje de aspectos N
... TEJEDOR (WEAVER)
EJECUTABLE
PROGRAMA DE ASPECTOS N
PROGRAMA DE ASPECTOS 1
PROGRAMA DE COMPONENTES
![Page 16: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/16.jpg)
ProgramaPrograma
Estructura POA
![Page 17: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/17.jpg)
Esquema POA
![Page 18: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/18.jpg)
Conceptos Básicos de POAPunto 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.
![Page 19: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/19.jpg)
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(); }
}
![Page 20: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/20.jpg)
Relación POA y POO
Clase A
Clase A1
Attb1
Attb2
Método 1
Clase A2
Attb 3
Método 1
Método 2
POO: conceptos comunes
POA: conceptos entrecruzados
![Page 21: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/21.jpg)
Evolución de la POO en la POA
Comportamientopropio
Comportamientopropio
Persistencia
Traza
……..
Comportamientopropio
Comportamientopropio
Persistencia Traza
Clase A Clase B
Clase A Clase B
Clases
Aspectos
![Page 22: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/22.jpg)
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.
![Page 23: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/23.jpg)
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.
![Page 24: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/24.jpg)
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
![Page 25: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/25.jpg)
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
![Page 26: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/26.jpg)
Recomposición Aspectual
![Page 27: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/27.jpg)
Versión AOP de 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
Tran
sacc
iona
lidad
Pers
iste
ncia
Traz
abilid
ad
??
![Page 28: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/28.jpg)
Versión AOP de Banco
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}
Pers
iste
ncia
Traz
abilid
ad
Tran
sacc
iona
lidad
![Page 29: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/29.jpg)
Hola Mundo en Aspectospackage 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);}
}
![Page 30: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/30.jpg)
package ejemplo;
public class HelloWorld {public static void main(String[]
args) {HW H; H= new HW();H.showMensaje();
}}
Hola Mundo en Aspectos
![Page 31: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/31.jpg)
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"); }
}
Hola Mundo en Aspectos
![Page 32: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/32.jpg)
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
![Page 33: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/33.jpg)
Alternativas a los Aspectos
• Lenguajes (OO, Basados en Componentes)
• Diseño de patrones
• Reflexión
![Page 34: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/34.jpg)
Puntos de Corte
![Page 35: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/35.jpg)
35
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)
![Page 36: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/36.jpg)
36
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
![Page 37: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/37.jpg)
37
Pointcut designator wildcards• Es posible ejecutar comodines
– execution(* *(..)) – call(* set(..)) – execution(int *()) – call(* setY(long)) – call(* Point.setY(int)) – call(*.new(int, int))
![Page 38: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/38.jpg)
Puntos de Corte
• Tipos de Puntos de Enlace– Métodos– Constructores– Get/Set– Manejo de Excepciones
a Line
dispatch
call join points
execution join points
![Page 39: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/39.jpg)
39
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 *(..))
![Page 40: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/40.jpg)
40
Tipos de Advice• before advice• after advice• after returning • after throwing• after• around advice
![Page 41: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/41.jpg)
41
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 + ").");}
![Page 42: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/42.jpg)
Otro ejemplo
HistoryUpdating
Display
*
2Point
getX()getY()setX(int)setY(int)moveBy(int, int)
Line
getP1()getP2()setP1(Point)setP2(Point)moveBy(int, int)
Figure
makePoint(..)makeLine(..)
FigureElement
moveBy(int, int)
![Page 43: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/43.jpg)
43
Otro Ejemplo
HTTPRequest
HTTPResponse
Servlet
getCookies()getRequestURI()(doc)getSession()getRequestedSessionId()...
getRequest()setContentType(contentType)getOutptutStream()setSessionId(id)...
SessionInterceptor
requestMap(request)beforeBody(req, resp)...
SessiongetAttribute(name)setAttribute(name, val)invalidate()...
![Page 44: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/44.jpg)
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.
![Page 45: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/45.jpg)
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
![Page 46: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/46.jpg)
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).
![Page 47: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/47.jpg)
Bibliografìa• Mario Rodriguez, POA, Gerente Relaciones
Académicas, Microsoft Cono Sur
![Page 48: Programación Orientada a Aspectos M.C. Juan Carlos Olivares Rojas](https://reader034.vdocuments.pub/reader034/viewer/2022051316/5665b4401a28abb57c90661b/html5/thumbnails/48.jpg)
¿Preguntas, dudas y comentarios?