Introducción a la programación orientada a aspectos
1.
2. ¿Qué es AOP?
Según Wikipedia:
Es un paradigma de programación
relativamente reciente cuya intención es
permitir una adecuada modularización de
las aplicaciones y posibilitar una mejor
separación de conceptos.
Según Gregor Kiczales:
Un mecanismo que permite la
implementación modular de asuntos
transversales (crosscutting concerns)
6. ¿Qué es AOP?
Otras soluciones
Plantillas código (code snippet)
Generador de código
Herencia (mal usada)
Buscar y reemplazar
Pero con RegEx (expresiones regulares) !!!
7. ¿Qué es AOP?
Y si encontrara la forma de escribir
solamente esto y que el código se
comporte de igual manera que lo
anterior?
9. Conceptos básicos de AOP
Al ingresar a
un método
Al salir de un
método
Al fallar un
método
Al leer un field
Al escribir un
field
10. Conceptos básicos de AOP
Consejo: código del aspecto a introducir.
Punto de corte: qué consejo se va a
aplicar a cada punto de cruce?
Introducción: modificar la interfaz de una
clase existente.
11. Conceptos básicos de AOP
Destinatario: la clase que va a ser
“aconsejada”. Nuestra clase.
Tejido (Weaving): es el proceso por el cual
se introducen los Aspectos a Destinatarios
para crear los Objetos Resultantes en los
determinados Puntos de Cruce.
Resultante: target + aspecto. Es el
resultado de tejer aspectos en el
destinatario.
12. Técnicas en .Net
Subclasing en tiempo de ejecución:
Castle Dynamic Proxy
Spring.AOP
Linfu.DynamicProxy
IL weaving
Al compilar:
○ PostSharp
Post compilación:
○ PostSharp
○ Linfu.AOP
○ Mono.Cecil ( ? )
Técnicas nativas del framework (cuasi-AOP)
Filters en Asp.Net MVC
Behaviors en WCF
13. Dynamic Proxy
Los frameworks de Dynamic Proxy
generan una clase (Destinatario)
dinámicamente que heredan o
implementan el Target, donde se inyectan
nuestros Aspectos.
Punto de corte: método virtual o método
implementación de interfaz.
A programar!
14. PostSharp
PostSharp es un framework de AOP. Es por esto que toda
su interface respeta la nomenclatura de AOP.
Modifica el código intermedio IL para introducir el
comportamiento (IL Weaving).
Dispone de una arquitectura muy rica para hacer
MultiCast. Esto nos permite propagar nuestros aspectos
desde interfaces o clases base.
Tiene muchos puntos de corte, se puede interceptar
métodos privados, públicos, fields, incluso clases sealed.
Existen muchos aspectos publicados como plugins.