Práctica 11. Lenguaje de dominio específico

Carla Ramos Alonso

Práctica 11 de la asignatura de Lenguajes y paradigmas de la programación. En dicha práctica haremos uso de las prácticas anteriores, y utilizaremos la clase Alimento_ y List que en nuestro caso definen una lista doblemente enlazada de alimentos, que a su vez pertenecen a un grupo, ya que hemos hecho uso de la herencia. Hemos hecho uso de los mixin de Ruby Enumerable y Comparable. Además, en esta práctica hacemos uso del paradigma de programación funcional y hemos calculado el aibc y el ig de los alimentos y de los distintos individuos. La nueva funcionalidad añadida es la ordenación de una determinada lista de alimentos mediante tres métodos diferentes: for, each y sort.

Las herramientas que hemos usado para el desarrollo de la misma son las siguientes:

Bundler: Manejo de gemas
Rspec: Desarrollo dirigido por pruebas
Guard: Comprobación continua
Travis: Ejecución de los resultados
Benchmark: Informe de tiempo (banco de pruebas)
Coveralls: Devuelve el cubrimiento y las estadísticas del código Ruby desarrollado

Usaremos la metodología del desarrollo dirigido por pruebas, que consiste en la definición de las pruebas, con el resultado que esperamos, y luego la implementación del mínimo código necesario para el éxito de la misma. Los DSL son herramientas útiles que permiten expresar fácilmente la lógica específica de un problema particular (dominio) que de otro modo será difícil o farragoso de escribir en otro idioma.

Interpretación

Para la interpretación del programa tendremos tan solo que modificar los ficheros de pruebas o clicar enter en la consola con la ejecución de guard, ya que este nos permite ver la ejecución de las pruebas cada vez que estas se modifiquen. Para ello ejecutaremos:
bundle exec guard

Resultado

Se podrán insertar alimentos a la lista, y además extraer el primero o el último.
El programa también hace uso de herencia con Ruby, de manera que los alimentos están clasificados por grupos de alimentos, que es una clase heredada de la clase alimento creada en las prácticas anteriores. A su vez, gracias a los mixin implementados, podremos obtener el maximo valor en la lista, el menor, desordenarla, definir un bloque para que se cumpla en los elementos de la lista, etc. Tenemos también el resultado del AIBC y además los IG de los alimentos (yogurt, chocolate y compota de manzana) y de los dos individuos instanciados. Tras la ordenación de la lista obtendremos una lista ordenada utilizando los valores energéticos de cada alimento.

Documentación

Para generar la documentación en Ruby he hecho uso de la herramienta rdoc la cual he instalado mediante: gem install rdoc Y tras haber comentado el código fuente he generado la documentación con: rdoc Se ha generado un directorio docs en mi directorio de trabajo en el que se incluye el fichero donde se puede encontrar toda la documentación:

docs/index.html