Aplicación de Aspectos y Diseño por Contrato con Ptolemy

Publicado en

Las principales ventajas que ofrece la Programación Orientada a Aspectos son: separación de asuntos (componentes y aspectos), facilidad para razonar conceptos, alto nivel de reutilización y mejor mantenimiento del software.

Actualmente, existen varios Lenguajes Orientados a Aspectos entre los que destacan: AspectJ, CaesarJ, ECaesarJ, EOS, y Ptolemy. Cada uno proporciona mecanismos que contribuyen al desarrollo o mantenimiento del software dependiendo de lo que se desee realizar.

El Diseño por Contrato es una técnica muy conocida para el diseño de software de calidad. Los beneficios más importantes del DbC son: facilitad de pruebas unitarias, manejo de excepciones de manera eficiente y construcción de componentes robustos.

Las principales herramientas que implementan el DbC en Java son: jContractor, Jass, Modern Jass, Contract4j, JML y Ptolemy. Sin embargo, no se reporta alguna guía para el desarrollo de software con Ptolemy. El propósito de este artículo es ofrecer una guía básica de cómo aplicar conceptos orientados a aspectos en Ptolemy utilizando ptolemy-1.2.0-beta6.

Diseño por Contrato (DbC)

El DbC es una técnica diseñada por Bertrand Meyer y característica central de su lenguaje de programación Eiffel [1]. El DbC se utiliza con cualquier lenguaje de programación, para validar que el software cumpla con su especificación (contrato).

El contrato establece condiciones de uso e implementación denominadas aseveraciones que clientes y proveedores de un componente deben cumplir. En el DbC se utilizan tres tipos de aseveraciones [1]:

  • Precondición: restricciones bajo las cuales una rutina funcionará correctamente.
  • Postcondición: describe el efecto de la rutina.
  • Invariante de clase: restricciones que deben satisfacerse por cada objeto tras la ejecución de los métodos y constructores.

Ptolemy

Ptolemy es un lenguaje de programación cuyo objetivo es mejorar la habilidad de separar asuntos conceptuales [2]. Además, ofrece el soporte para el manejo de eventos e introduce el concepto de contrato translúcido [3]. A diferencia de AspectJ y CaesarJ solventa dificultades como:

  • Cuantificación: referenciar los lugares en el código donde un evento es identificado sin tener que nombrar a las clases que disparan el evento.
  • Inconsciencia: liberar al programador de las especificaciones puntuales donde una sentencia o conjunto de sentencias del programa tendrá efecto.
  • Fragilidad en los cortes: dependencia léxica y acoplamiento entre aspectos y código base.

Instalación. El compilador de Ptolemy se puede obtener en http://ptolemy.cs.iastate.edu/download. Requiere tener instalado un Java Runtime Environment (JRE) 1.6 o superior.

Recomendaciones. El archivo bat localizado en \pyc\bin requiere de los siguientes ajustes para utilizar el compilador de Ptolemy:

  • Completar la sintaxis al asignar un valor a la variable de entorno PYC_HOME. El valor debe situarse entre %.
  • Corregir la ruta del archivo javac.jar, localizado dentro del subdirectorio \bootstrap\lib\javac.jar.

Compilación. Para compilar y ejecutar programas, es necesario configurar las variables de entorno del sistema Path y PYC_HOME. Ptolemy es compatible con Java; es decir, un programa válido en Java es válido en Ptolemy. La compilación se efectúa como se muestra a continuación:

pyc NombreClase.java

Tras ejecutar el comando pyc, se generarán los archivos .class. Si existen errores sintácticos en el código fuente, el compilador informa de ello.

Ejecución. La ejecución de un programa en Ptolemy se realiza de la misma manera que se ejecuta un programa Java, es decir:

java [nombre de clase con main()]

Contrato translúcido. Un contrato translúcido para un tipo de evento es un algoritmo abstracto que describe el comportamiento de los aspectos que se aplican a una interfaz orientada a aspectos [2].

Para verificar el cumplimiento de un contrato translúcido es necesario habilitar las aseveraciones en tiempo de ejecución como se muestra a continuación:

java -ea [nombre de clase con main()]

Orientación a aspectos

A continuación se describen los conceptos de aspectos desde la perspectiva del lenguaje Ptolemy.

  • Evento: Un punto de unión es un evento identificable en la ejecución de un programa. La declaración de un evento (línea 1 de Figura 1) en Ptolemy consta de 3 elementos [2]: nombre, lista de variables de contexto y tipo de retorno.
  • Método controlador del evento (Aviso): A diferencia de AspectJ, Ptolemy no tiene una sintaxis especial para los aspectos o avisos. En su lugar, reemplaza todos los eventos en un conjunto específico con llamadas al método controlador.
  • Cuantificación: Ptolemy asocia un método de clase a un conjunto de eventos identificados por un tipo de evento mediante las palabras reservadas when y do. Ptolemy cuantifica de manera inconsciente, al no depender del patrón de firmas como lo hace AspectJ, garantizando que el sistema reaccione a los eventos registrados [5].
  • Variables de contexto: La exposición de contexto permite conocer cuáles son los argumentos del corte. A diferencia de AspectJ, Ptolemy no provee primitivas como target, this y args para exponer contexto, en cambio permite definir n variables disponibles para los manejadores de eventos.
  • Activación dinámica de aspectos: se realiza mediante palabra reservada announce, la cual puede ocurrir dentro de un método o constructor.

Aplicando lo aprendido

El siguiente listado de código presenta un breve ejemplo de cómo aplicar los conceptos orientados a aspectos en Ptolemy anteriormente mencionados.

Listado 1. https://gist.github.com/pedrogk/6550a1f8e08c7fbbff5f

Conclusión

Como se puede apreciar, Ptolemy ofrece una forma útil para desarrollar software correcto, es decir que la funcionalidad cumpla con su especificación mediante la aplicación de contratos translúcidos cuyo enfoque combina el Diseño por Contrato y la Programación Orientada a Aspectos. Las ventajas más destacadas de Ptolemy son:

  • Eliminación de fragilidad de los cortes.
  • Cuantificación inconsciente.
  • Mejora la modularidad de los asuntos de corte, preservando la encapsulación del código orientado a objetos.
  • Control de avisos.
  • Razonamiento modular.

Referencias

[1] M. Bertrand. Object Oriented Software Construction. Prentice Hall, 2002.

[2] H. Rajan, G. T. Leavens et al. “Ptolemy Programming Language”. http://ptolemy.cs.iastate.edu

[3] H. Rajan, G. T. Leavens et al. “Modularizing Crosscutting Concerns with Ptolemy”. http://swgu.ru/pb

[4] M. Bagherzadeh, H. Rajan, et al. “Translucid Contracts for Modular Reasoning about Aspect-oriented Programs”. http://swgu.ru/pc

[5] M. Bagherzadeh. “Enabling Expressive Aspect Oriented Modular Reasoning by Translucid Contracts”. http://swgu.ru/pd

Bio

Guadalupe I. Trujillo, Ulises Juárez, Beatriz A. Olivares, Ignacio López, Celia Romero colaboran en el Instituto Tecnológico de Orizaba.