AOP Aspect Oriented Programming

Víctor Fariña
Jul 6, 2006 ♥ 2 min read

Interesantisimos son los ultimos documentos que estoy leyendo sobre AOP, una metodologia de trabajo que nos ayuda en un monton de tareas de las que ahora nos ocupabamos usando ñapas o malos hábitos de programación.

Problema

El problema es que la programacion orientada a objetos no escala con facilidad en cuanto se aumentan funcionalidades trasversales o requerimientos al desarrollo del programa. Me refiero a funcionalidades trasversales a funcionalidades que no son intrinsicas al modelo de nuestro desarrollo y que pueden ser externalizadas y aplicadas a multiples desarrollos, como por ejemplo Logging, 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 solucion viene de la mano de AOP. Nos permite establecer “puntos de ruptura” en los cuales “salta” la ejecucion 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

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.