programación orientada a aspectos (aop)
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 PresentationTRANSCRIPT
Programación Programación Orientada a Orientada a
Aspectos (AOP)Aspectos (AOP)
Mario Rodriguez Gerente Relaciones AcadémicasMicrosoft Cono Sur([email protected])
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.
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
AgendaAgenda
Límites de OOPLímites de OOP AOP al rescateAOP al rescate BeneficiosBeneficios Estado del arteEstado del arte
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
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
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
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í-
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
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
AgendaAgenda
Límites de OOPLímites de OOP AOP al rescateAOP al rescate BeneficiosBeneficios Estado del arteEstado del arte
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
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
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
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
??
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
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))
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
AgendaAgenda
Límites de OOPLímites de OOP AOP al rescateAOP al rescate BeneficiosBeneficios Estado del arteEstado del arte
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
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
AgendaAgenda
Límites de OOPLímites de OOP AOP al rescateAOP al rescate BeneficiosBeneficios Estado del arteEstado del arte
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)
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)
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
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
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
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
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
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
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
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
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
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)
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 !!!!