Está en la página 1de 31

AOP

(Aspect Oriented Programming)


(Programacin Orientada a Aspectos)
Mayer Horna Garca
08 de febrero de 2010
copyright 2010
mayer@lima-ti.com
mayer.horna@gmail.com
http://www.linkedin.com/in/mayerhorna
http://mayerhorna.blogspot.com
@mayerhorna
http://osum.sun.com/group/springperu
http://spring.pe

Objetivos
Entender:
Que es AOP
En que nos ayuda AOP
Como apoya AOP a la POO
Como se integra con Spring Framework


Agenda
Evolucin del software
Qu es AOP?
Conceptos bsicos de AOP
Demos con AspectJ
Demo con Spring Framework



Evolucin del Software
1 Generacin:
Cdigo espaghetti
No exista un orden al programar. En conclusin: era difcil dar
mantemiento al programa cuando este creca.

ventas.cpp
Evolucin del Software
2 y 3 Generacin:
Descomposicin funcional
Se modulariz agrupando funciones

Sub grabarCliente( Codigo As String,
Apellido As String,
Nombre As String,
Calle As String,
Ciudad As String,

)
'Codigo para grabar Clientes
End Sub
Que ocurra si mas adelante, se decide que el
cliente no debe registrar Ciudad ni Pais, y S un
campo llamado Contacto?
Problema: Se hubiera tenido que modificar los
parmetros en la funcin grabarCliente y en
cualquier otra funcin que grabe, consulte o edite
un cliente.
Solucin: Encapsular estas propiedades en una
estructura llamada Cliente.
Estaremos hablando de Clases y Objetos???
Evolucin del Software
4 Generacin:
Descomposicin en objetos
Permiti encapsular funcionalidad en Clases

public void grabarCliente(Cliente objCliente){
//Codigo para grabar Clientes
}
ClienteServiceImpl.java
Cliente
-codigo:String
-apellido:String
-nombre:String

+getNombre():String

Evolucin del Software
5 Generacin?:
Descomposicin de aspectos. Una quinta generacin?
Permite desacoplar funcionalidades del sistema, y trabajarlas
de manera transversal. Como por ejemplo, la audtora del
sistema, la seguridad, la transaccioanlidad, etc.


Problema:
ClienteServiceImpl.java
Supongamos que el mtodo grabarCliente debe tener las siguientes funcionalidades:
1) Verifica si el usuario en sesin tiene o no permiso para grabar clientes. Si pasa la
validacin, entonces:
2) Inicia la transaccin con la base de datos.
3) Graba el nuevo cliente en tabla.
4) Graba en la tabla de auditoria que un nuevo registro ha sido aadido a la tabla
cliente, indicando cual es el usuario responsable de la operacin.
5) Hacer commit o rollback a la transaccin, dependiendo de si fue exitosa o fallida la
operacin.

Partiendo de la premisa anterior
Si pensamos en separacin de aspectos, llegamos a
la conclusin de que:


Supongamos que el mtodo grabarCliente debe tener las
siguientes funcionalidades:
1) Verifica si el usuario en sesin tiene o no permiso para
generar clientes. Si pasa la validacin, entonces:
2) Inicia la transaccin con la base de datos.
3) Graba el nuevo cliente en tabla.
4) Graba en la tabla de auditoria que un nuevo registro ha
sido aadido a la tabla cliente, indicando cual es el
usuario responsable de la operacin.
5) Hacer commit o rollback a la transaccin, dependiendo
de si fue exitosa o fallida la operacin.

1)Aspecto: Seguridad
A
s
p
e
c
t
o
:

T
r
a
n
s
a
c
c
i
o
n
a
l
i
d
a
d

2
)


y

5
)

A
s
p
e
c
t
o
:

A
u
d
i
t
o
r
i
a

4
)

Objetivo Principal
Partiendo de la premisa anterior(En el Cdigo)
Si pensamos en separacin de aspectos, llegamos a
la conclusin de que:


1)Aspecto: Seguridad
A
s
p
e
c
t
o
:

T
r
a
n
s
a
c
c
i
o
n
a
l
i
d
a
d

2
)


y

5
)

A
s
p
e
c
t
o
:

A
u
d
i
t
o
r
i
a

4
)

Objetivo Principal
Partiendo de la premisa anterior(En el Cdigo)
As debera ser nuestro cdigo, optimizado con AOP:


1)Aspecto: Seguridad
A
s
p
e
c
t
o
:

T
r
a
n
s
a
c
c
i
o
n
a
l
i
d
a
d

2
)


y

5
)

A
s
p
e
c
t
o
:

A
u
d
i
t
o
r
i
a

4
)

Solo debemos preocuparnos en el objetivo
principal, que es grabar un registro de cliente.
Y lo dems separarlo como aspectos
Qu es AOP?
Paradigma de programacin cuya intencin es permitir
una adecuada modularizacin de las aplicaciones y
posibilitar una mejor separacin de componentes.

Es un complemento para la programacin orientada a
objetos (OOP).

Por medio de AOP podemos modificar dinmicamente
un modelo esttico a fin de incluir funcionalidades
secundarias (transaccionalidad, seguridad, auditoria,
etc).

El mtodo saveCustomer(), realiza las siguientes funcionalidades:
1) graba un registro en la tabla customer .
2) graba constancia de registro en la tabla auditoria
Aplicacin sin separacin de aspectos:
Como observan este proceso 2), se repetira para tantos mtodos
de grabado requieran que se registre auditora.
El mtodo saveCustomer(), realiza las siguientes funcionalidades:
1) graba un registro en la tabla customer .
Aplicacin con separacin de aspectos:
Como observan el aspecto auditora es separado y manejado de manera
transversal.
Beneficios:
Cdigo mas limpio
La referencia al objeto AuditDAOImpl ya no aparece en CustomerServiceImpl.
Una mejor modularizacin.
El metodo saveCustomer solo se enfoca en su objetivo principal que es grabar
un registro en la tabla customer
Antes de empezar, entendamos
algunos conceptos AOP
Aspect(Aspecto).
Es la funcionalidad o caracterstica que vamos a separar (Por
ejemplo: Auditora).
PointCut(Punto de Corte).
Define donde se aplicar el aspecto. Se especifica mediante
Expresiones Regulares o mediante patrones de nombres (de
clases, mtodos o campos). Ejemplo:

Advice. Indica que se va hacer en el momento (before, after,etc) que
se aplique el aspecto.
Before
After returning
After throwing
After
Around


Antes de empezar, entendamos
algunos conceptos AOP
AspectJ
AspectJ es un lenguaje de programacin orientado por aspectos
construido como una extensin del lenguaje Java creado en Xerox
PARC. Los aspectos en si se escriben en Java extendido generndose un
archivo java o compilado con cdigo de mquina compatible con el
generado por los compiladores de Java.
Existen otros lenguajes de AOP, como: COOL, Aspect, Aspyct

Spring Framework
Es un framework para el desarrollo de aplicaciones java basado en la
tcnica de Inversin de Control (IoC) y una implementacin de
desarrollo segn el paradigma de Orientacin a Aspectos(AOP).
Spring AOP
Es un mdulo de Spring Framework que te permite hacer
programacin orientada a aspectos.
Integra a AspectJ, y puedes utilizarlo de manera mas sencilla.






Sintaxis AspectJ
pointcut




Demo
demo01: Creando un proyecto AspectJ
uso de pointcut y advice
aspecto aplicado antes de la ejecucin del cuerpo de un
mtodo
proyecto: demos_aop
Demo
demo02: Aspecto aplicado despus del llamado de un mtodo
(Diferencias entre call y execution)
Ver los .class generados y comparar diferencias
proyecto: demos_aop
Demo
demo03: Aspecto aplicado antes y despus de la ejecucin del cuerpo
de un mtodo
Ver los .class generados y observar el cdigo generado
proyecto: demos_aop
Demo
demo04: Aspecto aplicado de tipo around
Uso de proceed() para ejecutar el cuerpo del mtodo
Ver los .class generados y comparar diferencias
proyecto: demos_aop
Demo
demo05: Aspecto aplicado de tipo after solo si el mtodo arroja
una exepcin ( after() throwing () )
probar throwing(ArithmeticException ex) u otras excep.
Ver los .class generados y comparar diferencias
proyecto: demos_aop
Demo
demo06: Aspecto aplicado de forma genrica a un conjunto de mtodos
que cumplen un mismo patrn.
Uso de expresiones de AspectJ en los pointcut
proyecto: demos_aop
Demo
demo07: Aspecto aplicado de forma genrica a un conjunto de mtodos
que cumplen un mismo patrn y que dichos mtodos tienen
un parmetro en su declaracin.
Uso de expresiones de AspectJ en los pointcut
proyecto: demos_aop
Demo
demo08: Aspecto aplicado de forma genrica a un conjunto de mtodos
que cumplen un mismo patrn y que dichos mtodos tienen
mas de un parmetro en su declaracin.
Uso de expresiones de AspectJ en los pointcut
proyecto: demos_aop
Demo
demowebconaop_base: Proyecto web(Servlets y JSP) sin aspectos
Tarea: Aplicar un aspecto
Solucin: proyecto: demowebconaop_base _solucion

proyecto: demowebconaop_base
Y que tiene que ver AOP con Spring?
Spring es un framework contenedor liviano basado
en la tcnica de Inversin de Control (IoC) y una
implementacin de desarrollo segn el paradigma de
Orientacin a Aspectos(AOP).
Spring AOP
Orientacin a Aspectos(AOP): presenta una estructura
simplificada para el desarrollo y utilizacin de aspectos.

Demo
demowebconaop_spring_solucion: Proyecto web(Spring) con AOP
proyecto: demowebspringaop
Preguntas
Mayer Horna Garca
mayer@lima-ti.com
mayer.horna@gmail.com
http://www.linkedin.com/in/mayerhorna
http://mayerhorna.blogspot.com
@mayerhorna
http://osum.sun.com/group/springperu
http://spring.pe

También podría gustarte