aop - osum springperu(1era reunion)
DESCRIPTION
Presentación del tema Programación Orientada a Aspectos expuesto en la primera reunión de OSUM springperu el 10 de febrero de 2010TRANSCRIPT
AOP(Aspect Oriented Programming)
(Programación Orientada a Aspectos)
Mayer Horna García
08 de febrero de 2010
copyright © 2010
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
•Evolución del software
•¿Qué es AOP?
•Conceptos básicos de AOP
•Demos con AspectJ
•Demo con Spring Framework
Evolución del Software1° Generación:Código espaghetti
No existía un orden al programar. En conclusión: era difícil dar mantemiento al programa cuando este crecía.
ventas.cpp
Evolución del Software2° y 3° Generación:Descomposición funcional
Se modularizó agrupando funcionesSub grabarCliente( Codigo As String,
Apellido As String, Nombre As String, Calle As String,Ciudad As String,…)
'Codigo para grabar ClientesEnd Sub
¿Que ocurría 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 parámetros en la función grabarCliente y en cualquier otra función que grabe, consulte o edite un cliente.
Solución: Encapsular estas propiedades en una estructura llamada Cliente.¿¿¿Estaremos hablando de Clases y Objetos???
Evolución del Software4° Generación:Descomposición 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…
Evolución del Software¿5° Generación?:Descomposición de aspectos. ¿Una quinta generación?
Permite desacoplar funcionalidades del sistema, y trabajarlas de manera transversal. Como por ejemplo, la audtoría del sistema, la seguridad, la transaccioanlidad, etc.
Problema:
ClienteServiceImpl.java
Supongamos que el método grabarCliente debe tener las siguientes funcionalidades:1)Verifica si el usuario en sesión tiene o no permiso para grabar clientes. Si pasa la validación, entonces:2)Inicia la transacción 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 añadido a la tabla cliente, indicando cual es el usuario responsable de la operación.5)Hacer commit o rollback a la transacción, dependiendo de si fue exitosa o fallida la operación.
Partiendo de la premisa anteriorSi pensamos en separación de aspectos, llegamos a la conclusión de que:
Supongamos que el método grabarCliente debe tener las siguientes funcionalidades:1)Verifica si el usuario en sesión tiene o no permiso para generar clientes. Si pasa la validación, entonces:2)Inicia la transacción 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 añadido a la tabla cliente, indicando cual es el usuario responsable de la operación.5)Hacer commit o rollback a la transacción, dependiendo de si fue exitosa o fallida la operación.
1)Aspecto: Seguridad
Asp
ecto
: Tra
nsaccio
nalid
ad
2) y
5)
Asp
ecto
: A
ud
itori
a4)
Objetivo Principal
Partiendo de la premisa anterior(En el Código)Si pensamos en separación de aspectos, llegamos a la conclusión de que:
1)Aspecto: Seguridad
Asp
ecto
: Tra
nsaccio
nalid
ad
2) y
5)
Asp
ecto
: A
ud
itori
a4)
Objetivo Principal
Partiendo de la premisa anterior(En el Código)Así debería ser nuestro código, optimizado con AOP:
1)Aspecto: Seguridad
Asp
ecto
: Tra
nsaccio
nalid
ad
2) y
5)
Asp
ecto
: A
ud
itori
a4)
Solo debemos preocuparnos en el objetivo principal, que es grabar un registro de cliente.
Y lo demás separarlo como aspectos
¿Qué es AOP?• Paradigma de programación cuya intención es permitir
una adecuada modularización de las aplicaciones y posibilitar una mejor separación de componentes.
• Es un complemento para la programación orientada a objetos (OOP).
• Por medio de AOP podemos modificar dinámicamente un modelo estático a fin de incluir funcionalidades secundarias (transaccionalidad, seguridad, auditoria, etc).
El método saveCustomer(), realiza las siguientes funcionalidades:1) graba un registro en la tabla customer .2) graba constancia de registro en la tabla auditoria
Aplicación sin separación de aspectos:
Como observan este proceso 2), se repetiría para tantos métodos de grabado requieran que se registre auditoría.
El método saveCustomer(), realiza las siguientes funcionalidades:1) graba un registro en la tabla customer .
Aplicación con separación de aspectos:
Como observan el aspecto auditoría es separado y manejado de manera transversal.Beneficios:• Código mas limpio• La referencia al objeto AuditDAOImpl ya no aparece en CustomerServiceImpl.• Una mejor modularización.• 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 característica que vamos a separar (Por ejemplo: Auditoría).
• PointCut(Punto de Corte). Define donde se aplicará el aspecto. Se especifica
mediante Expresiones Regulares o mediante patrones de nombres (de clases, métodos 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 programación orientado por aspectos construido como una extensión del lenguaje Java creado en Xerox PARC. Los aspectos en si se escriben en Java extendido generándose un archivo java o compilado con código de máquina 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 técnica de Inversión de Control (IoC) y una implementación de desarrollo según el paradigma de Orientación a Aspectos(AOP).
▫ Spring AOP Es un módulo de Spring Framework que te permite hacer
programación 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 ejecución del cuerpo de un método
proyecto: demos_aop
Demo
demo02: Aspecto aplicado después del llamado de un método(Diferencias entre call y execution)
Ver los .class generados y comparar diferencias
proyecto: demos_aop
Demo
demo03: Aspecto aplicado antes y después de la ejecución del cuerpo
de un métodoVer los .class generados y observar el código
generado
proyecto: demos_aop
Demo
demo04: Aspecto aplicado de tipo around Uso de proceed() para ejecutar el cuerpo del método
Ver los .class generados y comparar diferencias
proyecto: demos_aop
Demo
demo05: Aspecto aplicado de tipo after solo si el método arroja una exepción ( 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 genérica a un conjunto de métodos
que cumplen un mismo patrón.Uso de expresiones de AspectJ en los pointcut
proyecto: demos_aop
Demo
demo07: Aspecto aplicado de forma genérica a un conjunto de métodos
que cumplen un mismo patrón y que dichos métodos tienen un parámetro en su declaración.
Uso de expresiones de AspectJ en los pointcut
proyecto: demos_aop
Demo
demo08: Aspecto aplicado de forma genérica a un conjunto de métodos
que cumplen un mismo patrón y que dichos métodos tienen mas de un parámetro en su declaración.
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 Solución: proyecto: demowebconaop_base
_solucion
proyecto: demowebconaop_base
¿Y que tiene que ver AOP con Spring?
• Spring es un framework contenedor liviano basado en la técnica de Inversión de Control (IoC) y una implementación de desarrollo según el paradigma de Orientación a Aspectos(AOP).
Spring AOP• Orientación a Aspectos(AOP): presenta una estructura
simplificada para el desarrollo y utilización de aspectos.
Demo
demowebconaop_spring_solucion: Proyecto web(Spring) con AOP
proyecto: demowebspringaop
Preguntas
Mayer Horna García
http://www.linkedin.com/in/mayerhorna
http://mayerhorna.blogspot.com
@mayerhorna
http://osum.sun.com/group/springperu
http://spring.pe
Gracias