Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

El nuevo mundo de la generación de código (página 2)



Partes: 1, 2

Generalidades de los Sistemas
Expertos

Un avance firme y verdadero de la inteligencia
artificial lo constituyen sin dudas los sistemas
expertos. Estos pueden incorporar miles de reglas. A una
persona le
causaría trauma realizar una búsqueda de reglas
posibles para completar un problema y a la vez hacer que
concuerden estas con la posible solución, mientras sigue
en un papel el mejor de los caminos en un árbol de
búsqueda de soluciones
.

Los sistemas expertos realizan amablemente esta tarea;
mientras que la persona responde a las preguntas formuladas por
el sistema experto,
este busca recorriendo las ramas más interesantes del
árbol, hasta dar con la respuesta afín al problema,
o en su falta, la más parecida esta. Los sistemas expertos
tienen la ventaja frente a otros tipos de programas de
Inteligencia
Artificial, de proporcionar gran flexisivilidad a la hora de
incorporar nuevos conocimientos. Para ello solo tenemos que
introducir la nueva regla que deseemos hacer constar y…ya
está, sin necesidad de cambiar el funcionamiento propio
del programa. Los
sistemas expertos son "autoexplicativos", al contrario que en los
programas convencionales, en los que el
conocimiento como tal está encriptado junto al propio
programa en forma de lenguaje de
ordenador. Los expertos de I.A. dicen que los sistemas expertos
tienen un conocimiento
declarativo, mientras que en los demás programas es
procedural.

El Sistema Experto más adecuado para la
Generación inteligente

Bajo la plataforma .NET corre de manera silenciosa pero
veloz :ExpertCoder, un conjunto de herramientas
para escribir generadores de código.
Estas herramientas no son generadores de generadores; sino que se
apoya en un conjunto de librerías para escribir los
generadores.

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.

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

  • La claridad que aporta el uso de plantillas para la
    generación de código.
  • La potencia de
    la plataforma .NET, junto a su enorme librería de
    clases, brinda un gran poder de
    expresión al desarrollador.

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.

¿Qué es lo que más nos interesa en
la entrada del generador?

En un ambiente de
generación de código, no nos interesan la
posición ni el tamaño de los cuadros, ni tampoco el
grosor ni color de las
líneas u otros componentes del dibujo
grafico; nos interesan los conceptos que más profundamente
representan estas imágenes.
El conjunto de estos conceptos representados es lo que llamamos
Modelo, y es en definitiva el diseño
que el autor del diagrama quiso
representar gráficamente. Esto es lo que se convierte en
una parte importante de la materia prima
de nuestro sistema generador.

Veamos entonces el funcionamiento de este poderoso
Sistema Experto

La idea básica es crear un sistema experto,
escribiendo un conjunto de reglas y especificando las distintas
precedencias entre ellas. Estas reglas son evaluadas por un
motor de
ejecución, quien determina en base a las precedencias y al
estado de
activación de cada regla cual ejecutar.

El motor de ejecución provee un entorno, donde
hay información proveniente de tres fuentes:

  • Parámetros: estos se encuentran almacenados en
    ficheros de configuración.
  • Modelo de entrada: es el modelo que
    se quiere convertir.
  • Conocimiento deducido: el mismo sistema experto puede
    modificar su memoria activa.
    De esta manera se puede implementar un mecanismo de interacción indirecto entre
    reglas.

El entorno del motor mantiene referencias a:

  • El modelo de entrada.
  • El elemento actual del modelo de entrada.
  • El modelo de salida.
  • El elemento actual del modelo de salida.

Un generador típico estará compuesto por
dos tipos de reglas: reglas de navegación y reglas de
producción. Las reglas de navegación
se activan ante la presencia de un determinado tipo de elemento
en la entrada, y procede a "navegar" las relaciones de dicho
elemento, cambiando el elemento actual del modelo de entrada. Las
reglas de producción, al activarse ante un elemento en la
entrada ( y tal vez también cierto tipo de elemento a la
salida), aplican un algoritmo
escrito por el desarrollador para generar nodos a la salida
utilizando la información actual que se encuentra en la
entrada y la memoria
activa.

Una manera de hacer bien
las cosas

La forma de trabajo,
consiste en crear un sistema experto escribiendo un conjunto de
reglas y especificando las distintas precedencias entre ellas.
Estas reglas son evaluadas por un motor de ejecución (del
Sistema Experto), quien determina cual ejecutar en base a las
precedencias y al estado de activación de cada regla. Esto
resuelve la problemática planteada. Aunque la forma de
hacerlo esta planteada en lo adelante ninguna herramienta
individual ha logrado hacer uso eficiente de estos recursos que
provee la plataforma .NET

El motor de ejecución provee un entorno, donde
hay información proveniente de tres fuentes:

  • Parámetros: estos se encuentran almacenados en
    ficheros de configuración.
  • Modelo de entrada: es el modelo que se quiere
    convertir.
  • Conocimiento deducido: el mismo sistema experto puede
    modificar su memoria activa. De esta manera se puede
    implementar un mecanismo de interacción indirecto entre
    reglas.

El entorno del motor mantiene referencias a los
siguientes elementos:

  • El modelo de entrada.
  • El elemento actual del modelo de entrada.
  • El modelo de salida.
  • El elemento actual del modelo de salida.

Un generador típico estará compuesto por
dos tipos de reglas: reglas de navegación y reglas de
producción.

Las reglas de navegación se activan ante la
presencia de un determinado tipo de elemento en la entrada, y
procede a "navegar" las relaciones de dicho elemento, cambiando
el elemento actual del modelo de entrada.

Las reglas de producción, al activarse ante un
elemento en la entrada (y tal vez también ante cierto tipo
de elemento a la salida), aplican un algoritmo escrito por el
desarrollador para generar nodos a la salida utilizando la
información actual que se encuentra en la entrada y la
memoria activa.

Usando plantillas

Una plantilla es un documento de texto plano,
donde pueden escribirse algunos marcadores especiales. Estos
marcadores pueden luego ser reemplazados por valores
durante la ejecución de un programa. No hay un formato
predefinido para los marcadores; cada programador puede escoger
el esquema que más le guste o que más le
convenga.

Este documento, puede ser tratado por el sistema experto
de manera encapsulada haciendo tratamiento de ficheros que
agilizan el trabajo del
sistema experto, pues permiten agregar reglas que estan
previamente delimitadas.

La librería para manipular plantillas es
ExpertCoder.Templates.dll.

Lo novedoso aqui es que dentro de las plantillas se
pueden crear marcadores,un marcador puede reemplazarse por una
cadena de caracteres cualquiera, sin importar de donde se obtuvo
dicha cadena. Por lo tanto, el valor de un
marcador podría obtenerse a partir de otra plantilla.
Aprovechando esto es posible crear árboles
de plantillas, o sea, estructuras
jerárquicas donde una plantilla contiene a otras
plantillas.

Buscando una arquitectura que
soporte los propósitos

Cada cosa planteada anteriormente se convierte para
muchos en un reto, podemos encarar la tarea de escribir un
generador de código que genere a partir de un modelo un
sistema informático completo, incluyendo los mecanismos
para su compilación. Lo más eficiente en este caso
es escribir varios generadores, uno por cada capa.

La arquitectura del código generado estará
pensada de manera tal que todas sus piezas calcen a la
perfección, dejando lugar para que los programadores
añadan funcionalidad o restrinjan el comportamiento
del sistema. Deberán minimizarse, siempre que sea posible,
los casos donde el generador cree sólo la versión
inicial de un fichero que el programador pueda modificar; las
interacciones entre el código generado y el código
escrito a mano podrán ser mediante mecanimos de herencia o
composición.

Como ya se mencionó, es altamente probable que el
código generado haga uso de librerías escritas por
los mismos desarrolladores del generador.

No es el fin del
pensamiento
informático

La generación de código es sólo una
solución pragmática a la situación actual.
No implica abandonar todo pensamiento crítico, toda
esperanza de mejora en la creación de sofware. Creo que
vamos por buen camino: tenemos arquitectura, patrones, vamos
conociendo cada vez más, cómo generar software de calidad. Estamos,
creo, en una etapa ingeniosa de nuestra disciplina:
estamos ordenando conocimientos, clasificando datos, comenzando
a darnos cuenta de cuáles son los esquemas, relaciones,
problemas
esenciales. Vamos por la línea de Turing.

Conclusiones

Muchos son los caminos mediante los cuales los
desarrolladores pueden simplificar su trabajo y disminuir el
valor de la poderosa variable tiempo en los
procesos de
desarrollo del
software. Utilizar eficazmente estos recursos brindados por .NET
posibilita una abstracción en la programación necesaria para las técnicas
actuales de desarrollo.

El diseño de ste tipo de programas no puede dejar
de cumplir estos requisitos que garantizan lo novedoso, lo que lo
acerca al mundo d el ainteligenmcia artificial:

Aprender de la experiencia y aplicar el conocimiento
adquirido a nuevas situaciones.Hacer una determinación de
lo que es importante. Lograr hacer software que almacenan
conocimientos y haga inferencias.

Bibliografía

Russell, Russell, Stuart. Norvig, Peter (1996),
"Inteligencia Artificial. Un enfoque moderno". Editorial
Prentice Hall. 1996.

Giarritano, J. (2001), Sistemas expertos,
principios y programación, Internacional

Simons, G. (1985), Expert Systems and mycros,
Manchester National Computing Centre

Booch,Grady(1999), UML in Action,
Comunication of the ACM

Coleman Derek(1997) , UML:The Language of blueprints
for Software

http://www.aircenter.net

http://www.codegeneration.net/

Ayuda de Visual Estudio.NET

Biografía del autor

Lázaro Campoalegre Vera, estudiante de Ultimo
año de Ingeniería en Ciencias
Informáticas, Facultad de Entornos Virtuales, Universidad de
las Ciencias Informáticas (UCI), Ciudad de la Habana,
Cuba.

 

Lazaro Campoalegre Vera

Facultad de Entornos Virtuales

Universidad de las Ciencias
Informáticas

Ciudad de la Habana,Cuba, 22 de octubre de
2007.

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter