Está en la página 1de 4

¿Qué es la programación orientada a aspectos (POA)?

La programación orientada a aspectos (POA) es un paradigma de programación


que basa su filosofía en tratar las obligaciones transversales de nuestros
programas como módulos separados (aspectos) para lograr una correcta
separación de responsabilidades. Una obligación transversal es aquella que se
repite en varias partes de un programaindependientemente de si las secciones
en las que aparece tienen relación directa; imagina un método que actualice lo que
se muestra en la pantalla de un programa de dibujo, este puede ser llamado desde
los métodos encargados de dibujar algo en pantalla, hasta métodos encargados de
recortar, redimensionar, guardar, exportar, deshacer, etc.

Información de la POA

Aunque es un paradigma relativamente moderno, tuvo muchas influencias que le


ayudaron a marcar unas bases muy sólidas, entre las que cabe resaltar la reflexión
computacional, programación adaptativa y la programación orientada a objetos
(POO).

Con la programación orientada a objetos (POO) cambiamos nuestra forma de


pensar para abstraer problemas de una forma más simbólica para el humano, ahora
los objetos eran los que manipulaban los datos, y las clases son las que nos ofrecen
sus funcionalidades. Con la POA tomamos un enfoque un tanto parecido al de
la POO pero con la sutil diferencia que la POA nos dice que si alguna funcionalidad
de nuestro código se repite en diferentes módulos, lo mejor sería extraerla del
programa principal y hacer de ella un aspecto en lugar de crear jerarquías
complicadas.

A primera impresión pareciera que la POA es un intento desesperado de


complicarnos la POO puesto que las interfaces, la herencia y algunos otros
enfoques podrían suplir “fácilmente” lo que nos ofrecen los aspectos… Pero eso no
es completamente cierto. Aunque puedes modificar cualquier código que
usa POA para que no haga uso de ella, o simplemente puedes ignorar su existencia
y no programar nunca en ese paradigma, hay ciertas ventajas que esta nos
proporciona que otros paradigmas no nos brindan.

Continuemos con el ejemplo de la pantalla que necesita ser actualizada. Imagina


que estás desarrollando un programa de dibujo profesional; cada que realizas un
cambio en el lienzo, necesitas actualizarlo para que muestre los cambios
efectuados. Podrías crear un método update() que sea llamado después de que se
ejecuten aquellos encargados de modificar algo en pantalla. Si tu programa permite
utilizar 100 formas de dibujo diferentes (entre líneas, formas geométricas, mano
alzada, etc.), estaríamos hablando de que tendrías que agregar 100 llamados
a update(). Por si eso fuera poco, aún te faltan agregar los llamados después de
que se apliquen filtros, recortes, insertes imágenes, borres contenido, etc. Para no
repetir todas esas líneas de código o agregar jerarquías confusas y complicadas,
la POA nos dice que el método update() debería ser separado del código principal
para transformarlo en un aspecto y, de ese modo, poder decirle al compilador o
intérprete:

Después de un método cuyo identificador inicie con ‘set’ o ‘draw’, haz un llamado al
aspecto update

De ese modo nos ahorramos las líneas de código que hubieran resultado de hacer
uso de herencia, interfaces, ciclos anidados, validaciones o cualquier alternativa que
se te ocurra.

El fuerte de la POA se obtiene al combinarla con otros paradigmas de


programación, así compensamos las deficiencias de uno con las fortalezas de otro.
Entre todos los paradigmas, la POO es el más popular con el que se suele
combinar, es por eso que puedes encontrar fácilmente implementaciones
de POA para C++, Java y Perl.

Conceptos de POA

Los siguientes 3 conceptos son los más importantes de la programación orientada


a aspectos general:

1. Aspecto (aspect): funcionalidad transversal (se repetirá a lo largo del sistema) que
será implementada de forma separada. Es el concepto principal de este paradigma
puesto que representa la sección de código que se separó del resto del programa.
2. Punto de corte (pointcut): es el que se encarga de especificar mediante
expresiones regulares (regex) en qué parte del programa se debe de insertar un
aspecto.
3. Consejo (advice): es el código que ejecutará el aspecto (cuerpo del algoritmo).

Ventajas y desventajas (pros y contras) de la POA

Como cualquier paradigma, este tiene una serie de ventajas y desventajas. Una de
las principales desventajas que vale la pena mencionar aparte de las demás es que
sufre de un antipatrón de diseño: acciones a distancia. Esto ocurre porque
algunas partes de código (los aspectos) están en contacto con varias secciones de
código completamente diferentes, lo cual vuelve muy complicado identificar
operaciones de una parte del programa que pudieron haber realizado una tarea
errónea, o simplemente vuelve muy complicado identificar el orden de ejecución del
mismo. En seguida te presento una serie de ventajas y desventajas generales de
la POA:

Ventajas:

 Provee una fuerte herramienta para modularizar programas sin importar lo extensos
y complicados que estos sean.
 Vuelve más limpio el código fuente.
 Permite agilizar el proceso de creación de programas cuando muchas personas
están involucradas en el mismo proyecto, y/o están en lugares geográficos
diferentes.
 Puede mezclarse con cualquier otro paradigma de programación.
 Permite la comunicación entre diferentes lenguajes de programación que comparten
aspectos.

Desventajas:

 Sufre de un antipatrón de diseño: acciones a distancia.


 Vuelve difícil de comprender el código puesto que el programa hace tareas que no
están en los métodos que deberían estar.
 Es un poco complicado identificar cuándo es óptimo utilizar POA de forma eficiente.

Son dos paradigma completamente distintos. En la POA podemos decir que “cortas”
repeticiones de código de tu programa para crear un Aspecto. Pero no agregas una
“llamada” a él en cada parte de tu programa principal de donde “cortaste” código,
sino que especificas mediante reglas en qué partes del código se va a repetir este
Aspecto.
Por otro lado la programación funcional es cambiar un poco (o “un mucho”) tu forma
de ver el problema para ahora tratarlo puramente como expresiones y declaraciones
matemáticas sin cambiar estados o variables mutables.

Creo que la confusión podría venir de que cuando escuchamos Programación


“Funcional”, podemos pensar de inmediato que se trata de hacer programas usando
funciones… Y hasta cierto punto es cierto, sin embargo, estas funciones siguen
unas reglas y conceptos un tanto diferentes basados en fundamentos matemáticos,
a pesar de que su propósito principal pueda ser el mismo que el que tendrían en
otros paradigmas de programación.

Si tienes cualquier otra duda o aclaración no dudes en expresarla y te responderé


a la brevedad.