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
Mostrar las bondades de utilizar esta forma de
desarrollar aplicaciones.
Mostrar Diferentes tipos de enfoques para el
entretejido.
Asumimos




Conocimientos de Programación Orientada a
Objetos
Conceptos básicos temas como Seguridad de
Aplicaciones, Trasabilidad, Cache, Persistencia,
Transaccionalidad.
Reflexion, .NET Remoting, Proxies Dinámicos.
Emisión de Código usando CodeEmit
Agenda




Límites de OOP
AOP al rescate
Beneficios
Estado del arte
Ingeniería de Sistemas (revisitada)

Un sistema complejo puede verse
como una implementación
combinada de múltiples áreas de
interés (concerns)
Lógica de negocio, performance,
persistencia, trazabilidad, debugging,
autenticación, seguridad de hilos,
chequeo de errores, etc
Comprensibilidad, mantenibilidad,
facilidad de evolución, etc
Límites de OOP
public class Banco {
// declaraciones varias
public double ProcesarDebito(long cuentaId, double monto) {
// apertura de demarcacion transaccional
Transaccionalidad
try {
// recupero de la cuenta
// validaciones de negocio
// logica de negocio asociada al débito
Persistencia
// persistencia del nuevo estado
// traceo del movimiento para auditoria
// cierre exitoso de la transacción (commit)
return nuevo saldo cuenta;
Trazabilidad
} 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
}
Límites de OOP (cont.)

OOP cumplió todas las promesas por las que fue
concebido




Modelar la aplicación dentro del esquema de objetos que
colaboran entre sí
Encapsular detalles de implementación detrás de interfaces
El Polimorfismo proveyó una interfaz y una conducta común
a conceptos relacionados
La Herencia permitió que componentes más específicos
cambien conductas particulares sin necesidad de acceder a la
implementación de los conceptos de base
Límites de OOP (cont.)

No obstante, OOP no se adecua lo suficiente para
conducir un comportamiento repartido entre varios
módulos –a menudo no relacionados entre sí-
Síntomas del agotamiento de OOP

Código enredado


El desarrollador debe pensar en todos los intereses a la vez
Código desperdigado
Implicancias del agotamiento de
OOP





Implementación pobre de intereses
Productividad baja
Reusabilidad disminuida
Código de calidad empobrecida
Evolución difícil
Agenda




Límites de OOP
AOP al rescate
Beneficios
Estado del arte
AOP al rescate



En 1997, Gregor Kiczales junto a otros científicos del
laboratorio de investigación de Xerox (Palo Alto)
elaboraron el documento Aspect-Oriented
Programming
En el mismo analizaban el límite de OOP, ofreciendo
AOP como un nuevo paradigma de programación
También, iniciaron el proyecto AspectJ: una
implementación de AOP basada en Java y extensiones
que completaban el nuevo paradigma
Descomposición aspectual



Separación de intereses (separation of concerns)
Busca aislar aquellos intereses transversales (cross cutting
concerns)
Cada uno de dichos intereses se implementará en una
unidad separada
Recomposición aspectual



Posterior a la implementación, un componente creará
unidades modulares con cada aspecto y las entrelazará
El producto final es similar al de OOP
La diferencia en AOP es que la implementación de cada
aspecto no es consciente de las restantes
Versión AOP de Banco
public class Banco {
// declaraciones varias
public double ProcesarDebito(long cuentaId, double monto) {
// apertura de demarcacion transaccional
Transaccionalidad
try {
// recupero de la cuenta
// validaciones de negocio
// logica de negocio asociada al débito
Persistencia
// persistencia del nuevo estado
// traceo del movimiento para auditoria
// cierre exitoso de la transacción (commit)
return nuevo saldo cuenta;
Trazabilidad
} 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
}
Lenguajes AO

Los lenguajes OO surgieron como extensiones a
los lenguajes estructurados
C++ amplió la gramática del Lenguaje C
 Visual Basic añadió objetos a BASIC
 Delphi a Pascal


Los lenguajes AO hacen lo propio con los
lenguajes OO

Por ende, OO no muere: evoluciona
Anatomía de un lenguaje AO

Implementación de intereses


Para esto sirve cualquier lenguaje OO
Especificación de aspectos (aspects) y reglas de
“tejido” (weaving rules)
Punto de unión (join point, pointcut)
 Notificación (advice)
 Interceptor (interceptor)

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
}
Agenda




Límites de OOP
AOP al rescate
Beneficios
Estado del arte
Beneficios





Aspectos reunen el código desperdigado
Separación de intereses reduce el acoplamiento
Mayor reusabilidad
Sistemas más simples de evolucionar
AOP permite postergar decisiones de diseño
Demos



Versión OOP de Banco
Versión AOP usando Proxys
Versión AOP usando Weaving Estático
Agenda




Límites de OOP
AOP al rescate
Beneficios
Estado del arte
AOP.NET (NAop)


Declara aspectos,
puntos de unión, etc
en XML
Realiza weaving en
forma dinámica
(resuelve los aspectos
en tiempo de
ejecución)
Proyecto CAMEO


Es una extensión del
compilador C#
Realiza weaving en
forma estática
(resuelve los aspectos
en tiempo de
compilación)
Eos


Es una extensión del
compilador C#
Realiza weaving en
forma estática
AspectDNG



Post procesa
assemblies
introduciendo
notificaciones (advices)
Realiza weaving en
forma estática
Opera sobre cualquier
lenguaje .NET
LOOM.NET


Declara puntos de
unión y notificaciones
mediante atributos en
la clase que modela el
aspecto
Provée weaving estático
y dinámico
Aspect#


Posée un lenguaje para
definir aspectos
basado en AOP
Alliance
Provée weaving
dinámico proxeando
la clase interceptada
Weave.NET



Apunta a cualquier
lenguaje .NET
Provée weaving
dinámico al momento
de carga de la clase
interceptada
Aspectos se declaran
en XML
AspectJ



Dirigido por Kiczales,
es el proyecto más
antiguo y más
evolucionado de AOP
Extiende la sintaxis de
Java
Weaving estático
Spring Framework y Spring.NET



Incluye características
AOP mediante
Dynamic Proxies
Las reglas de tejido se
especifican en XML
(weaving dinámico)
Desarrollado para
J2EE, aunque se está
portando a .NET
Conclusiones



OOP no impide que intereses cruzados (cross
cutting concerns) se enreden (tangled code)
AOP permite implementar intereses en forma
aislada (separation of concerns) y definir reglas para
enhebrarlos (weaving rules) hacia la ejecución
Esto resulta en aplicaciones menos acopladas y
de evolución más sencilla
Referencias







Marc Clifton: Aspect Oriented Programming / Aspect Oriented
Software Design
Ramnivas Laddad: I want my AOP!, Part 1
Dharma Shukla: Aspect-Oriented Programming Enables Better
Code Encapsulation and Reuse
Andrea Bioli: The simplest AOP scenario in C#
M. Devi Prasad: AOP Support for C#
Gregor Kiczales: The More the Merrier (soporte para aspectos
en .NET)
The Server Side: Entrevista a Gregor Kiczales sobre AOP
Recursos










Aspect-Oriented Software Development
Aspect#
AspectDNG
Eos
LOOM.NET
AspectJ
Weave.NET
Spring Framework
AOP Alliance
Naop (AOP.NET)
IMPORTANTE

Uy, Hoy Juega Argentina vs Colombia, que
hacemos acá hablando de estas cosas?

ARGENTINA, ARGENTINA !!!!
Descargar

Programación Orientada a Aspectos (AOP)