aop - osum springperu(1era reunion)

31
AOP (Aspect Oriented Programming) (Programación Orientada a Aspectos) Mayer Horna García 08 de febrero de 2010 copyright © 2010 [email protected] [email protected] http://www.linkedin.com/in/mayerhorn a http://mayerhorna.blogspot.com @mayerhorna http://osum.sun.com/group/ springperu http://spring.pe

Upload: mayer-horna

Post on 01-Jun-2015

898 views

Category:

Technology


2 download

DESCRIPTION

Presentación del tema Programación Orientada a Aspectos expuesto en la primera reunión de OSUM springperu el 10 de febrero de 2010

TRANSCRIPT

Page 1: AOP - OSUM springperu(1era Reunion)

AOP(Aspect Oriented Programming)

(Programación Orientada a Aspectos)

Mayer Horna García

08 de febrero de 2010

copyright © 2010

[email protected]

[email protected]

http://www.linkedin.com/in/mayerhorna

http://mayerhorna.blogspot.com

@mayerhorna

http://osum.sun.com/group/springperu

http://spring.pe

Page 2: AOP - OSUM springperu(1era Reunion)

Objetivos

• Entender:

▫ Que es AOP

▫ En que nos ayuda AOP

▫ Como apoya AOP a la POO

▫ Como se integra con Spring Framework

Page 3: AOP - OSUM springperu(1era Reunion)

Agenda

•Evolución del software

•¿Qué es AOP?

•Conceptos básicos de AOP

•Demos con AspectJ

•Demo con Spring Framework

Page 4: AOP - OSUM springperu(1era Reunion)

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

Page 5: AOP - OSUM springperu(1era Reunion)

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???

Page 6: AOP - OSUM springperu(1era Reunion)

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…

Page 7: AOP - OSUM springperu(1era Reunion)

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.

Page 8: AOP - OSUM springperu(1era Reunion)

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.

Page 9: AOP - OSUM springperu(1era Reunion)

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

Page 10: AOP - OSUM springperu(1era Reunion)

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

Page 11: AOP - OSUM springperu(1era Reunion)

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

Page 12: AOP - OSUM springperu(1era Reunion)

¿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).

Page 13: AOP - OSUM springperu(1era Reunion)

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.

Page 14: AOP - OSUM springperu(1era Reunion)

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

Page 15: AOP - OSUM springperu(1era Reunion)

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

Page 16: AOP - OSUM springperu(1era Reunion)

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.

Page 17: AOP - OSUM springperu(1era Reunion)

Sintaxis AspectJ• pointcut

Page 18: AOP - OSUM springperu(1era Reunion)

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

Page 19: AOP - OSUM springperu(1era Reunion)

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

Page 20: AOP - OSUM springperu(1era Reunion)

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

Page 21: AOP - OSUM springperu(1era Reunion)

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

Page 22: AOP - OSUM springperu(1era Reunion)

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

Page 23: AOP - OSUM springperu(1era Reunion)

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

Page 24: AOP - OSUM springperu(1era Reunion)

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

Page 25: AOP - OSUM springperu(1era Reunion)

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

Page 26: AOP - OSUM springperu(1era Reunion)

Demo

demowebconaop_base: Proyecto web(Servlets y JSP) sin aspectos Tarea: Aplicar un aspecto Solución: proyecto: demowebconaop_base

_solucion

proyecto: demowebconaop_base

Page 27: AOP - OSUM springperu(1era Reunion)

¿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).

Page 28: AOP - OSUM springperu(1era Reunion)

Spring AOP• Orientación a Aspectos(AOP): presenta una estructura

simplificada para el desarrollo y utilización de aspectos.

Page 29: AOP - OSUM springperu(1era Reunion)

Demo

demowebconaop_spring_solucion: Proyecto web(Spring) con AOP

proyecto: demowebspringaop

Page 30: AOP - OSUM springperu(1era Reunion)

Preguntas

Page 31: AOP - OSUM springperu(1era Reunion)

Mayer Horna García

[email protected]

[email protected]

http://www.linkedin.com/in/mayerhorna

http://mayerhorna.blogspot.com

@mayerhorna

http://osum.sun.com/group/springperu

http://spring.pe

Gracias