Programación Orientada a Aspectos (AOP)

35
Programación Programación Orientada a Orientada a Aspectos (AOP) Aspectos (AOP) Mario Rodriguez Gerente Relaciones Académicas Microsoft Cono Sur ([email protected])

description

Programación Orientada a Aspectos (AOP). Mario Rodriguez Gerente Relaciones Académicas Microsoft Cono Sur ( [email protected] ). Metas de esta presentación. Transmitir los conceptos fundamentales de la Programación Orientada a Aspectos - PowerPoint PPT Presentation

Transcript of Programación Orientada a Aspectos (AOP)

Page 1: Programación Orientada a Aspectos (AOP)

Programación Programación Orientada a Orientada a

Aspectos (AOP)Aspectos (AOP)

Mario Rodriguez Gerente Relaciones AcadémicasMicrosoft Cono Sur([email protected])

Page 2: Programación Orientada a Aspectos (AOP)

Metas de esta Metas de esta presentaciónpresentación

Transmitir los conceptos Transmitir los conceptos fundamentales de la Programación fundamentales de la Programación Orientada a AspectosOrientada a Aspectos

Mostrar las bondades de utilizar esta Mostrar las bondades de utilizar esta forma de desarrollar aplicaciones.forma de desarrollar aplicaciones.

Mostrar Diferentes tipos de Mostrar Diferentes tipos de enfoques para el entretejido.enfoques para el entretejido.

Page 3: Programación Orientada a Aspectos (AOP)

AsumimosAsumimos

Conocimientos de Programación Conocimientos de Programación Orientada a ObjetosOrientada a Objetos

Conceptos básicos temas como Conceptos básicos temas como Seguridad de Aplicaciones, Seguridad de Aplicaciones, Trasabilidad, Cache, Persistencia, Trasabilidad, Cache, Persistencia, Transaccionalidad.Transaccionalidad.

Reflexion, .NET Remoting, Proxies Reflexion, .NET Remoting, Proxies Dinámicos.Dinámicos.

Emisión de Código usando CodeEmitEmisión de Código usando CodeEmit

Page 4: Programación Orientada a Aspectos (AOP)

AgendaAgenda

Límites de OOPLímites de OOP AOP al rescateAOP al rescate BeneficiosBeneficios Estado del arteEstado del arte

Page 5: Programación Orientada a Aspectos (AOP)

Ingeniería de Sistemas Ingeniería de Sistemas (revisitada)(revisitada) Un sistema complejo Un sistema complejo

puede verse como una puede verse como una implementación implementación combinada de múltiples combinada de múltiples áreas de interés áreas de interés ((concernsconcerns))

Lógica de negocio, performance, persistencia, trazabilidad, debugging, autenticación, seguridad de hilos, chequeo de errores, etcComprensibilidad, mantenibilidad, facilidad de evolución, etc

Page 6: Programación Orientada a Aspectos (AOP)

Límites de OOPLímites de OOP

