1 / 35

Programación Orientada a Aspectos (AOP)

Programación Orientada a Aspectos (AOP). Mario Rodriguez Gerente Relaciones Académicas Microsoft Cono Sur ( mariorm@microsoft.com ). Metas de esta presentación. Transmitir los conceptos fundamentales de la Programación Orientada a Aspectos

virgo
Download Presentation

Programación Orientada a Aspectos (AOP)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programación Orientada a Aspectos (AOP) Mario Rodriguez Gerente Relaciones Académicas Microsoft Cono Sur (mariorm@microsoft.com)

  2. 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.

  3. 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

  4. Agenda • Límites de OOP • AOP al rescate • Beneficios • Estado del arte

  5. 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

  6. Transaccionalidad Persistencia Trazabilidad Límites de OOP public classBanco { // declaraciones varias public doubleProcesarDebito(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) returnnuevo 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 }

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

  8. 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í-

  9. Síntomas del agotamiento de OOP • Código enredado • El desarrollador debe pensar en todos los intereses a la vez • Código desperdigado

  10. Implicancias del agotamiento de OOP • Implementación pobre de intereses • Productividad baja • Reusabilidad disminuida • Código de calidad empobrecida • Evolución difícil

  11. Agenda • Límites de OOP • AOP al rescate • Beneficios • Estado del arte

  12. 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

  13. 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

  14. 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

  15. ? Transaccionalidad Transaccionalidad Persistencia Persistencia Trazabilidad Trazabilidad Versión AOP de Banco public classBanco { // declaraciones varias public doubleProcesarDebito(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) returnnuevo 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 }

  16. 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

  17. 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)

  18. Transaccionalidad Persistencia Trazabilidad Anatomía (cont.) public classBanco { // declaraciones varias public doubleProcesarDebito(long cuentaId, double monto) { // validaciones de negocio // logica de negocio asociada al débito returnnuevo saldo cuenta; } // declaraciones de otros métodos de negocio }

  19. Agenda • Límites de OOP • AOP al rescate • Beneficios • Estado del arte

  20. 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

  21. Demos • Versión OOP de Banco • Versión AOP usando Proxys • Versión AOP usando Weaving Estático

  22. Agenda • Límites de OOP • AOP al rescate • Beneficios • Estado del arte

  23. 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)

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

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

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

  27. 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

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

  29. 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

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

  31. 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

  32. 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

  33. 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

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

  35. IMPORTANTE • Uy, Hoy Juega Argentina vs Colombia, que hacemos acá hablando de estas cosas? • ARGENTINA, ARGENTINA !!!!

More Related