EMU-Code: Effective Mark-Up of Source Code

Aspect Oriented Programming

Emu

La "Programación Orientada a Aspectos" (Aspect Oriented Programming: AOP) trata de resolver el problema que se presenta cuando no es posible realizar una descomposición modular razonable del código de una aplicación de manera que cada aspecto relevante de la misma se implemente en módulos separados. Es decir, que no haya módulos que mezclen simultáneamente parte de dos o más aspectos diferentes.

La idea es que la aplicación se desarrolla como un conjunto de código, el código base, que implementa la funcionalidad principal, por un lado, y los diferentes bloques de código que implementan cada uno de los aspectos complementarios, por otro. El código base podría compilarse y ejecutarse por sí solo. Para disponer de la aplicación aumentada con la funcionalidad de los otros aspectos se utiliza la técnica de tejer el código base con el código de los aspectos para tener el código de la aplicación final mediante una herramienta especializada denominada weaver.

El código de los aspectos se escribe mediante una combinación del lenguaje de programación usado para el código base, ampliado con nuevas construcciones para especificar en qué puntos del código base (pointcuts) hay que insertar cada uno de los fragmentos de código (advices) correspondientes a los aspectos adicionales. Hay lenguajes especializados para programación orientada a aspectos a partir de lenguajes de uso general; AspectJ para Java, AspectC++ para C/C++, etc.

Un ejemplo típico es el de una aplicación que debe registrar su propio funcionamiento interno en un registro de incidencias para facilitar las tareas de auditoría en caso de anomalías o disconformidad con los resultados obtenidos. El código que va registrando la traza de funcionamiento se encontrará repartido por toda la aplicación. El código de la aplicación resultará más difícil de entender, ya que el código base se encuentra entremezclado con el de registro, y además este último no está centralizado en unos pocos sitios de manera que se pueda tener una visión de conjunto del mismo.

AOP en XML

Existe ya una herramienta de AOP que utiliza un lenguaje de descripción de aspectos (AspectX) basado en marcado XML en lugar de una ampliación de la gramática convencional del lenguaje base. Su complemento es una herramienta de tejimiento (XWeaver) capaz de combinar AspectX con código base en C/C++/Java.

AOP en EMU-Code

Puesto que el tejido del código de los aspectos con el código base implica una transformación de la estructura del código, parece razonable esperar que la representación del código con marcado XML o similar sea una buena base para desarrollar herramientas de AOP, con ventaja respecto a su aplicación sobre la representación del código como texto.

Una posible solución sería seguir la línea de AspectX y desarrollar un lenguaje especializado para la descripción de los aspectos en forma de una ampliación del marcado XML del lenguaje base en EMU-Code, junto con la utilidad de tejimiento necesaria para generar el código final sobre la marcha en el momento de invocar la compilación.

Otra posibilidad sería editar sobre vistas selectivas del código en desarrollo, de manera que se pueda trabajar bien sobre una visión de sólo el código base, o bien del código base ampliado con algunos de los aspectos, o bien sólo del código de los aspectos por separado. En este caso habría que ampliar el marcado EMU-Code del lenguaje base con elementos o atributos para designar el aspecto al que corresponde, en su caso, cada fragmento de código.

También sería posible combinar las dos alternativas anteriores y realizar el tejimiento selectivo de manera dinámica durante la edición del código base. Este planteamiento parece muy atractivo desde el punto de vista de facilidad de desarrollo, pero resultaría probablemente más difícil de implementar.


Copyright © 2007 Manuel Collado: http://lml.ls.fi.upm.es/~mcollado