Interesantísimos son los últimos documentos que estoy leyendo sobre AOP, una metodología de trabajo que nos ayuda en un montón de tareas de las que ahora nos ocupábamos usando ñapas o malos hábitos de programación.
Problema
El problema es que la programación orientada a objetos no escala con facilidad en cuanto se aumentan funcionalidades trasversales o requerimientos al desarrollo del programa. Me refiero a funcionalidades trasversales, funcionalidades que no son intrínsecas al modelo de nuestro desarrollo y que pueden ser externalizadas y aplicadas a múltiples desarrollos, como por ejemplo los logs, la seguridad, la persistencia, … Una clase desarrollada por nosotros a priori no tiene porqué saber como implementar la seguridad, como persistirse a si misma o como logear sus propias acciones.
Solución
La solución viene de la mano de AOP. Nos permite establecer «puntos de ruptura» en los cuales «salta» la ejecución de otras clases, realizan tareas y devuelven el control al punto de ruptura. Mediante la definicion en un archivo xml del punto de ruptura (que puede ser un patron en el nombre del metodo por ejemplo), le indicamos a nuestro «cargador de clases» ( tomcat, spring, …) que ejecute otra clase y luego devuelva el control, todo ello sin necesidad de modificar la clase original por supuesto.
Implementaciones de AOP
Algunas implementaciones de AOP son AspectJ, Aspectwerkz, Jboss AOP, Spring AOP, … . Aunque probablemente el mas potente (y el que yo uso) sea Spring AOP, quizás no sea el mas adecuado para aprender el funcionamiento de la Programacion Orientada a Aspectos. Yo creo que el mas adecuado para aprender es Aspectwerkz debido a la sencillez de su sintaxis y a que se centra exclusivamente en la AOP.
Conceptos Clave
Cross-cutting concerns:
Un problema cruzado es aquella funcionalidad que es trasversal a nuestra clase, de modo que se pueda implementar a varias clases o incluso programas, por ejemplo Logging
Advice:
Del inglés consejo, es el codigo adicional que queremos añadir a nuestro modelo, que puede ser codigo especifico de log, de persistencia, …
Point-cut :
El punto de corte, es el punto determinado en la ejecucion de nuestro programa donde queremos aplicar el consejo o codigo adicional.
Articulos y Links Relacionados
http://www.programacion.com/java/articulo/jap_aop/
http://en.wikipedia.org/wiki/Aspect-oriented_programming
http://www.onjava.com/pub/a/onjava/2004/07/14/springaop.html