Introducción a la programación orientada a aspectos
Cuando pensamos en objetos y sus relaciones con otros objetos, normalmente pensamos en el término herencia. Por ejemplo, defina una clase abstracta: clase Perro. La herencia se utiliza a menudo para ampliar la funcionalidad al identificar clases que son similares pero cada clase tiene su propio comportamiento único. Por ejemplo, si se identifica a Poodle, se puede decir que un Poodle es un Perro, es decir, Poodle hereda Perro. Hasta aquí esto parece bueno, pero ¿y si definimos otro comportamiento único que luego identificamos como Perro Obediente? Por supuesto, no todos los perros son mansos, por lo que la clase Perro no puede contener un comportamiento de obediencia. Además, si tuviéramos que crear una clase de Perro Obediente que heredara de Perro, ¿dónde encajaría Poodle en esta jerarquía? Poodle es un perro, pero Poodle no es necesariamente obediente, ¿hereda Poodle de Dog o Obedient Dog? Ninguno, podemos ver la domesticación como un aspecto que se aplica a cualquier tipo de Perro domesticado, y nos oponemos a forzar de manera inapropiada ese comportamiento en la jerarquía de Perros.
En términos de software, la programación orientada a aspectos es la capacidad de aplicar aspectos que cambian el comportamiento de una clase u objeto independientemente de cualquier jerarquía de herencia. Estos aspectos luego se aplican en tiempo de ejecución o en tiempo de compilación. Es más fácil dar un ejemplo sobre AOP y luego describirlo. Primero, definamos cuatro términos clave de AOP, que son importantes porque los usaré una y otra vez:
Punto de unión: un punto identificable y bien definido en el código.
Pointcut: método para especificar puntos de unión mediante configuración o codificación.
Consejo: representa un método que requiere una acción transversal.
Mixin: introduce un nuevo comportamiento al mezclar una instancia de una clase en una instancia de una clase objetivo.
Para comprender mejor estos términos, piense en un cruce como un punto definido en el flujo del programa. Un buen ejemplo de punto de unión es cuando el código llama a un método, el punto en el que se produce la llamada se considera un punto de unión. Los puntos de corte se utilizan para especificar o definir puntos de unión que desea interceptar en el flujo del programa. El punto de corte también contiene una notificación que se produce cuando se alcanza el punto de unión. Por lo tanto, si define un punto de corte en un método específico que se llama, cuando se llame a ese método o punto de unión, el marco AOP interceptará el punto de corte y también se realizará el consejo del punto de corte. Hay varios tipos de consejos, pero lo más común es pensar en ellos como un método más al que recurrir. Cuando se llama a un método con un punto de corte, el consejo a ejecutar será otro método a llamar. La notificación o método a llamar puede ser un método interceptado en el objeto o puede ser un método en otro objeto mezclado. Explicaremos la mezcla más adelante.