aop - osum springperu(1era reunion)

Post on 01-Jun-2015

899 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

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

AOP(Aspect Oriented Programming)

(Programación Orientada a Aspectos)

Mayer Horna García

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

•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

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

Gracias

top related