Descargar

Programación Orientada a Aspectos (página 2)

Enviado por Pablo Turmero


Partes: 1, 2
edu.red 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

edu.red 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

edu.red Versió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 }

(Gp:) Transaccionalidad (Gp:) Persistencia (Gp:) Trazabilidad

(Gp:) Transaccionalidad

(Gp:) Persistencia

(Gp:) Trazabilidad

(Gp:) ?

edu.red 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

edu.red 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)

edu.red 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 }

(Gp:) Persistencia

(Gp:) Trazabilidad

(Gp:) Transaccionalidad

edu.red 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

edu.red Demos Versión OOP de Banco Versión AOP usando Proxys Versión AOP usando Weaving Estático

edu.red 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)

edu.red Proyecto CAMEO Es una extensión del compilador C# Realiza weaving en forma estática (resuelve los aspectos en tiempo de compilación)

edu.red Eos Es una extensión del compilador C# Realiza weaving en forma estática

edu.red AspectDNG Post procesa assemblies introduciendo notificaciones (advices) Realiza weaving en forma estática Opera sobre cualquier lenguaje .NET

edu.red 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

edu.red Aspect# Posée un lenguaje para definir aspectos basado en AOP Alliance Provée weaving dinámico proxeando la clase interceptada

edu.red 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

edu.red AspectJ Dirigido por Kiczales, es el proyecto más antiguo y más evolucionado de AOP Extiende la sintaxis de Java Weaving estático

edu.red 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

edu.red 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

edu.red 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

edu.red Recursos Aspect-Oriented Software Development Aspect# AspectDNG Eos LOOM.NET AspectJ Weave.NET Spring Framework AOP Alliance Naop (AOP.NET)

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente