AOP

La programación orientada a aspectos (Aspect-Oriented Programming) complementa la programación orientada a objetos (OOP) para suministrar una manera distinta de pensar la estructura de un programa. Mientras que la OOP descompone las aplicaciones dentro de jerarquias de objetos, AOP descompone los programas dentro de aspectos. Estos aspectos permiten definir cross-cutting concerns que puede ser aplicados a diferentes modelos de objetos. Mientras que el uso correcto de OOP es crucial para las aplicaciones J2EE, OOP no resuelve todos los problemas. Esta falla en modularizar codigo llamdo crosscutting, por ejemplom codigo que deberia correr antes y despues de cada invocación a un metodo en particular, como abrir y cerrar una transacción antes y depsues de ejecutar un metodo de de un objeto de negocio. Los aspectos mejoran, en forma elegante, este problema modularizando y encapsulando el codigo comun eliminando la duplicacion de codigo.

Conceptos
Crosscutting concern: Un crosscutting concern es un "problema" el cual la implementacion se disemina a traves de varias clases, como chequeos de seguridad o manejo de transacciones. Estos problemas no son bien resueltos por la OOP.
Joinpoint: Representa un "momento" en la ejecución de un programa, por ejemplo, una llamada a un método, o un constructor, o el acceso a un miembro de una clase en particular.
  • Method invocation.
  • Field access.
  • Throws.

  • Advice: Comportamiento o acción tomada cuando se alcance un determinado join point. Actualmente hidralink soporta intercepcion de metodos
    Pointcut:Es un conjunto de join points, definen donde seran aplicados los advice, por ejemplo, "llamadas a los métodos que empiecen por set".
    Aspect: La combinación del pointcut y el advice es conocida como un aspecto. Es el módulo que define uno o varios pointcut/s y los advices que deben ejecutarse cuando la ejecución alcance cualquiera de ellos.
    Introduction: Comportamiento que añadimos a un objeto en tiempo de ejecución para que implemente una interfaz adicional.
    Mixin: Un mixin encapsula una pieza de funcionalidad que es "metida" dentro de clases existentes sin tener que utilizar la herencia convensional. En un contexto AOP, el mixin es logrado a traves de las introducciones. Los mixin puede simular herencia multiple
    Weaving: Es el proceso de ensamblar los aspectos dentro del flujo de ejecucion. Hat varias estrategias para realizar el weaving, las mas utilizadas son la generación de codigo y compilación (AspectJ), utilizar un custom ClassLoader (JBossAOP) o dynamic byte code generation (hidralink).
    Otras frameworks AOP
    AspectJ
    JBossAOP
    AspectWerkz
    Spring AOP
    JAC
    Nanning
    Referencias
    Tutorial de AOP en castellano
    Introducción a la AOP
    Introduction to Aspect-Oriented Programming
    Aspect-Oriented Programming and JBoss
    Spring AOP: Aspect Oriented Programming with Spring