1. Programación Orientada a Aspectos y Declarativa
Programación Orientada a Aspectos y Declarativa
Poveda D.*; Herrera F.**; Quilachamin A.***
*Escuela Politécnica Nacional, Facultad de Ingeniería Eléctrica y Electrónica, Quito, Ecuador
e-mail: darwin.poveda@epn.edu.ec
** Escuela Politécnica Nacional, Facultad de Ingeniería Eléctrica y Electrónica, Quito, Ecuador
e-mail: fherrera0206@gmail.com
*** Escuela Politécnica Nacional, Facultad de Ingeniería Eléctrica y Electrónica, Quito, Ecuador
e-mail: alexfer.qm@gmail.com
Objetivo: Este documento tiene como objetivo dar una breve descripción sobre el paradigma de
la Programación Orientada a Aspectos (POA) y la Programación Declarativa.
1. INTRODUCCION
2. MÉTODO
2.1. Programación Orientada a Aspectos
INTRODUCCION
La Programación Orientada a Objetos introdujo un avance importante mediante el uso de
entidades las cuales capturan funcionalidad, comportamiento y estructura interna dicha
entidad es llamada clase.
En la actualidad existen requerimientos de una y de n-dimensiones, mientras que los
métodos de implementación únicamente son de una dimensión, lo cual produce un mapeo
de requerimientos deficiente a sus respectivas implementaciones, cuyos principales
síntomas son el Código Cruzado en el que varios requerimientos son atendidos por el
mismo código, y el Código Diseminado en el que un requerimiento es atendido por varios
módulos.
El uso de varios conceptos enun mismo modulo lleva a producir un código poco reusable,
de baja calidad y propenso a errores.
Es por esto que nace la Programación Orientada a Aspectos(POA),el mismo que permite
a los desarrolladores escribir, ver y editar un aspectodiseminado por todo elsistema como
una entidad por separado, para lograr atender todos los requerimientos del sistema.
2.1.1. Que es un Aspecto?
Un aspecto es una unidad que se encarga de diseminar por la estructura de una unidad
funcional, los aspectos se desarrollan en la etapa de implementación al igual que en la
etapa de diseño.
Para poder comparar un programa de lenguaje tradicional con un programa orientado a
aspectos vamos a tener en cuenta la siguiente figura en la que un programa tradicional
está formado por varias tramas horizontales las mismas que representan una
funcionalidad distinta repartidas por todo el sistema, en cambio una programación
orientada a aspectos está formada por 3 bloques compactos los mismos que representan
un aspecto.
2. Programación Orientada a Aspectos y Declarativa
Figura 1. Comparación entre Programación tradicional con una orientada a aspectos
2.1.2. Estructura de implementacion
En las aplicaciones tradicionales orientadas a objetos se usaba un compilador para que
nos tradujera un programa escrito en un lenguaje de alto nivel a uno que sea entendible
por la maquina.
Figura 2. Estructura en una implementación en lenguajes de aspectos.
En cambio en la aplicaciones orientadas a aspectos se tiene el compilador pero extra se
dispone de un tejedor que nos permite implementar las funcionalidades basicas con todos
y cada uno de los modulos que implementan los aspectos, los mismos que pueden estar
codificados con un lenguaje diferente.
2.1.3. Conceptos asociados
Punto de Enlace o de Unión (Join point):es un lugar dentro delcódigo donde un aspecto
puede ser conectado, mediante los diferentes comportamientos que se hayan declarado
3. Programación Orientada a Aspectos y Declarativa
previamente, como una llamada a un método, el lanzamiento de una excepción o la
modificación de un campo.
Consejo (Advice): es la implementación del aspecto, es decir, contiene el código que
implementa la nueva funcionalidad. Se insertan en la aplicación en los Puntos de Enlace.
Puntos de Corte (Pointcut): describen los eventos que se van a aplicar en cada Punto de
Enlace. No definen acciones. Se especifican mediante expresiones regulares.
Introducción (Introduction): se utilizan para añadir métodos o atributos a clases ya
existentes.
Destinatario (Target): este define a la clase que va a ser objeto de un consejo.
Resultante (Proxy): es el objeto que se crea luego de aplicar el Consejo al Objeto
Destinatario. El resto de la aplicación solamente tendrá que soportar al Objeto
Destinatario (pre-POA) y no al Objeto Resultante (post-POA).
Tejido (Weaving): es el proceso de aplicar Aspectos a los Objetos Destinatarios para
crear los nuevos Objetos Resultantes en los especificados Puntos de Enlace.
2.1.4. Principales requerimientos
Un lenguaje para definir la funcionalidad básica, conocido como lenguaje base o
componente. Podría ser un lenguaje imperativo, o un lenguaje no imperativo
(C++, Java, Lisp, ML).
Uno o varios lenguajes de aspectos, para especificar el comportamiento de los
aspectos. (COOL, para sincronización, RIDL, para distribución, AspectJ, de
propósito general.)
Un tejedor de aspectos(Weaver), que se encargará de combinar los lenguajes. Tal
proceso se puede retrasar para hacerse en tiempo de ejecución o en tiempo de
compilación.
2.1.5. Tipos
De dominio específico, se los han sido diseñados para dar soporte a un tipo
particular de Aspectos, que pueden ser: concurrencia, sincronización o
distribución. Este tipo de lenguajes suelen tener un nivel de abstracción
mayor que el lenguaje base, y permiten representar los conceptos específicos
del aspecto aun nivel de representación más elevado. Algunos de estos
lenguajes pueden poner restricciones en el lenguaje base, para evitar
inconsistencias y garantizar que las tareas realizadas por los aspectos no
sufran alteración alguna.
De propósitos generales, han sido diseñados para brindar soporte a cualquier
tipo de Aspectos. Estos lenguajes no pueden imponer restricciones en el
lenguaje base. Tienen el mismo nivel de abstracción que el lenguaje base, y
soportan las mismas instrucciones, ejemplo: AspectJ.
2.1.6. Ventajas
4. Programación Orientada a Aspectos y Declarativa
Provee un mecanismo que permite separar cada uno de los módulos de la
aplicación y poder realizar las respectivas llamadas entre ellos de una manera más
limpia.
Evita que haya la duplicidad de código.
El mantenimiento del código es flexible
2.2. Programación Declarativa
La programación declarativa es un paradigma de programación, que está basado en el
desarrollo de programas especificando o "declarando" un conjunto de condiciones,
proposiciones, afirmaciones, restricciones, ecuacioneso transformaciones que describen
el problema.
2.2.1.Características
El objetivo fundamental de los lenguajes de programación declarativa es
suministrar un alto nivel de abstracción, de tal forma que solo con la
especificación del problema sea un programa capaz de resolver el problema.
El programador no debe escribir detallamente todas las acciones que se debe
realizar, es decir el algoritmo de la solución del problema, como es tradicional
en los lenguajes imperativos.
En la programación declarativa, en general, los programas son más breves y
sencillos de mantener.
Un lenguaje con una clara correspondencia con la lógica matemática
El programa describe lo que se debe calcular y no cómo calcular.
2.2.2.Ventajas
Descripciones compactas y muy expresivas. Es posible describir universos de
problemas con muy pocas líneas de código del lenguaje que permitan la
solución de un gran número de problemas.
Desarrollo del programa no tan orientado a la solución de un único problema.
Con una programación adecuada,basta haberdescrito un dominio de problemas
de forma correcta y saber formular nuestro problema como una simple consulta
en dicho dominio. La variedad de preguntas que se pueden responder con una
única descripción del dominio de problemas concreto suele ser muy elevada.
No hay necesidad de emplear esfuerzo en diseñar un algoritmo que resuelva el
problema.
Los lenguajes declarativos tienen la ventaja de serrazonados matemáticamente,
lo que permite el uso de mecanismos matemáticos para optimizar el
rendimiento de los programas.
2.2.3.Tipos
Existen varios tipos, pero vamos a mencionar algunos:
Programación funcional
Programación lógica.
Programación algebraica
Programación basada en restricciones.
2.2.3.1. La programación lógica utiliza el predicado lógico como concepto
descriptivo básico. Nuestro programa consistirá en una serie de predicados
que describirán un mundo en el que los objetos se relacionan según las
reglas de la lógica de predicados. Ejemplo: Prolog, ML, Lisp, Curry, F-
Prolog.
5. Programación Orientada a Aspectos y Declarativa
Declaraciones: Resolución:
Figura 3. Programa en Prolog de relaciones de descendencia.
2.2.3.2. La programación funcional utiliza la función como concepto
descriptivo básico. Esto quiere decir que en nuestro programa describiremos
funciones y que estas funciones se pueden combinar unas con otras para
generar nuevas funciones. Ejemplo: Haskell, (Programación funcional)
Declaraciones: Resolución:
Figura 4. Programa en Haskell: Comprobación de que un número es natural
2.2.3.3. Lenguajes algebraicos.
Ejemplo: Maude, SQL
2.2.4.Aplicaciones
Este estilo de programación encuentra numerosas aplicaciones industriales en
campos como: las bases de datos, ingeniería del software, procesadores de
lenguajes, lenguaje natural, investigación operativa, seguridad de redes, etc.
3. CONCLUSIONES
- La utilización de la POA nos va a permitir tener aplicaciones con mejor mantenibilidad
y modularidad, aunque el nivel de abstracción sea grande, la cantidad de prestaciones que
presenta, este supone un gran avance en lo que a lenguajes de programación concierne.
- Al igual que sucedió en un principio con la programación orientada a objetos, el POA
todavía no es muy aceptado dado su gran nivel de abstracción necesaria,sin embargo con
la investigación adecuada en unos cuantos años este tipo de programación puede llegar a
ser uno de los más usados.
4. BIBLIOGRAFÍA
6. Programación Orientada a Aspectos y Declarativa
Fernández, A.J.(2005). PROGRAMACIÓNDECLARATIVACONRESTRICCIONES
Inteligencia Artificial. Revista Iberoamericana de Inteligencia Artificial, otoño, año/vol.
9, número 027 Asociación Española para la Inteligencia Artificial Valencia,
España. Inteligencia Artificial, Revista Iberoamericana de Inteligencia Artificial, 9(27),
73-100.
Moreno, G., & Pascual, V. (2006). Programando con igualdad similar estricta. Una
Perspectiva de la Inteligencia Artificial en su 50 Aniversario, 600.
"Programación declarativa vs. Procedural". [En línea]. Disponible en:
ftp://altea.dlsi.ua.es/people/antonio/ayudaProlog.pdf/.
“Programacion Declarativa”. [En línea]. Disponible en: http://titan.inf-
cr.uclm.es/www/pjulian/teaching/sl_apPD.pdf