Introduccion a la Programación orientada a aspectos.

“Los desarrolladores de software debemos mantenernos actualizados en las nuevas tecnologías de programación, las cuales avanzan cada vez más hacia mejores niveles para representar adecuadamente las abstracciones del mundo y sus complejas asociaciones”.

Actualmente el desarrollo de software está sustentado esencialmente por la programación imperativa y su famoso enfoque orientado a objetos, el cual ofrece una serie de bondades para modelar y acercar más el dominio del problema al dominio de la solución. Sin embargo, el modelo orientado a objetos, con todo y sus grandes ventajas de encapsulación, herencia y polimorfismo, no está libre de limitaciones para el desarrollo de software. La orientación a objetos (ni la estructurada) permite la encapsulación de requisitos no funcionales, es decir aquellos atributos del sistema como desempeño, depuración, distribución, logging, persistencia, calidad, capacidad de mantenimiento (maintainability), capacidad de uso (usability), por citar solo algunos.

Tomemos por ejemplo el caso de logging, una propiedad que el sistema debe considerar en cada uno de los módulos responsables de verificar que el usuario esté registrado para tener acceso a dicha unidad. Cada módulo nuevo debe implementar las mismas líneas de código y si los requisitos de logging cambian, entonces la labor de mantenimiento se vuelve algo complicado porque en todos los lugares donde dicho atributo esté implementado deberá modificarse de la misma forma. Esto implica que, si por alguna razón no se mantiene el cambio homogéneo, entonces el esquema de logging se vuelve inconsistente. Además un mantenimiento de esta magnitud es una fuente de introducción de nuevos errores.

La programación orientada a aspectos es un paradigma ortogonal a los paradigmas existentes, es decir, es complementario al ofrecer nuevas formas de encapsular los requisitos no funcionales. Entonces, se dice que un aspecto es la implementación de un requisito no funcional. Cuando se hablamos de aspectos, no es esencialmente sólo decir que se trata de un atributo del sistema, sus raíces vienen bien sustentadas en un principio de ingeniería de software conocido como principio de Separación de Asuntos (separation of concerns – SOC).

El principio SOC establece que las cosas deben mantenerse separadas para poder comprender cómo funcionan. SOC es la versión robusta del principio bien conocido en la programación estructurada: divide y vencerás (divide et impera). Lo importante es poder identificar las cosas relevantes desde las actividades de análisis y mantenerlas así hasta las actividades de programación. Con el enfoque estructurado y de objetos no es posible aplicar SOC porque simplemente no hay sopote para ello. El resultado es que el código de logging aparece repetido en todo el sistema, interfiere con otras partes de la funcionalidad y se dificulta la comprensión del código así como el mantenimiento correspondiente. Incluso, el sistema tiende a crecer más de lo necesario por implementar funcionalidad mediante código repetido.

Para garantizar que las cosas se mantengan separadas como lo marca SOC, la programación orientada a aspectos utiliza tres conceptos básicos: puntos de unión, cortes y avisos. Un punto de unión (join point) es un evento identificable en la ejecución de un programa, un corte (pointcut) es una colección de puntos de unión y un aviso (advice) es un fragmento de código que se ejecuta al instante en que se detecta un evento.

Ejemplos de puntos de unión son la invocación a un método, la ejecución de un constructor, la lectura de un valor de una variable de instancia, el lanzamiento de una excepción, la invocación a la superclase, etc. El corte, más formalmente conocido como corte en puntos, está representado por aquel conjunto de eventos (puntos de unión) que son de interés para realizar algo en particular. Si consideramos nuevamente el esquema de logging, el corte serían todos los puntos del sistema que deben trabajar con esta propiedad, por ejemplo todas las ejecuciones de los métodos de transacciones a bases de datos y administración de usuarios. ¿Qué es lo que se desea realizar en todos esos lugares del sistema? Simple: verificar que el acceso esté validado, y esa actividad la desempeña un aviso.

Finalmente, un aspecto (aspect) es la unidad de programación que nos va a permitir ubicar la especificación de corte (todos los puntos de unión de interés) junto con sus correspondientes avisos para garantizar que esa propiedad va a trabajar de manera coordinada con las clases y objetos del sistema y proporcionar una funcionalidad completa, tal y como si se hubiese programado de forma tradicional. El resultado es un sistema altamente modular, donde cada módulo es más pequeño al tener el código de otras propiedades separado y, si es necesario hacer ajustes en uno de ellos, entonces el mantenimiento se vuelve fácil al poder modificar solamente un módulo y no toda la aplicación. Se tiene ahorro en costos y tiempo de desarrollo.

“En esta columna he tratado de eliminar las grandes formalidades que el modelo orientado a aspectos ofrece, sin embargo, trabajar con aspectos requiere conocer muy bien el modelo de objetos para especificar claramente los cortes requeridos. Termino esta parte mencionando que la mayoría de los lenguajes orientados a aspectos están sobre la plataforma Java y que sólo dos lenguajes son los más completos: AspectJ con el modelo de puntos de unión más robusto y CaesarJ (extensión de AspectJ) con soporte fuerte de polimorfismo de aspectos, componentes e interfaces de colaboración. Existen servidores de aplicaciones y frameworks muy buenos como JBoss y Spring que también proporcionan ayuda útil al desarrollador. Si de IDEs se trata, uno de los más robustos es Eclipse, aunque también se cuenta con soporte para NetBeans e IntelliJ”.

Para todos aquellos que les interese, principalmente para quienes aún no conocen este paradigma o que si lo han escuchado, espero que estas líneas les ayude a saber de qué se trata y porqué los objetos tienen limitaciones. En otra ocasión les tendré algunos ejemplos básicos para ilustrar cómo trabajar con AspectJ.

Escrito por: Dr.Ulises Juárez Martínez.

correo: ujuarez71@gmail.com

Enlaces | POA | AspectJ(ejercicio)

Anuncios

One Response to Introduccion a la Programación orientada a aspectos.

  1. Isaí says:

    Me parece interesante, voy a empezar a investigar un poco más sobre esto.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: