Capítulo 1. El Proyecto ExpertCoder

Tabla de contenidos

1.1. Motivación
1.2. Propósito
1.3. Librerías de ExpertCoder

1.1. Motivación

La forma tradicional más utilizada de escribir generadores de código es simplemente escribir un programa con una serie de comandos del estilo "print".

El problema de este enfoque es que resulta muy difícil, aún para el propio autor del generador, realizar modificaciones al diseño del código generado debido a que este no es similar al código del generador.

Existen otras alternativas más avanzadas, como por ejemplo utilizar plantillas XSLT para transformar documentos XML en código fuente; con estas alternativas se gana en claridad, ya que el código del generador (la plantilla) se parece mucho al código generado, sin embargo exponen sus desventajas a la hora de agregarle inteligencia al generador ya que el conjunto de herramientas y librerías accesibles desde una plantilla es bastante reducido.

1.2. Propósito

El propósito de este proyecto es construir un conjunto de herramientas que provean al desarrollador de generadores de código:

  • La claridad que aporta el uso de plantillas para la generación de código.

  • El poder de expresión que brinda la potencia de la plataforma .NET junto a su enorme librería de clases.

Adicionalmente, al estar basado en los principios de los sistemas expertos, los generadores resultantes son fácilmente extensibles, modulares y su estructura es más declarativa que imperativa.

De estos principios surgió el nombre del proyecto: Expert por estar basado en conceptos de sistemas expertos, y Coder porque es un autómata para escribir código fuente.

1.3. Librerías de ExpertCoder

ExpertCoder es un conjunto de librerías para escribir generadores de código. Si bien la idea original fue proveer librerías para convertir modelos UML a código fuente, el producto resultante es altamente modular, contando con ensamblados independientes entre sí que pueden ser utilizados para otros fines:

  • ExpertCoder.Templates brinda la posibilidad de trabajar sobre plantillas de texto de forma orientada a objetos.

  • ExpertCoder.Uml2 ha crecido hasta el punto de independizarse de ExpertCoder. Ahora tiene su propio proyecto independiente: nUML. Su nombre actual es NUML.Uml2, y permite manipular (crear, modificar y salvar y leer desde ficheros) modelos UML versión 2.0.

  • ExpertCoder.ExpertSystem implementa algunas ideas de la teoría de sistemas expertos, enfocándose en el concepto de transformación de modelos.

Es posible leer en línea la documentación de referencia de la API.