public class Banco { // declaraciones varias

public double ProcesarDebito(long cuentaId, double monto) { // apertura de demarcacion transaccional

try { // recupero de la cuenta // validaciones de negocio // logica de negocio asociada al débito // persistencia del nuevo estado // traceo del movimiento para auditoria // cierre exitoso de la transacción (commit) return nuevo saldo cuenta; } catch (Excepcion e) { // traceo de la excepcion para auditoría // cierre anormal de la transacción (rollback) // relanzamiento de la excepcion para las capas superiores } }

// declaraciones de otros métodos de negocio}

Transaccionalidad

Persistencia

Trazabilidad

Page 7: Programación Orientada a Aspectos (AOP)

Límites de OOP (cont.)Límites de OOP (cont.)

OOP cumplió todas las promesas por las que OOP cumplió todas las promesas por las que fue concebidofue concebido Modelar la aplicación dentro del esquema de Modelar la aplicación dentro del esquema de

objetos que colaboran entre síobjetos que colaboran entre sí Encapsular detalles de implementación detrás de Encapsular detalles de implementación detrás de

interfacesinterfaces El Polimorfismo proveyó una interfaz y una El Polimorfismo proveyó una interfaz y una

conducta común a conceptos relacionadosconducta común a conceptos relacionados La Herencia permitió que componentes más La Herencia permitió que componentes más

específicos cambien conductas particulares sin específicos cambien conductas particulares sin necesidad de acceder a la implementación de los necesidad de acceder a la implementación de los conceptos de baseconceptos de base

Page 8: Programación Orientada a Aspectos (AOP)

Límites de OOP (cont.)Límites de OOP (cont.)

No obstante, OOP no se adecua lo No obstante, OOP no se adecua lo suficiente para conducir un suficiente para conducir un comportamiento repartido entre varios comportamiento repartido entre varios módulos –a menudo no relacionados entre módulos –a menudo no relacionados entre sí-sí-

Page 9: Programación Orientada a Aspectos (AOP)

Síntomas del agotamiento Síntomas del agotamiento de OOPde OOP Código enredadoCódigo enredado

El desarrollador debe pensar en todos los El desarrollador debe pensar en todos los intereses a la vezintereses a la vez

Código desperdigadoCódigo desperdigado

Page 10: Programación Orientada a Aspectos (AOP)

Implicancias del Implicancias del agotamiento de OOPagotamiento de OOP Implementación pobre de interesesImplementación pobre de intereses Productividad bajaProductividad baja Reusabilidad disminuidaReusabilidad disminuida Código de calidad empobrecidaCódigo de calidad empobrecida Evolución difícilEvolución difícil

Page 11: Programación Orientada a Aspectos (AOP)

AgendaAgenda

Límites de OOPLímites de OOP AOP al rescateAOP al rescate BeneficiosBeneficios Estado del arteEstado del arte

Page 12: Programación Orientada a Aspectos (AOP)

AOP al rescateAOP al rescate

En 1997, Gregor Kiczales junto a otros En 1997, Gregor Kiczales junto a otros científicos del laboratorio de investigación de científicos del laboratorio de investigación de Xerox (Palo Alto) elaboraron el documento Xerox (Palo Alto) elaboraron el documento Aspect-Oriented ProgrammingAspect-Oriented Programming

En el mismo analizaban el límite de OOP, En el mismo analizaban el límite de OOP, ofreciendo AOP como un nuevo paradigma de ofreciendo AOP como un nuevo paradigma de programaciónprogramación

También, iniciaron el proyecto AspectJ: una También, iniciaron el proyecto AspectJ: una implementación de AOP basada en Java y implementación de AOP basada en Java y extensiones que completaban el nuevo extensiones que completaban el nuevo paradigmaparadigma

Page 13: Programación Orientada a Aspectos (AOP)

Descomposición Descomposición aspectualaspectual Separación de intereses (Separación de intereses (separation of separation of

concernsconcerns)) Busca aislar aquellos intereses Busca aislar aquellos intereses

transversales (transversales (cross cutting concernscross cutting concerns)) Cada uno de dichos intereses se Cada uno de dichos intereses se

implementará en una unidad separadaimplementará en una unidad separada

Page 14: Programación Orientada a Aspectos (AOP)

Recomposición aspectualRecomposición aspectual

Posterior a la implementación, un Posterior a la implementación, un componente creará unidades modulares componente creará unidades modulares con cada aspecto y las entrelazarácon cada aspecto y las entrelazará

El producto final es similar al de OOPEl producto final es similar al de OOP La diferencia en AOP es que la La diferencia en AOP es que la

implementación de cada aspecto no es implementación de cada aspecto no es consciente de las restantesconsciente de las restantes

Page 15: Programación Orientada a Aspectos (AOP)

Versión AOP de BancoVersión AOP de Banco

public class Banco { // declaraciones varias

public double ProcesarDebito(long cuentaId, double monto) { // apertura de demarcacion transaccional

try { // recupero de la cuenta // validaciones de negocio // logica de negocio asociada al débito // persistencia del nuevo estado // traceo del movimiento para auditoria // cierre exitoso de la transacción (commit) return nuevo saldo cuenta; } catch (Excepcion e) { // traceo de la excepcion para auditoría // cierre anormal de la transacción (rollback) // relanzamiento de la excepcion para las capas superiores } }

// declaraciones de otros métodos de negocio}

Transaccionalidad

Persistencia

Trazabilidad

Transaccionalidad

Persistencia

Trazabilidad

??

Page 16: Programación Orientada a Aspectos (AOP)

Lenguajes AOLenguajes AO

Los lenguajes OO surgieron como Los lenguajes OO surgieron como extensiones a los lenguajes extensiones a los lenguajes estructuradosestructurados C++ amplió la gramática del Lenguaje CC++ amplió la gramática del Lenguaje C Visual Basic añadió objetos a BASICVisual Basic añadió objetos a BASIC Delphi a PascalDelphi a Pascal

Los lenguajes AO hacen lo propio con Los lenguajes AO hacen lo propio con los lenguajes OOlos lenguajes OO Por ende, OO no muere: evolucionaPor ende, OO no muere: evoluciona

Page 17: Programación Orientada a Aspectos (AOP)

Anatomía de un lenguaje Anatomía de un lenguaje AOAO Implementación de interesesImplementación de intereses

Para esto sirve cualquier lenguaje OOPara esto sirve cualquier lenguaje OO Especificación de aspectos (Especificación de aspectos (aspectsaspects) )

y reglas de “tejido” (y reglas de “tejido” (weaving rulesweaving rules)) Punto de unión (Punto de unión (join pointjoin point, , pointcutpointcut)) Notificación (Notificación (adviceadvice)) Interceptor (Interceptor (interceptorinterceptor))

Page 18: Programación Orientada a Aspectos (AOP)

Anatomía (cont.)Anatomía (cont.)

public class Banco { // declaraciones varias

public double ProcesarDebito(long cuentaId, double monto) { // validaciones de negocio // logica de negocio asociada al débito return nuevo saldo cuenta; }

// declaraciones de otros métodos de negocio}

Persistencia

Trazabilidad

Transaccionalidad

Page 19: Programación Orientada a Aspectos (AOP)

AgendaAgenda

Límites de OOPLímites de OOP AOP al rescateAOP al rescate BeneficiosBeneficios Estado del arteEstado del arte

Page 20: Programación Orientada a Aspectos (AOP)

BeneficiosBeneficios

Aspectos reunen el código Aspectos reunen el código desperdigadodesperdigado

Separación de intereses reduce el Separación de intereses reduce el acoplamientoacoplamiento

Mayor reusabilidadMayor reusabilidad Sistemas más simples de evolucionarSistemas más simples de evolucionar AOP permite postergar decisiones de AOP permite postergar decisiones de

diseñodiseño

Page 21: Programación Orientada a Aspectos (AOP)

DemosDemos

Versión OOP de BancoVersión OOP de Banco Versión AOP usando ProxysVersión AOP usando Proxys Versión AOP usando Weaving Versión AOP usando Weaving

EstáticoEstático

Page 22: Programación Orientada a Aspectos (AOP)

AgendaAgenda

Límites de OOPLímites de OOP AOP al rescateAOP al rescate BeneficiosBeneficios Estado del arteEstado del arte

Page 23: Programación Orientada a Aspectos (AOP)

AOP.NET (NAop)AOP.NET (NAop)

Declara aspectos, Declara aspectos, puntos de unión, puntos de unión, etc en XMLetc en XML

Realiza Realiza weavingweaving en en forma dinámica forma dinámica (resuelve los (resuelve los aspectos en tiempo aspectos en tiempo de ejecución)de ejecución)

Page 24: Programación Orientada a Aspectos (AOP)

Proyecto CAMEOProyecto CAMEO

Es una extensión Es una extensión del compilador del compilador C#C#

Realiza Realiza weavingweaving en forma estática en forma estática (resuelve los (resuelve los aspectos en aspectos en tiempo de tiempo de compilación)compilación)

Page 25: Programación Orientada a Aspectos (AOP)

EosEos

Es una extensión Es una extensión del compilador del compilador C#C#

Realiza Realiza weavingweaving en forma en forma estáticaestática

Page 26: Programación Orientada a Aspectos (AOP)

AspectDNGAspectDNG

Post procesa Post procesa assemblies assemblies introduciendo introduciendo notificaciones notificaciones ((advicesadvices))

Realiza Realiza weavingweaving en en forma estáticaforma estática

Opera sobre Opera sobre cualquier cualquier lenguaje .NETlenguaje .NET

Page 27: Programación Orientada a Aspectos (AOP)

LOOM.NETLOOM.NET

Declara puntos de Declara puntos de unión y unión y notificaciones notificaciones mediante atributos mediante atributos en la clase que en la clase que modela el aspectomodela el aspecto

Provée Provée weavingweaving estático y estático y dinámicodinámico

Page 28: Programación Orientada a Aspectos (AOP)

Aspect#Aspect#

Posée un lenguaje Posée un lenguaje para definir para definir aspectos basado aspectos basado en AOP Allianceen AOP Alliance

Provée Provée weavingweaving dinámico dinámico proxeando la proxeando la clase interceptadaclase interceptada

Page 29: Programación Orientada a Aspectos (AOP)

Weave.NETWeave.NET

Apunta a cualquier Apunta a cualquier lenguaje .NETlenguaje .NET

Provée Provée weavingweaving dinámico al dinámico al momento de carga momento de carga de la clase de la clase interceptadainterceptada

Aspectos se Aspectos se declaran en XML declaran en XML

Page 30: Programación Orientada a Aspectos (AOP)

AspectJAspectJ

Dirigido por Dirigido por Kiczales, es el Kiczales, es el proyecto más proyecto más antiguo y más antiguo y más evolucionado de evolucionado de AOPAOP

Extiende la Extiende la sintaxis de Javasintaxis de Java

WeavingWeaving estático estático

Page 31: Programación Orientada a Aspectos (AOP)

Spring Framework y Spring Framework y Spring.NETSpring.NET Incluye Incluye

características AOP características AOP mediante mediante Dynamic Dynamic ProxiesProxies

Las reglas de tejido Las reglas de tejido se especifican en se especifican en XML (XML (weavingweaving dinámico)dinámico)

Desarrollado para Desarrollado para J2EE, aunque se J2EE, aunque se está portando está portando a .NETa .NET

Page 32: Programación Orientada a Aspectos (AOP)

ConclusionesConclusiones

OOP no impide que intereses cruzados OOP no impide que intereses cruzados ((cross cutting concernscross cutting concerns) se enreden ) se enreden ((tangled codetangled code))

AOP permite implementar intereses en AOP permite implementar intereses en forma aislada (forma aislada (separation of concernsseparation of concerns) ) y definir reglas para enhebrarlos y definir reglas para enhebrarlos ((weaving rulesweaving rules) hacia la ejecución) hacia la ejecución

Esto resulta en aplicaciones menos Esto resulta en aplicaciones menos acopladas y de evolución más sencillaacopladas y de evolución más sencilla

Page 33: Programación Orientada a Aspectos (AOP)

ReferenciasReferencias MarcMarc CliftonClifton: :

Aspect Oriented Programming / Aspect Oriented Aspect Oriented Programming / Aspect Oriented Software DesignSoftware Design

RamnivasRamnivas LaddadLaddad: I want my AOP!, Part 1: I want my AOP!, Part 1 Dharma Dharma ShuklaShukla: :

Aspect-Oriented Programming Enables Better CoAspect-Oriented Programming Enables Better Code Encapsulation and Reusede Encapsulation and Reuse

Andrea Andrea BioliBioli: The simplest AOP scenario in C#: The simplest AOP scenario in C# M. M. DeviDevi Prasad: AOP Support for C# Prasad: AOP Support for C# GregorGregor KiczalesKiczales: The More the Merrier: The More the Merrier (soporte (soporte

para aspectos en .NET)para aspectos en .NET) The Server Side: The Server Side: EntrevistaEntrevista a a GregorGregor KiczalesKiczales

sobresobre AOP AOP

Page 34: Programación Orientada a Aspectos (AOP)

RecursosRecursos AspectAspect--OrientedOriented Software Software DevelopmentDevelopment Aspect#Aspect# AspectDNGAspectDNG EosEos LOOM.NETLOOM.NET AspectJAspectJ Weave.NETWeave.NET Spring FrameworkSpring Framework AOP AllianceAOP Alliance Naop (AOP.NET)Naop (AOP.NET)

Page 35: Programación Orientada a Aspectos (AOP)

IMPORTANTEIMPORTANTE

Uy, Hoy Juega Argentina vs Uy, Hoy Juega Argentina vs Colombia, que hacemos acá Colombia, que hacemos acá hablando de estas cosas?hablando de estas cosas?

ARGENTINA, ARGENTINA !!!!ARGENTINA, ARGENTINA !!!!