<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>0123-3033</journal-id>
<journal-title><![CDATA[Ingeniería y competitividad]]></journal-title>
<abbrev-journal-title><![CDATA[Ing. compet.]]></abbrev-journal-title>
<issn>0123-3033</issn>
<publisher>
<publisher-name><![CDATA[Facultad de Ingeniería, Universidad del Valle]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S0123-30332014000200009</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Una propuesta para la clasificación de la programación reflexiva orientada al desarrollo de sistemas autónomos]]></article-title>
<article-title xml:lang="en"><![CDATA[A proposal for classifying reflective programming aimed at the development of autonomous systems]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Moreno]]></surname>
<given-names><![CDATA[Francisco]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Jiménez]]></surname>
<given-names><![CDATA[Jovani]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Castañeda]]></surname>
<given-names><![CDATA[Sebastián]]></given-names>
</name>
<xref ref-type="aff" rid="A03"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Nacional de Colombia Facultad de Minas epartamento de Ciencias de la Computación y la Decisión]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<aff id="A02">
<institution><![CDATA[,Universidad Nacional de Colombia Facultad de Minas epartamento de Ciencias de la Computación y la Decisión]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<aff id="A03">
<institution><![CDATA[,Universidad Nacional de Colombia Facultad de Minas epartamento de Ciencias de la Computación y la Decisión]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>12</month>
<year>2014</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>12</month>
<year>2014</year>
</pub-date>
<volume>16</volume>
<numero>2</numero>
<fpage>91</fpage>
<lpage>104</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_arttext&amp;pid=S0123-30332014000200009&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_abstract&amp;pid=S0123-30332014000200009&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_pdf&amp;pid=S0123-30332014000200009&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[El fin de este trabajo es realizar una clasificación de la reflexión en niveles, con un enfoque orientado a alcanzar la programación autónoma. La reflexión es la capacidad de un programa de conocerse, examinarse y razonar para tomar acciones y modificarse a sí mismo en tiempo de compilación o ejecución. En este artículo, se proponen cuatro niveles de reflexión de acuerdo al grado de conocimiento, capacidad de modificación, tipo de modificaciones, tiempo en que se pueden realizar las modificaciones y la capacidad de razonamiento. Luego se analizan diferentes lenguajes de programación y se clasifican sobre dichos niveles, según la capacidad de reflexión que estos soportan. De cada nivel se presenta un ejemplo y finalmente se realizan una serie de experimentos donde se comparan con versiones equivalentes de programas no reflexivos. Los experimentos mostraron que aunque los programas reflexivos fueron más costosos, en cuanto a tiempo de ejecución y codificación, permiten una gran flexibilidad y más posibilidades para el diseño y desarrollo de aplicaciones. Siendo así la reflexividad el primer paso para llegar a desarrollar sistemas autónomos que puedan simular o igualar los sistemas biológicos]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[In this paper, we propose a classification of reflection in levels, with an approach aimed to reach autonomous programming. Reflection is the ability of a program to reason, know and examine itself to act and modify its state at compilation or runtime. In this article, it is proposed four reflection levels according to the level of knowledge, modification ability, types of modifications, time to perform modifications and the reasoning level. Then, it is analyzed different programming languages and they are classified on those levels, based on the reflection capacity that they support. Each classification level is exemplified and finally we present a series of experiments where we compare them with equivalent versions of non-reflective programs. Out experiments showed that although reflective programs were more expensive, in terms of execution time and coding, they offer great flexibility and great potential for the design and development of programs. Therefore, it is the reflexivity the first step to achieve the development of autonomous systems which can simulate or pair biological systems]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[Lenguajes reflexivos]]></kwd>
<kwd lng="es"><![CDATA[metaprogramación]]></kwd>
<kwd lng="es"><![CDATA[programación autónoma]]></kwd>
<kwd lng="es"><![CDATA[programación reflexiva]]></kwd>
<kwd lng="es"><![CDATA[sistemas autónomos]]></kwd>
<kwd lng="en"><![CDATA[Autonomous programming]]></kwd>
<kwd lng="en"><![CDATA[autonomous systems]]></kwd>
<kwd lng="en"><![CDATA[metaprogramming]]></kwd>
<kwd lng="en"><![CDATA[reflective programming]]></kwd>
<kwd lng="en"><![CDATA[reflective languages]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[   <font size="2" face="Verdana, Geneva, sans-serif">      <p align="center"><font size="4"><b>Una propuesta para la clasificaci&oacute;n de la programaci&oacute;n reflexiva orientada al desarrollo de sistemas aut&oacute;nomos</b></font></p>      <p align="center"><font size="3"><b>A proposal for classifying reflective programming aimed at the development of autonomous systems</b></font></p>      <p><i>Francisco Moreno</i>    <br> E-mail: <a href="mailto:fjmoreno@unal.edu.co">fjmoreno@unal.edu.co</a></p>      <p><i>Jovani Jim&eacute;nez</i>    <br> E-mail: <a href="mailto:jajimen1@unal.edu.co">jajimen1@unal.edu.co</a></p>      <p><i>Sebasti&aacute;n Casta&ntilde;eda</i>    <br> E-mail: <a href="mailto:sebcas23@gmail.com">sebcas23@gmail.com</a></p>      <p>Departamento de Ciencias de la Computaci&oacute;n y la Decisi&oacute;n, Facultad de Minas, Universidad Nacional de Colombia, Colombia</p>      ]]></body>
<body><![CDATA[<p><b>Eje etm&aacute;tico:</b> INGENIERIA DE SISTEMAS / SYSTEMS ENGINEERING    <br> Recibido: 05 de Febrero de 2013    <br> Aceptado: Junio 7 de 2014</p>  <hr>      <p><font size="3"><b>Resumen</b></font></p>      <p>El fin de este trabajo es realizar una clasificaci&oacute;n de la reflexi&oacute;n en niveles, con un enfoque orientado a alcanzar la programaci&oacute;n aut&oacute;noma. La reflexi&oacute;n es la capacidad de un programa de conocerse, examinarse y razonar para tomar acciones y modificarse a s&iacute; mismo en tiempo de compilaci&oacute;n o ejecuci&oacute;n. En este art&iacute;culo, se proponen cuatro niveles de reflexi&oacute;n de acuerdo al grado de conocimiento, capacidad de modificaci&oacute;n, tipo de modificaciones, tiempo en que se pueden realizar las modificaciones y la capacidad de razonamiento. Luego se analizan diferentes lenguajes de programaci&oacute;n y se clasifican sobre dichos niveles, seg&uacute;n la capacidad de reflexi&oacute;n que estos soportan. De cada nivel se presenta un ejemplo y finalmente se realizan una serie de experimentos donde se comparan con versiones equivalentes de programas no reflexivos. Los experimentos mostraron que aunque los programas reflexivos fueron m&aacute;s costosos, en cuanto a tiempo de ejecuci&oacute;n y codificaci&oacute;n, permiten una gran flexibilidad y m&aacute;s posibilidades para el dise&ntilde;o y desarrollo de aplicaciones. Siendo as&iacute; la reflexividad el primer paso para llegar a desarrollar sistemas aut&oacute;nomos que puedan simular o igualar los sistemas biol&oacute;gicos.</p>      <p><b>Palabras clave:</b> Lenguajes reflexivos, metaprogramaci&oacute;n, programaci&oacute;n aut&oacute;noma, programaci&oacute;n reflexiva, sistemas aut&oacute;nomos.</p>  <hr>      <p><font size="3"><b>Abstract</b></font></p>      <p>In this paper, we propose a classification of reflection in levels, with an approach aimed to reach autonomous programming. Reflection is the ability of a program to reason, know and examine itself to act and modify its state at compilation or runtime. In this article, it is proposed four reflection levels according to the level of knowledge, modification ability, types of modifications, time to perform modifications and the reasoning level. Then, it is analyzed different programming languages and they are classified on those levels, based on the reflection capacity that they support. Each classification level is exemplified and finally we present a series of experiments where we compare them with equivalent versions of non-reflective programs. Out experiments showed that although reflective programs were more expensive, in terms of execution time and coding, they offer great flexibility and great potential for the design and development of programs. Therefore, it is the reflexivity the first step to achieve the development of autonomous systems which can simulate or pair biological systems.</p>      <p><b>Keywords:</b> Autonomous programming, autonomous systems, metaprogramming, reflective programming, reflective languages.</p>  <hr>      <p><font size="3"><b>1. Introducci&oacute;n</b></font></p>      ]]></body>
<body><![CDATA[<p> Los sistemas aut&oacute;nomos sensan, obtienen los cambios de su entorno y se modifican a s&iacute; mismos con el fin de satisfacer nuevos requisitos (Rich &amp; Waters, 1988; Parashar &amp; Hariri, 2005). La naturaleza ofrece ejemplos de sistemas aut&oacute;nomos, como por ejemplo el cuerpo y ciertos &oacute;rganos de los seres vivos que ajustan y modifican su funcionamiento para asegurar su supervivencia. Por ejemplo, consid&eacute;rese el coraz&oacute;n cuya funci&oacute;n esencial es transportar la sangre a todo el cuerpo. Cuando el cuerpo aumenta su ritmo de funcionamiento, por ejemplo al correr, se necesita mayor cantidad de ox&iacute;geno que cuando se est&aacute; en reposo; por lo tanto, el coraz&oacute;n aumenta su ritmo, bombea m&aacute;s sangre y as&iacute; se suple esta necesidad. La piel es otro ejemplo: &eacute;sta reacciona y procura mantener una temperatura adecuada de acuerdo con el ambiente.</p>      <p>Un sistema aut&oacute;nomo puede ser &uacute;til en diversos dominios. Por ejemplo, consid&eacute;rese una aplicaci&oacute;n de software. Usualmente, cuando surgen condiciones no consideradas por el programa se requiere de intervenci&oacute;n humana para evitar fallos potenciales y satisfacer los nuevos requisitos. Sin embargo, si la aplicaci&oacute;n fuese aut&oacute;noma, &eacute;sta podr&iacute;a detectar y corregir las fallas por s&iacute; misma. Otros dominios donde se puede aplicar la programaci&oacute;n aut&oacute;noma son la rob&oacute;tica, dom&oacute;tica y en aplicaciones industriales y militares. En particular, en la rob&oacute;tica ya existen algunos trabajos (Fujita &amp; Kitano, 1998; Massa <I>et al</I>, 2007; Sariff &amp; Buniyamin, 2006) donde los robots exhiben un comportamiento aut&oacute;nomo: toman decisiones seg&uacute;n las condiciones en las que se encuentren.</p>     <p>Las principales dificultades para desarrollar este tipo de sistemas son la representaci&oacute;n del conocimiento y el razonamiento. Un sistema aut&oacute;nomo debe tomar y procesar los datos procedentes de su entorno (representaci&oacute;n del conocimiento), tomar decisiones, distinguir entre un funcionamiento correcto y uno incorrecto, aprender de situaciones pasadas y plantear una soluci&oacute;n si hay nuevos requisitos (razonamiento). </p>     <p>La programaci&oacute;n reflexiva (Salavert &amp; P&eacute;rez, 2000; c2.com, 2014; Sobel &amp; Friedman, 1996) ofrece elementos que permiten la creaci&oacute;n de programas aut&oacute;nomos. La reflexi&oacute;n es la capacidad de un programa para modificar su estado en tiempo de ejecuci&oacute;n. Tiene dos aspectos: introspecci&oacute;n e intercesi&oacute;n. La introspecci&oacute;n es la habilidad de un programa para observar y razonar sobre su estado. La intercesi&oacute;n es la habilidad de un programa para modificar y agregarse nuevo comportamiento (c&oacute;digo) (Demers &amp; Malenfant, 1995). Lenguajes de programaci&oacute;n como Java, C++, DotNet, Python y PHP entre otros, soportan aspectos esenciales de la reflexi&oacute;n (Martin &amp; S&aacute;nchez, 1994; Albahari&amp; Albahari, 2012; Schlossnagle, 2008; Lutz, 2013; Summerfield, 2009). </p>     <p>Dado el incremento de las capacidades de c&oacute;mputo y las posibilidades de comunicaci&oacute;n, los problemas a los que se enfrentaba el hombre han cambiado tambi&eacute;n y se han hecho m&aacute;s complejos, requiriendo soluciones m&aacute;s agiles y en las cuales no se hubiera podido pensar anteriormente. En la actualidad se requiere software que pueda ser concebido a partir de la necesidad, sistemas que puedan aprender de su entorno y tomar decisiones; sistemas que puedan operar de forma aut&oacute;noma, razonar, adaptarse, corregir errores, modificarse y operar sin intervenci&oacute;n humana.</p>     <p>Este ha sido el sue&ntilde;o humano, sistemas con requerimientos cambiantes que se aproximen al comportamiento de los sistemas biol&oacute;gicos (Parashar &amp; Hariri, 2005; Rich &amp; Waters1988), pero el dise&ntilde;o de la soluci&oacute;n en s&iacute; para requisitos est&aacute;ticos ya es un problema para el que se ha hecho necesario plantear metodolog&iacute;as y marcos de trabajo en la industria del software. Lo anterior ha hecho tambi&eacute;n pensar en formas y algoritmos de dise&ntilde;os para programas aut&oacute;nomos (Kant, 1985) al igual que formas de enfrentar el problema con t&eacute;cnicas de inteligencia artificial, como por ejemplo programaci&oacute;n evolutiva, modelos de grafos, redes neuronales, entre otros (Kang, <I>et al</I>., 2006; Osella, <I>et al</I>., 2006)</p>     <p>Para llevar estas ideas a la realidad es necesario un modelo y un lenguaje de programaci&oacute;n que permita materializar y poner en pr&aacute;ctica el ideal propuesto. La programaci&oacute;n reflexiva es quien tiene un enfoque m&aacute;s acercado al prop&oacute;sito de la programaci&oacute;n aut&oacute;noma, permitiendo desarrollar sistemas que puedan conocerse a s&iacute; mismos, tomar acciones y ser adaptativos (Sonntag, 1994). Cantwell (1982) introdujo la noci&oacute;n de reflexi&oacute;n computacional en los lenguajes de programaci&oacute;n como "sistemas que act&uacute;an sobre s&iacute; mismos" y explico c&oacute;mo construir un sistema computacional que "razone" sobre sus propios procesos de inferencia (Smith, 1982). Para conseguirlo se requiere que el lenguaje de programaci&oacute;n se apoye en una estructura de representaci&oacute;n (Maes, 1987) la cual contiene la meta informaci&oacute;n de los componentes del software que se ejecuta, la cual debe ser accesible por el software.</p>     <p>Basado en lo anterior, en nuestro art&iacute;culo se propone una clasificaci&oacute;n que permite evaluar el grado de interacci&oacute;n entre los programas y la meta-informaci&oacute;n; es decir, desde formas restringidas de reflexi&oacute;n (mecanismos simples de inspecci&oacute;n) hasta formas m&aacute;s libres (modificaci&oacute;n de un programa por s&iacute; mismo sin intervenci&oacute;n del programador). Esta clasificaci&oacute;n puede ayudar a determinar el estado actual de la reflexi&oacute;n en algunos lenguajes de programaci&oacute;n, lo mismo que a identificar los obst&aacute;culos que se deben superar. De hecho, en (Kephart &amp; Chess, 2003) se pone de manifiesto que la computaci&oacute;n aut&oacute;noma jugar&aacute; papel clave para afrontar la crisis de la complejidad del software (Horn, P. (2001); es decir, los sistemas llegar&aacute;n a ser tan complejos que ser&aacute;n pr&aacute;cticamente imposible optimizarlos, mantenerlos y coordinarlos.</p>     <p>El art&iacute;culo est&aacute; distribuido de la siguiente manera: el segundo cap&iacute;tulo inicia presentando los antecedentes del tema para luego expresar la clasificaci&oacute;n realizada, exponiendo cada uno de los cuatro niveles de reflexi&oacute;n propuestos. A su vez, se muestran programas para ejemplificar los tres primeros niveles, los cuales son soportados en los lenguajes de programaci&oacute;n actuales. El cuarto nivel de reflexi&oacute;n es asociado a la capacidad de un programa de razonar y modificarse a s&iacute; mismo; para alcanzar este nivel, se presenta una propuesta con la que se pretende alcanzar tal objetivo. Al finalizar el segundo cap&iacute;tulo se realiza un an&aacute;lisis de algunos lenguajes de programaci&oacute;n m&aacute;s usados, ubic&aacute;ndolos en los niveles de reflexi&oacute;n definidos. El cap&iacute;tulo tres ense&ntilde;a los experimentos realizados indicando los resultados obtenidos para cada una de las pruebas. Finalmente se muestran las conclusiones y las referencias bibliogr&aacute;ficas.</p>      <p><font size="3"><B>2. Materiales y m&eacute;todos</b></font></p>      ]]></body>
<body><![CDATA[<p> En este cap&iacute;tulo se presentan los antecedentes del tema y luego los cuatro niveles de reflexi&oacute;n existentes en la programaci&oacute;n aut&oacute;noma, indicando en cada uno de ellos, una serie de ejemplos. Tambi&eacute;n se presentan algunos lenguajes de programaci&oacute;n y el nivel de reflexi&oacute;n que soportan. La metodolog&iacute;a para la clasificaci&oacute;n de los niveles inici&oacute; estudiando diferentes lenguajes de programaci&oacute;n y compar&aacute;ndolos contra lo que se plantea como prop&oacute;sito de la programaci&oacute;n reflexiva. Se encontr&oacute; que no todos soportaban en completitud la teor&iacute;a de la programaci&oacute;n reflexiva, pero si caracter&iacute;sticas de esta, tales como la informaci&oacute;n que permit&iacute;a conocer, en el momento que se pod&iacute;a obtener, en compilaci&oacute;n o en ejecuci&oacute;n, y los tipos de modificaciones que permit&iacute;a realizar. Tomando estas caracter&iacute;sticas se propusieron los niveles de reflexi&oacute;n, pasando desde lo m&aacute;s simple, conocimiento de s&iacute; mismo, el primer nivel, hasta lo m&aacute;s complejo, aprendizaje y autocorrecci&oacute;n, el cuarto nivel, el cual abarca la completitud de la programaci&oacute;n reflexiva. Luego los lenguajes fueron organizados en dichos niveles seg&uacute;n las caracter&iacute;sticas que soportaban de reflexi&oacute;n.</p>      <p><font size="3">2.1 Antecedentes</font></p>      <p> En la revisi&oacute;n de la literatura realizada no se encontr&oacute; informaci&oacute;n asociada a casos similares de "clasificaci&oacute;n de los niveles" de reflexi&oacute;n. Los autores muestran a lo largo del trabajo, la clasificaci&oacute;n realizada y en la <a href="#tab1">Tabla 1</a> el nivel de reflexi&oacute;n los lenguajes m&aacute;s conocidos de acuerdo a la propuesta propia. Es bueno aclarar que por medio de BCEL, un proyecto desarrollado por Jakarta (BCEL, 2014), se puede desarrollar un programa como el presentado en el Ejemplo 6. BCEL aprovecha el siguiente aspecto de Java: en Java se crea un c&oacute;digo llamado BYTECODE, el cual es un c&oacute;digo intermedio entre el c&oacute;digo propio de la m&aacute;quina y el c&oacute;digo fuente. El BYTECODE es interpretado por la m&aacute;quina virtual de cada sistema operativo. BCEL permite ingresar c&oacute;digo al BYTECODE as&iacute;: BCEL toma el archivo con extensi&oacute;n .class (archivo que genera Java, donde est&aacute; el BYTECODE) e incorpora all&iacute; el c&oacute;digo nuevo. Algunas de las clases de BCEL que se pueden usar para desarrollar el programa son ClassGen, MethodGen, ConstantPoolGen, InstructionList, InstructionFactory y LocalVariableGen. Estas clases permiten modificar el BYTECODE, de esta forma se puede lograr el tercer nivel de reflexi&oacute;n.</p>      <p align="center"><a name="tab1"><img src="img/revistas/inco/v16n2/v16n2a09-tab1.jpg"></a></p>      <p><font size="3">2.2 Niveles de reflexi&oacute;n</font></p>      <p><font size="3">2.2.1 Primer nivel de reflexi&oacute;n</font></p>      <p>El primer nivel de reflexi&oacute;n se refiere a la capacidad de un programa de obtener informaci&oacute;n de s&iacute; mismo en tiempo de ejecuci&oacute;n. Por ejemplo, en tiempo de ejecuci&oacute;n un programa puede obtener informaci&oacute;n sobre los atributos y m&eacute;todos de una clase. El programa tambi&eacute;n puede crear (instanciar) objetos de dicha clase e invocar sus m&eacute;todos. Consid&eacute;rese inicialmente el Ejemplo 1 que no usa reflexi&oacute;n.</p>  <img src="img/revistas/inco/v16n2/v16n2a09-ej1.jpg">      <p>Donde la clase Base solo tiene un atributo s y en la clase Main solo se declara el m&eacute;todo main donde se crea una instancia de la clase Base llamada b. N&oacute;tese que en el programa se declara la clase Base antes de ser compilada. Por otro lado, por medio de la API (Application Programming Interface) Reflection de Java (JAVATM, 2014), es posible obtener en tiempo de ejecuci&oacute;n informaci&oacute;n sobre una clase y crear instancias de esta. Esta capacidad se considera como un primer nivel de reflexi&oacute;n tal y como lo ilustra el Ejemplo 2.</p>  <img src="img/revistas/inco/v16n2/v16n2a09-ej2.jpg">      <p>En el Ejemplo 2 se declara una clase Ejemplo_Primer_Nivel_Reflexion con su m&eacute;todo main. En la l&iacute;nea 4 se solicita al usuario que ingrese el nombre de la clase que desea instanciar y a continuaci&oacute;n, en la l&iacute;nea 5, el m&eacute;todo forName carga en tiempo de ejecuci&oacute;n la definici&oacute;n de la clase ingresada. Si la definici&oacute;n no se encuentra, se producir&aacute; un error. De lo contrario, se crea una instancia de la clase en la l&iacute;nea 7. Con el fin de ilustrar una posible utilidad de este tipo de programaci&oacute;n consid&eacute;rese el Ejemplo 3 donde no se usa reflexi&oacute;n.</p>  <img src="img/revistas/inco/v16n2/v16n2a09-ej3.jpg">      <p>En este ejemplo, dependiendo de la opci&oacute;n ingresada por el usuario, se instanciar&aacute; una de las cinco clases definidas. N&oacute;tese que con el uso de reflexi&oacute;n, ver Ejemplo 2, se logra el mismo resultado.</p>     ]]></body>
<body><![CDATA[<p>La API Reflection de Java tambi&eacute;n permite obtener la informaci&oacute;n de los m&eacute;todos y atributos de una clase, obtener y asignar valores a sus atributos, invocar sus m&eacute;todos, entre otras acciones. Sin embargo, el desempe&ntilde;o de un programa de este tipo puede ser m&aacute;s costoso que su correspondiente versi&oacute;n no reflexiva. Adem&aacute;s, este es un tipo de reflexi&oacute;n bajo por que el programa no modifica su c&oacute;digo (aunque las definiciones de las clases a instanciar s&iacute; podr&iacute;an cambiar). </p>      <p><font size="3">2.2.2 Segundo nivel de reflexi&oacute;n</font></p>      <p> El segundo nivel de reflexi&oacute;n se refiere a la capacidad de un programa de recibir y ejecutar c&oacute;digo en tiempo de ejecuci&oacute;n. Por ejemplo, el usuario puede ingresar la definici&oacute;n de una clase y esta ser instanciada por el programa. Consid&eacute;rese el programa en pseudoc&oacute;digo del Ejemplo 4 que resume los pasos para ingresar en tiempo de ejecuci&oacute;n la definici&oacute;n de una clase, instanciar un objeto de &eacute;sta e invocar uno de sus m&eacute;todos.</p>  <img src="img/revistas/inco/v16n2/v16n2a09-ej4.jpg">      <p>Aunque el Ejemplo 4 tambi&eacute;n se puede llegar a desarrollar en Java por medio de la API mencionada, por facilidades de implementaci&oacute;n e ilustraci&oacute;n se presenta en el lenguaje de programaci&oacute;n PL/SQL de Oracle en el Ejemplo 5.</p>  <img src="img/revistas/inco/v16n2/v16n2a09-ej5.jpg">      <p>En el Ejemplo 5 se crea un procedimiento en PL/SQL que recibe como par&aacute;metros el nombre de la clase a crear nombreClase, la especificaci&oacute;n especificacionClase (atributos y prototipos de los m&eacute;todos), la implementaci&oacute;n de los m&eacute;todos implementacionClase y el c&oacute;digo de ejecuci&oacute;n ejecucionMetodo. En este &uacute;ltimo par&aacute;metro, se instancia un objeto de la clase y se invoca uno de sus m&eacute;todos (esta acci&oacute;n se puede ejecutar en PL/SQL gracias a la sentencia EXECUTE IMMEDIATE). </p>     <p>Un ejemplo del contenido de los par&aacute;metros se muestra a continuaci&oacute;n. </p>  <img src="img/revistas/inco/v16n2/v16n2a09-ej5-1.jpg">      <p>Al ejecutar el procedimiento Ejemplo_Segundo_Nivel_Reflexion del Ejemplo 5 con los par&aacute;metros anteriores, el c&oacute;digo <I>generado y ejecutado</I> es el siguiente.</p>  <img src="img/revistas/inco/v16n2/v16n2a09-ej5-2.jpg">      <p><font size="3">2.2.3 Tercer nivel de reflexi&oacute;n</font></p>      <p> El tercer nivel de reflexi&oacute;n se refiere a la capacidad de un programa de modificar su propio c&oacute;digo en tiempo de ejecuci&oacute;n. La diferencia con el segundo nivel de reflexi&oacute;n es que el c&oacute;digo del programa que est&aacute; en ejecuci&oacute;n se modifica a s&iacute; mismo a ra&iacute;z de la intervenci&oacute;n del usuario. </p>      <p>En el Ejemplo 6 se ilustra el tercer nivel de reflexi&oacute;n: el usuario puede insertar, modificar o eliminar c&oacute;digo de un programa en tiempo de ejecuci&oacute;n. </p>  <img src="img/revistas/inco/v16n2/v16n2a09-ej6.jpg">      ]]></body>
<body><![CDATA[<p>Sup&oacute;ngase que cuando se defini&oacute; esta clase no se consideraron determinados atributos. Por medio de un programa como el publicado en el Ejemplo 7 (correspondiente al pseudoc&oacute;digo del Ejemplo 6), el usuario puede en tiempo de ejecuci&oacute;n incluir en la especificaci&oacute;n de la clase Empleado los atributos sexo y direcci&oacute;n y los m&eacute;todos asignar (el de siete par&aacute;metros) y actualizar Salario.</p>    <img src="img/revistas/inco/v16n2/v16n2a09-ej7.jpg">      <p><font size="3">2.2.4 Cuarto nivel de reflexi&oacute;n</font></p>      <p> El cuarto nivel de reflexi&oacute;n se refiere a la capacidad de un programa de modificarse a s&iacute; mismo de acuerdo con los cambios de su entorno. Aunque en el tercer nivel de reflexi&oacute;n es posible modificar en tiempo de ejecuci&oacute;n el c&oacute;digo del programa gracias a la intervenci&oacute;n del usuario, en el cuarto nivel de reflexi&oacute;n se espera que el programa tome las decisiones necesarias por s&iacute; mismo para afrontar los cambios que eventualmente surjan (nuevos requisitos).</p>     <p>Para lograr un sistema como el anterior se propone la siguiente arquitectura, v&eacute;ase la <a href="#fig1">Figura 1(a)</a>, la cual incluye los siguientes m&oacute;dulos:</p>      <p align="center"><a name="fig1" href="img/revistas/inco/v16n2/v16n2a09-fig1-grande.jpg"><img border="0" src="img/revistas/inco/v16n2/v16n2a09-fig1.jpg"></a></p>      <blockquote>      <p>&bull; <I>M&oacute;dulo de razonamiento</I>: toma las decisiones en el sistema. Decide cu&aacute;ndo, c&oacute;mo y cu&aacute;les modificaciones se deben llevar a cabo sobre el sistema.</p>     <p>&bull; <I>M&oacute;dulo de conocimiento</I>: almacena y suministra el conocimiento al m&oacute;dulo de razonamiento. El conocimiento puede ser adquirido por experiencia, por la informaci&oacute;n suministrada por el usuario o por otros medios.</p>     <p>&bull; <I>M&oacute;dulo de Ejecuci&oacute;n:</I> ejecuta el sistema principal, es decir, la funci&oacute;n principal para la cual fue desarrollado el sistema, por ejemplo un sistema de vigilancia, un sistema de control autom&aacute;tico para un robot o una aplicaci&oacute;n de escritorio, entre otras.</p> </blockquote>      <p><a href="#fig1">Figura 1.</a> (a) M&oacute;dulos para un sistema que soporta el cuarto nivel de reflexi&oacute;n. (b) Arquitectura detallada de un sistema que soporta el cuarto nivel de reflexi&oacute;n. Construcci&oacute;n propia</p>     ]]></body>
<body><![CDATA[<p>En la <a href="#fig1">Figura 1(b)</a> se muestra un diagrama del funcionamiento m&aacute;s detallado del sistema. Los tres m&oacute;dulos se representan luego del bloque de inicio del programa. Las flechas continuas delgadas representan el flujo del programa, las flechas continuas gruesas representan accesos a la base de conocimiento y las flechas punteadas representan flujos de datos.</p>      <p>El m&oacute;dulo de ejecuci&oacute;n inicia con la toma y procesamiento de datos, los cuales se almacenan en la base de conocimiento, para su posterior an&aacute;lisis. Luego se pregunta si han ocurrido errores, si no los hay, los resultados se almacenan en la base de conocimiento y se asocian con los datos tomados. Si hubo errores, estos se analizan en el m&oacute;dulo de razonamiento, junto con los datos tomados y se procede a buscar la soluci&oacute;n al problema. Cuando se encuentra la soluci&oacute;n, se hace un informe el cual incluye el error, los datos que lo generaron, el an&aacute;lisis realizado y la soluci&oacute;n. Este informe se almacena en la base de conocimiento, se modifica el programa y se contin&uacute;a con su ejecuci&oacute;n.</p>     <p><B>Ejemplo 8.</b></p>     <p> Consid&eacute;rese un robot con un sistema de locomoci&oacute;n de tipo insecto (n extremidades) que va a explorar un ambiente del cual se desconocen todas las propiedades de su superficie. </p>     <p>La programaci&oacute;n base del robot, contiene los tres m&oacute;dulos anteriores, donde el m&oacute;dulo de ejecuci&oacute;n tiene la informaci&oacute;n esencial para explorar una superficie plana sin obst&aacute;culos. Sin embargo, la superficie podr&iacute;a ser irregular y tener diferentes tipos de obst&aacute;culos y al robot no se le ha indicado la forma de eludir los obst&aacute;culos que se presentar&aacute;n en el camino.</p>     <p> Cuando el robot se libera en el ambiente descrito, el m&oacute;dulo de conocimiento adquiere la informaci&oacute;n del entorno y la transmite al m&oacute;dulo de razonamiento el cual debe determinar la forma adecuada de desplazamiento, seg&uacute;n la superficie que identifique, y encontrar la forma de sortear los obst&aacute;culos que se presenten en el camino con el fin de cumplir con el objetivo asignado. Incluso si el robot perdiese una de sus extremidades, el mismo solucionar&iacute;a el problema, encontrando la forma de desplazarse con las extremidades restantes. Usando el modelo planteado, el robot podr&iacute;a solucionar varios problemas para los cuales no fue programado inicialmente, modificando su comportamiento y adapt&aacute;ndose a las condiciones del medio.</p>      <p><font size="3">2.2.5 Lenguajes de programaci&oacute;n</font></p>      <p> En la <a href="#tab1">Tabla 1</a> se presentan algunos lenguajes de programaci&oacute;n y se describe el nivel de reflexi&oacute;n que soportan.</p>      <p><font size="3"><B>3. Resultados de los experimentos y discusi&oacute;n</b></font></p>      <p> Las pruebas se realizaron en un equipo con procesador AMD Phenom x3 de 2.3 GHz y 2 GB de memoria RAM y con sistema operativo Windows XP. Para los experimentos se trabaj&oacute; con el lenguaje Java, JDK 1.6.0.26, sistema operativo Linux Ubuntu 10.10. Se us&oacute; la librer&iacute;a java.lang.reflect (librer&iacute;a est&aacute;ndar del lenguaje Java para reflexi&oacute;n). Se consideraron las siguientes pruebas. En la Prueba 1 se implementaron los programas de los ejemplos 2 y 3; y gradualmente se aument&oacute; el n&uacute;mero de clases posibles a instanciar en ambos programas. Esto implic&oacute; para el Ejemplo 2 aumentar el n&uacute;mero de clases en el paquete donde se encontraba la clase Ejemplo_Primer_Nivel_Reflexion y para el Ejemplo 3 incorporar la definici&oacute;n de las nuevas clases (antes de la l&iacute;nea 6) y aumentar en forma correspondiente el n&uacute;mero de opciones en la estructura if &hellip; else if. Cada una de las clases incorporadas conten&iacute;a solo un m&eacute;todo sin par&aacute;metros. Los resultados se muestran en la <a href="#tab2">Tabla 2(a)</a>. N&oacute;tese que el programa no reflexivo (Ejemplo 3) se ejecut&oacute; en promedio 1.5 veces m&aacute;s r&aacute;pido que el programa reflexivo (Ejemplo 2). Sin embargo, ambos programas mostraron un comportamiento escalable, es decir, el aumento del n&uacute;mero de clases no aument&oacute; significativamente su tiempo de ejecuci&oacute;n.</p>      ]]></body>
<body><![CDATA[<p align="center"><a name="tab2"><img src="img/revistas/inco/v16n2/v16n2a09-tab2.jpg"></a></p>      <p>En la Prueba 2 se analizaron de nuevo los programas de los ejemplos 2 y 3, pero esta vez solo se consider&oacute; una clase a instanciar a la cual se le aument&oacute; gradualmente el n&uacute;mero de m&eacute;todos posibles a invocar. Por simplicidad, cada uno de los m&eacute;todos incorporados a la clase carec&iacute;a de par&aacute;metros. Los resultados se muestran en la <a href="#tab2">Tabla 2(b)</a>. El programa no reflexivo (Ejemplo 3) se ejecut&oacute; en promedio 1.7 veces m&aacute;s r&aacute;pido que el programa reflexivo (Ejemplo 2) y se mantuvo la propiedad de escalabilidad en ambos programas.</p>      <p>En la Prueba 3 se analizaron de nuevo los programas de los ejemplos 2 y 3, pero esta vez se analiz&oacute; como afectaba el n&uacute;mero de par&aacute;metros al invocar un m&eacute;todo. Solo se consider&oacute; una clase a instanciar con un solo m&eacute;todo al cual se le aument&oacute; gradualmente el n&uacute;mero de par&aacute;metros. Los resultados se muestran en la <a href="#tab2">Tabla 2(a)</a>. El programa no reflexivo (Ejemplo 3) ejecut&oacute; en promedio 2.8 veces m&aacute;s r&aacute;pido que el programa reflexivo (Ejemplo 2) y se mantuvo de nuevo la propiedad de escalablidad en ambos programas.</p>      <p><a href="#tab2">Tabla 2</a>. (a) Resultados para la Prueba 3: Invocaci&oacute;n de un m&eacute;todo de una clase variando el n&uacute;mero de par&aacute;metros. (b) Resultados para la Prueba 4: Instanciamiento de una clase e invocaci&oacute;n de uno de sus m&eacute;todos. Valores en ns. Construcci&oacute;n propia</p>      <p>En la Prueba 4 se combinaron las pruebas 1 y 2, es decir, se aument&oacute; gradualmente el n&uacute;mero de clases y el n&uacute;mero de m&eacute;todos de cada clase y se instanci&oacute; una clase y se invoc&oacute; uno de sus m&eacute;todos. Los resultados se muestran en la <a href="#tab2">Tabla 2(b)</a>. El programa no reflexivo (Ejemplo 3) ejecut&oacute; en promedio 2.4 veces m&aacute;s r&aacute;pido que el programa reflexivo (Ejemplo 2) y se mantuvo de nuevo la propiedad de escalabilidad en ambos programas.</p>      <p>En la <a href="#fig2">Figura 2(a)</a> se resumen los resultados de las cuatro pruebas.</p>      <p align="center"><a name="fig2"><img src="img/revistas/inco/v16n2/v16n2a09-fig2.jpg"></a></p>      <p>La prueba 5 correspondi&oacute; al Ejemplo 5 y se desarroll&oacute; en Oracle 11g mediante su lenguaje de programaci&oacute;n PL/SQL. Se compar&oacute; el programa reflexivo del Ejemplo 5 con el no reflexivo instanciando una clase e invocando su &uacute;nico m&eacute;todo. Las instrucciones del programa no reflexivo se muestran a continuaci&oacute;n. Los resultados se muestran en la <a href="#fig2">Figura 2(b)</a>.</p>  <img src="img/revistas/inco/v16n2/v16n2a09-ej8.jpg">      <p>Al igual que en las pruebas anteriores, se observ&oacute; que el programa no reflexivo fue m&aacute;s r&aacute;pido que el reflexivo.</p>       <p><font size="3"><B>4. Conclusiones </b></font></p>      ]]></body>
<body><![CDATA[<p> Con el fin de alcanzar el objetivo de desarrollar sistemas aut&oacute;nomos y llevarlos a la realidad, se realiz&oacute; un estudio de las herramientas existentes al d&iacute;a de hoy que permitieran implementar un sistema aut&oacute;nomo. En la b&uacute;squeda, se encontr&oacute; la programaci&oacute;n reflexiva, que por sus caracter&iacute;sticas y teor&iacute;a se asemeja al prop&oacute;sito de la programaci&oacute;n aut&oacute;noma, por lo que se tom&oacute; como base para la realizaci&oacute;n de sistemas aut&oacute;nomos, la programaci&oacute;n reflexiva. Luego, se procedi&oacute; a realizar una investigaci&oacute;n de su alcance en diversos lenguajes de programaci&oacute;n para el momento actual. Encontrando que muchos lenguajes la implementaban, pero con restricciones y solo cierta parte de la filosof&iacute;a de la reflexi&oacute;n. Por lo que se procedi&oacute; a realizar una clasificaci&oacute;n de la reflexi&oacute;n en niveles, y luego los lenguajes organizados en estos niveles, acentuando la capacidad que se tiene en la actualidad para desarrollar un sistema aut&oacute;nomo haciendo uso de los lenguajes de programaci&oacute;n existentes.</p>      <p>Para la comprensi&oacute;n de cada nivel planteado, se realizaron ejemplos, de c&oacute;mo se puede usar, implementar o ver reflejado tal nivel en un lenguaje y finalmente, se realizaron pruebas de rendimiento de un programa construido de forma tradicional contra un programa construido usando reflexi&oacute;n, en el que el resultado fue el esperado, la ejecuci&oacute;n de la aplicaci&oacute;n desarrollada de forma tradicional aventajo la aplicaci&oacute;n desarrollada usando reflexi&oacute;n.</p>      <p>Sin embargo y pese al rendimiento, el ver los ejemplos y entendiendo las caracter&iacute;sticas que presenta la reflexi&oacute;n, se abren un sinf&iacute;n de posibilidades en el dise&ntilde;o y desarrollo de software, que permiten solucionar problemas que dif&iacute;cilmente se pueden resolver, si fuese posible, con el uso de programaci&oacute;n tradicional. Pero se debe prestar especial atenci&oacute;n a su uso indiscriminado, pues como tal es una gran herramienta, pero si es usada en problemas los cuales pueden ser solucionados con programaci&oacute;n tradicional o su uso en el futuro del software no presenta mayor ventaja, puede convertirse en una mala pr&aacute;ctica hacer abuso de esta, pues como se vio en los ejemplos y en las comparativas, la implementaci&oacute;n es compleja y aumenta con el aumento de nivel, haciendo m&aacute;s complejo el c&oacute;digo y dif&iacute;cil de mantener y su rendimiento es bajo respecto al programa no reflexivo.</p>      <p>Se determin&oacute; dentro del estudio realizado que dentro de los objetivos planteados por la programaci&oacute;n reflexiva, ninguno de los lenguajes existentes permit&iacute;an implementar la totalidad de las caracter&iacute;sticas necesarias, y que el m&aacute;ximo nivel alcanzado, fue el tercero. Con el fin de alcanzar la reflexi&oacute;n completa, se realiz&oacute; un modelo y propuesta de c&oacute;mo podr&iacute;a ser implementado el cuarto nivel de reflexi&oacute;n, permitiendo sobre este llevar a cabo la totalidad del desarrollo de un sistema aut&oacute;nomo.</p>      <p>Se quedan planteados como trabajos futuros, la formalizaci&oacute;n del cuarto nivel de reflexi&oacute;n como arquitectura sobre la que se pueda cumplir la filosof&iacute;a completa de la programaci&oacute;n reflexiva. Analizar si tal estructura se puede implementar sobre uno de los lenguajes existentes hoy en d&iacute;a, sea por la realizaci&oacute;n de un API, Framework o modificaci&oacute;n del n&uacute;cleo del lenguaje y que caracter&iacute;sticas debe cumplir para tales modificaciones, o si es necesario la implementaci&oacute;n de un lenguaje nuevo. Y finalmente desarrollar el cuarto nivel de reflexi&oacute;n, con el cual se estar&iacute;a muy cerca de alcanzar la programaci&oacute;n aut&oacute;noma completa. Tambi&eacute;n queda el trabajo de implementar un sistema aut&oacute;nomo en un proceso evolutivo, haciendo uso de los recursos que se tienen hoy en d&iacute;a en cuanto a software y hardware y sobre el cuarto nivel de reflexi&oacute;n.</p>  <hr>      <p><font size="3"><B>5. Referencias</B></font></p>      <!-- ref --><p>Albahari, J., &amp; Albahari, B. (2012). <i>C# 5.0 in a Nutshell: The Definitive Reference</i>. Newton (MA), USA: O'Reilly Media, Inc.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000089&pid=S0123-3033201400020000900001&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Achilleas, M. (2004). <i>AGM::LibReflection: A reflection library for C++. - CodeProject</i>. Recovered 26/05/2014 <a href="http://www.codeproject.com/Articles/8712/AGM-LibReflection-A-reflection-library-for-C" target="_blank">http://www.codeproject.com/Articles/8712/AGM-LibReflection-A-reflection-library-for-C</a>.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000091&pid=S0123-3033201400020000900002&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      ]]></body>
<body><![CDATA[<!-- ref --><p> Adobe (2012). <i>ActionScript&reg; 3.0 Reference for the Adobe&reg; Flash&reg; Platform</i>. Recovered 26/05/2014 <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/package.html" target="_blank">http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/package.html</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000093&pid=S0123-3033201400020000900003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><i>APACHE-a. Apache Commons BCELTM - Byte Code Engineering Library (BCEL)</i>. (s.f.). Recovered 26/05/2014 <a href="http://commons.apache.org/bcel/manual.html" target="_blank">http://commons.apache.org/bcel/manual.html</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000094&pid=S0123-3033201400020000900004&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><i>APACHE-b. Overview (Commons BCEL 6.0-SNAPSHOT API)</i> (s.f.) Recovered 26/05/2014 <a href="http://commons.apache.org/bcel/apidocs/index.html" target="_blank">http://commons.apache.org/bcel/apidocs/index.html</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000095&pid=S0123-3033201400020000900005&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><i>BCEL. BCEL API Documentation</i> (s.f.) Recovered 26/05/2014 <a href="http://bcel.sourceforge.net/docs/index.html" target="_blank">http://bcel.sourceforge.net/docs/index.html</a>.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000096&pid=S0123-3033201400020000900006&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Black, A., Ducasse, S., Nierstrasz, O., &amp; Pollet, D. (2009). <i>Reflection</i>. NewYork: Square Bracket Associates Press.c2.com. Automated Code Generation. Recovered 26/05/2014 <a href="http://c2.com/cgi/wiki?AutomatedCodeGeneration" target="_blank">http://c2.com/cgi/wiki?AutomatedCodeGeneration</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000098&pid=S0123-3033201400020000900007&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p> Demers, F. N., &amp; Malenfant, J. (1995). Reflection in Logic, Functional and Object-Oriented Programming. In, <i>Proceedings of the Fourteenth International Joint Conference on Artificial Intelligence (ICAI)</i> (pp. 29-39). Montreal-Quebec: Canada.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000099&pid=S0123-3033201400020000900008&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Fujita, M., &amp; Kitano, H. (1998). Development of an autonomous quadruped robot for robot entertainment. <i>Autonomous Robots</i>, 5(1), 7-18.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000101&pid=S0123-3033201400020000900009&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      ]]></body>
<body><![CDATA[<!-- ref --><p> Horn, P. (2001). <i>Autonomic Computing: IBM's Perspective on the State of Information Technology</i>. New York, USA: IBM Corporation.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000103&pid=S0123-3033201400020000900010&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p><i>JAVATM. Trail: The Reflection API (The JavaTM Tutorials)</i> (s.f.) Recovered 26/05/2014 <a href="http://docs.oracle.com/javase/tutorial/reflect/index.html" target="_blank">http://docs.oracle.com/javase/tutorial/reflect/index.html</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000105&pid=S0123-3033201400020000900011&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p> Kang, Z., Li, Y., &amp; Kang, L. S. (2006). Automatic programming methodology for program reuse. In <i>Proceeding of the 2006 IEEE International Conference on Computational Intelligence and Security</i> (pp. 208-214). Guangzhou, China.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000106&pid=S0123-3033201400020000900012&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Kant, E. (1985). Understanding and automating algorithm design. <i>Software Engineering, IEEE Transactions on</i>, 11, 1361-1374.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000108&pid=S0123-3033201400020000900013&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Kephart, J. O., &amp; Chess, D. M. (2003). The vision of autonomic computing. <i>Computer</i>, 36(1), 41-50.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000110&pid=S0123-3033201400020000900014&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Lutz, M. (2013). <i>Learning python</i> (pp. 983-1021). New York, USA: O'Reilly Media, Inc.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000112&pid=S0123-3033201400020000900015&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Maes, P. (1987). Concepts and experiments in computational reflection. <i>ACM Sigplan Notices</i>, 22 (12), 147-155.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000114&pid=S0123-3033201400020000900016&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --> </p>      <!-- ref --><p> Martin, J., &amp; S&aacute;nchez, J. (1994). <i>API Reflection en los lenguajes Java y C</i>. Tesis de Maestr&iacute;a en Ciencias de la Compuaci&oacute;n e Inteligencia Artificial. Departamento de Inform&aacute;tica y Autom&aacute;tica. Universidad de Salamanca, Espa&ntilde;a.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000116&pid=S0123-3033201400020000900017&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Massa, G. L. O., Vinuesa, H., &amp; Lanzarini, L. (2006, Oct.). Modular Creation of Neuronal Networks for Autonomous Robot Control. In,<i> Robotics Symposium, 2006. LARS'06. IEEE 3rd Latin American</i> (pp. 66-73). IEEE.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000118&pid=S0123-3033201400020000900018&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Microsoft-a (2005). <i>Reflexi&oacute;n (Gu&iacute;a de programaci&oacute;n de C#) - MSDN</i> &#91;Online&#93;. Recovered 26/05/2014 <a href="http://msdn.microsoft.com/es-es/library/ms173183%28v=vs.80%29.aspx" target="_blank">http://msdn.microsoft.com/es-es/library/ms173183%28v=vs.80%29.aspx</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000120&pid=S0123-3033201400020000900019&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p> Microsoft-b (2012). <i>Reflection (C# and Visual Basic) - MSDN</i> Recovered 24/01/2013 <a href="http://msdn.microsoft.com/en-us/library/ms173183.aspx#Y0" target="_blank">http://msdn.microsoft.com/en-us/library/ms173183.aspx#Y0</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000121&pid=S0123-3033201400020000900020&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><i>Oracle-a. PL/SQL User's Guide and Reference 10g Release 1 (10.1)</i> (s.f.) Recovered 26/05/2014 Available: <a href="http://docs.oracle.com/cd/B12037_01/appdev.101/b10807/13_elems017.htm" target="_blank">http://docs.oracle.com/cd/B12037_01/appdev.101/b10807/13_elems017.htm</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000122&pid=S0123-3033201400020000900021&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><i>Oracle-b. Oracle&reg; Database PL/SQL Language Reference 11g Release 1 (11.1)</i> (s.f.) Recovered 26/05/2014 <a href="http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/dynamic.htm" target="_blank">http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/dynamic.htm</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000123&pid=S0123-3033201400020000900022&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p> Osella Massa, G. L., Vinuesa, H., &amp; Lanzarini, L. C. (2006). Modular creation of neuronal networks for autonomous robot control. In, <i>XII Congreso Argentino de Ciencias de la Computaci&oacute;n</i>.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000124&pid=S0123-3033201400020000900023&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Parashar, M., &amp; Hariri, S. (2005). Autonomic computing: An overview. In, Ban&acirc;tre, J. P., Fradet, P., Giavitto, J. L., &amp; Michel, O. (Ed.). <i>Unconventional Programming Paradigms</i>. Berlin, Germany: Springer Berlin /Heidelberg.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000126&pid=S0123-3033201400020000900024&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Pattison, T. (2013). <i>Basic Instincts: Reflection in Visual Basic .NET</i>. Recovered 26/05/2014  <a href="http://msdn.microsoft.com/en-us/magazine/cc163750.aspx" target="_blank">http://msdn.microsoft.com/en-us/magazine/cc163750.aspx</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000128&pid=S0123-3033201400020000900025&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p> PHP (2013). <i>Reflection - Manual"</i>. Recovered 26/05/2014 <a href="http://php.net/manual/en/book.reflection.php" target="_blank">http://php.net/manual/en/book.reflection.php</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000129&pid=S0123-3033201400020000900026&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p> RIA Solutions (2012). <i>Reflection en ActionScript 3</i>. 26/05/2014 <a href="http://www.madeinflex.com/2007/09/25/reflection-en-actionscript-3/" target="_blank">http://www.madeinflex.com/2007/09/25/reflection-en-actionscript-3/</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000130&pid=S0123-3033201400020000900027&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p> Rich, C., &amp; Waters, R. C. (1988). Automatic programming: Myths and prospects. <i>Computer</i>, 21(8), 40-51.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000131&pid=S0123-3033201400020000900028&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      ]]></body>
<body><![CDATA[<!-- ref --><p> Roiser, S. (2005). <i>SEAL C++ Reflection</i>. Recovered 24/01/2014 <a href="http://seal.web.cern.ch/seal/workbook/reflection.html" target="_blank">http://seal.web.cern.ch/seal/workbook/reflection.html</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000133&pid=S0123-3033201400020000900029&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p> Salavert, I., &amp; P&eacute;rez, M. (2000). Ingenier&iacute;a del software y bases de datos. <i>Tendencias Actuales</i>, 28, 39-52.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000134&pid=S0123-3033201400020000900030&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --> </p>      <!-- ref --><p> Sariff, N., &amp; Buniyamin, N. (2006, June). An overview of autonomous mobile robot path planning algorithms. In, <i>Research and Development, 2006. SCOReD 2006. 4th Student Conference on</i> (pp. 183-188). IEEE.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000136&pid=S0123-3033201400020000900031&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Schlossnagle, G. (2008). <i>Advanced Php Programming: Developing Large-scale Web Applications With Php 5. Sams</i>.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000138&pid=S0123-3033201400020000900032&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Smith, B. C. (1982). <i>Procedural Reflection in Programming Languages</i>. Doctoral Thesis. Department of Electrical Engineering and Computer Science. Massachusetts Institute of Technology. Boston, USA.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000140&pid=S0123-3033201400020000900033&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Sobel, J. M. &amp; Friedman, D. P. (1996). An Introduction to Reflection-Oriented Programming. In <i>Reflection'96 Conference</i>. (pp. 1-20). USA.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000142&pid=S0123-3033201400020000900034&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Sonntag, S., Hartig, H., Kowalski, O., Kuhnhauser, W., &amp; Lux, W. (1994, Jan.). Adaptability using reflection. In System Sciences. <i>Proceedings of the Twenty-Seventh Hawaii International Conference on</i> (v. 2) (pp. 383-392). IEEE.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000144&pid=S0123-3033201400020000900035&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Summerfield, M. (2009). <i>Advanced Python 3 Programming Techniques</i>. London, UK: Pearson Education.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000146&pid=S0123-3033201400020000900036&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p> Thomas, D., Fowler, Ch. &amp; Hunt, A. (2004) Reflection, ObjectSpace, and Distributed Ruby. <i>Programming Ruby: The Pragmatic Programmer's Guide</i>, 403-419.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000148&pid=S0123-3033201400020000900037&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>Warden, S. (2012). Reflection. Modern Perl. <i>Chromatic</i>, 125-126. Onyx NEon Press: Hillsboro, OR, USA.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000150&pid=S0123-3033201400020000900038&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <p><img src="img/revistas/inco/v16n2/cc.jpg">    ]]></body>
<body><![CDATA[<br> Revista Ingenier&iacute;a y Competitividad por Universidad del Valle se encuentra bajo una <a href="https://creativecommons.org/licenses/by/3.0/deed.es_ES" target="_blank">licencia Creative Commons Reconocimiento</a> - Debe reconocer adecuadamente la autor&iacute;a, proporcionar un enlace a la licencia e indicar si se han realizado cambios. Puede hacerlo de cualquier manera razonable, pero no de una manera que sugiera que tiene el apoyo del licenciador o lo recibe por el uso que hace.</p>  </font>      ]]></body><back>
<ref-list>
<ref id="B1">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Albahari]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[Albahari]]></surname>
<given-names><![CDATA[B.]]></given-names>
</name>
</person-group>
<source><![CDATA[C# 5.0 in a Nutshell: The Definitive Reference]]></source>
<year>2012</year>
<publisher-loc><![CDATA[Newton^eMA MA]]></publisher-loc>
<publisher-name><![CDATA[O'Reilly Media, Inc]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B2">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Achilleas]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<source><![CDATA[AGM::LibReflection: A reflection library for C++. - CodeProject]]></source>
<year>2004</year>
</nlm-citation>
</ref>
<ref id="B3">
<nlm-citation citation-type="">
<collab>Adobe</collab>
<source><![CDATA[ActionScript® 3.0 Reference for the Adobe® Flash® Platform]]></source>
<year>2012</year>
</nlm-citation>
</ref>
<ref id="B4">
<nlm-citation citation-type="">
<source><![CDATA[APACHE-a. Apache Commons BCELTM - Byte Code Engineering Library (BCEL)]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B5">
<nlm-citation citation-type="">
<source><![CDATA[APACHE-b. Overview (Commons BCEL 6.0-SNAPSHOT API)]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B6">
<nlm-citation citation-type="">
<source><![CDATA[BCEL. BCEL API Documentation]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B7">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Black]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<name>
<surname><![CDATA[Ducasse]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
<name>
<surname><![CDATA[Nierstrasz]]></surname>
<given-names><![CDATA[O.]]></given-names>
</name>
<name>
<surname><![CDATA[Pollet]]></surname>
<given-names><![CDATA[D.]]></given-names>
</name>
</person-group>
<source><![CDATA[Reflection]]></source>
<year>2009</year>
<publisher-loc><![CDATA[NewYork ]]></publisher-loc>
<publisher-name><![CDATA[Square Bracket Associates Press.c2.com. Automated Code Generation]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B8">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Demers]]></surname>
<given-names><![CDATA[F. N.]]></given-names>
</name>
<name>
<surname><![CDATA[Malenfant]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<source><![CDATA[Reflection in Logic, Functional and Object-Oriented Programming. In, Proceedings of the Fourteenth International Joint Conference on Artificial Intelligence (ICAI)]]></source>
<year>1995</year>
<page-range>29-39</page-range><publisher-loc><![CDATA[MontrealQuebec ]]></publisher-loc>
</nlm-citation>
</ref>
<ref id="B9">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Fujita]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[Kitano]]></surname>
<given-names><![CDATA[H.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Development of an autonomous quadruped robot for robot entertainment]]></article-title>
<source><![CDATA[Autonomous Robots]]></source>
<year>1998</year>
<volume>5</volume>
<numero>1</numero>
<issue>1</issue>
<page-range>7-18</page-range></nlm-citation>
</ref>
<ref id="B10">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Horn]]></surname>
<given-names><![CDATA[P.]]></given-names>
</name>
</person-group>
<source><![CDATA[Autonomic Computing: IBM's Perspective on the State of Information Technology]]></source>
<year>2001</year>
<publisher-loc><![CDATA[New York ]]></publisher-loc>
<publisher-name><![CDATA[IBM Corporation]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B11">
<nlm-citation citation-type="">
<source><![CDATA[JAVATM. Trail: The Reflection API (The JavaTM Tutorials)]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B12">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kang]]></surname>
<given-names><![CDATA[Z.]]></given-names>
</name>
<name>
<surname><![CDATA[Li]]></surname>
<given-names><![CDATA[Y.]]></given-names>
</name>
<name>
<surname><![CDATA[Kang]]></surname>
<given-names><![CDATA[L. S.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Automatic programming methodology for program reuse]]></article-title>
<source><![CDATA[Proceeding of the 2006 IEEE International Conference on Computational Intelligence and Security]]></source>
<year>2006</year>
<page-range>208-214</page-range><publisher-loc><![CDATA[^eGuangzhou Guangzhou]]></publisher-loc>
</nlm-citation>
</ref>
<ref id="B13">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kant]]></surname>
<given-names><![CDATA[E.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Understanding and automating algorithm design]]></article-title>
<source><![CDATA[Software Engineering, IEEE Transactions on]]></source>
<year>1985</year>
<volume>11</volume>
<page-range>1361-1374</page-range></nlm-citation>
</ref>
<ref id="B14">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kephart]]></surname>
<given-names><![CDATA[J. O.]]></given-names>
</name>
<name>
<surname><![CDATA[Chess]]></surname>
<given-names><![CDATA[D. M.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[The vision of autonomic computing]]></article-title>
<source><![CDATA[Computer]]></source>
<year>2003</year>
<volume>36</volume>
<numero>1</numero>
<issue>1</issue>
<page-range>41-50</page-range></nlm-citation>
</ref>
<ref id="B15">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Lutz]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<source><![CDATA[Learning python]]></source>
<year>2013</year>
<page-range>983-1021</page-range><publisher-loc><![CDATA[New York ]]></publisher-loc>
<publisher-name><![CDATA[O'Reilly Media, Inc]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B16">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Maes]]></surname>
<given-names><![CDATA[P.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Concepts and experiments in computational reflection]]></article-title>
<source><![CDATA[ACM Sigplan Notices]]></source>
<year>1987</year>
<volume>22</volume>
<numero>12</numero>
<issue>12</issue>
<page-range>147-155</page-range></nlm-citation>
</ref>
<ref id="B17">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Martin]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[Sánchez]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<source><![CDATA[API Reflection en los lenguajes Java y C]]></source>
<year>1994</year>
</nlm-citation>
</ref>
<ref id="B18">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Massa]]></surname>
<given-names><![CDATA[G. L. O.]]></given-names>
</name>
<name>
<surname><![CDATA[Vinuesa]]></surname>
<given-names><![CDATA[H.]]></given-names>
</name>
<name>
<surname><![CDATA[Lanzarini]]></surname>
<given-names><![CDATA[L.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Modular Creation of Neuronal Networks for Autonomous Robot Control]]></article-title>
<source><![CDATA[Robotics Symposium, 2006. LARS'06. IEEE 3rd Latin American]]></source>
<year>2006</year>
<month>, </month>
<day>Oc</day>
<page-range>66-73</page-range><publisher-name><![CDATA[IEEE]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B19">
<nlm-citation citation-type="">
<collab>Microsoft-a</collab>
<source><![CDATA[Reflexión (Guía de programación de C#)]]></source>
<year>2005</year>
</nlm-citation>
</ref>
<ref id="B20">
<nlm-citation citation-type="">
<collab>Microsoft</collab>
<source><![CDATA[Reflection (C# and Visual Basic) - MSDN]]></source>
<year>2012</year>
</nlm-citation>
</ref>
<ref id="B21">
<nlm-citation citation-type="">
<source><![CDATA[Oracle-a. PL/SQL User's Guide and Reference 10g Release 1 (10.1)]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B22">
<nlm-citation citation-type="">
<source><![CDATA[Oracle-b. Oracle® Database PL/SQL Language Reference 11g Release 1 (11.1)]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B23">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Osella Massa]]></surname>
<given-names><![CDATA[G. L.]]></given-names>
</name>
<name>
<surname><![CDATA[Vinuesa]]></surname>
<given-names><![CDATA[H.]]></given-names>
</name>
<name>
<surname><![CDATA[Lanzarini]]></surname>
<given-names><![CDATA[L. C.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Modular creation of neuronal networks for autonomous robot control]]></article-title>
<source><![CDATA[XII Congreso Argentino de Ciencias de la Computación]]></source>
<year>2006</year>
</nlm-citation>
</ref>
<ref id="B24">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Parashar]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[Hariri]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Autonomic computing: An overview]]></article-title>
<person-group person-group-type="editor">
<name>
<surname><![CDATA[Banâtre]]></surname>
<given-names><![CDATA[J. P.]]></given-names>
</name>
<name>
<surname><![CDATA[Fradet]]></surname>
<given-names><![CDATA[P.]]></given-names>
</name>
<name>
<surname><![CDATA[Giavitto]]></surname>
<given-names><![CDATA[J. L.]]></given-names>
</name>
<name>
<surname><![CDATA[Michel]]></surname>
<given-names><![CDATA[O.]]></given-names>
</name>
</person-group>
<source><![CDATA[Unconventional Programming Paradigms]]></source>
<year>2005</year>
<publisher-loc><![CDATA[Berlin ]]></publisher-loc>
<publisher-name><![CDATA[Springer Berlin /Heidelberg]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B25">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Pattison]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
</person-group>
<source><![CDATA[Basic Instincts: Reflection in Visual Basic .NET.]]></source>
<year>2013</year>
</nlm-citation>
</ref>
<ref id="B26">
<nlm-citation citation-type="">
<collab>PHP</collab>
<source><![CDATA[Reflection - Manual"]]></source>
<year>2013</year>
</nlm-citation>
</ref>
<ref id="B27">
<nlm-citation citation-type="">
<collab>RIA Solutions</collab>
<source><![CDATA[Reflection en ActionScript 3]]></source>
<year>2012</year>
</nlm-citation>
</ref>
<ref id="B28">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Rich]]></surname>
<given-names><![CDATA[C.]]></given-names>
</name>
<name>
<surname><![CDATA[Waters]]></surname>
<given-names><![CDATA[R. C.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Automatic programming: Myths and prospects]]></article-title>
<source><![CDATA[Computer]]></source>
<year>1988</year>
<volume>21</volume>
<numero>8</numero>
<issue>8</issue>
<page-range>40-51</page-range></nlm-citation>
</ref>
<ref id="B29">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Roiser]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
</person-group>
<source><![CDATA[SEAL C++ Reflection]]></source>
<year>2005</year>
</nlm-citation>
</ref>
<ref id="B30">
<nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Salavert]]></surname>
<given-names><![CDATA[I.]]></given-names>
</name>
<name>
<surname><![CDATA[Pérez]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<article-title xml:lang="es"><![CDATA[Ingeniería del software y bases de datos]]></article-title>
<source><![CDATA[Tendencias Actuales]]></source>
<year>2000</year>
<volume>28</volume>
<page-range>39-52</page-range></nlm-citation>
</ref>
<ref id="B31">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Sariff]]></surname>
<given-names><![CDATA[N.]]></given-names>
</name>
<name>
<surname><![CDATA[Buniyamin]]></surname>
<given-names><![CDATA[N.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[An overview of autonomous mobile robot path planning algorithms]]></article-title>
<source><![CDATA[Research and Development, 2006. SCOReD 2006. 4th Student Conference on]]></source>
<year>2006</year>
<month>, </month>
<day>Ju</day>
<page-range>183-188</page-range><publisher-name><![CDATA[IEEE]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B32">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Schlossnagle]]></surname>
<given-names><![CDATA[G.]]></given-names>
</name>
</person-group>
<source><![CDATA[Advanced Php Programming: Developing Large-scale Web Applications With Php 5. Sams]]></source>
<year>2008</year>
</nlm-citation>
</ref>
<ref id="B33">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Smith]]></surname>
<given-names><![CDATA[B. C.]]></given-names>
</name>
</person-group>
<source><![CDATA[Procedural Reflection in Programming Languages]]></source>
<year>1982</year>
</nlm-citation>
</ref>
<ref id="B34">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Sobel]]></surname>
<given-names><![CDATA[J. M.]]></given-names>
</name>
<name>
<surname><![CDATA[Friedman]]></surname>
<given-names><![CDATA[D. P.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[An Introduction to Reflection-Oriented Programming]]></article-title>
<source><![CDATA[Reflection'96 Conference]]></source>
<year>1996</year>
<page-range>1-20</page-range></nlm-citation>
</ref>
<ref id="B35">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Sonntag]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
<name>
<surname><![CDATA[Hartig]]></surname>
<given-names><![CDATA[H.]]></given-names>
</name>
<name>
<surname><![CDATA[Kowalski]]></surname>
<given-names><![CDATA[O.]]></given-names>
</name>
<name>
<surname><![CDATA[Kuhnhauser]]></surname>
<given-names><![CDATA[W.]]></given-names>
</name>
<name>
<surname><![CDATA[Lux]]></surname>
<given-names><![CDATA[W.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Adaptability using reflection]]></article-title>
<collab>System Sciences</collab>
<source><![CDATA[Proceedings of the Twenty-Seventh Hawaii International Conference on]]></source>
<year>1994</year>
<month>, </month>
<day>Ja</day>
<volume>2</volume>
<page-range>383-392</page-range><publisher-name><![CDATA[IEEE]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B36">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Summerfield]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<source><![CDATA[Advanced Python 3 Programming Techniques]]></source>
<year>2009</year>
<publisher-loc><![CDATA[London ]]></publisher-loc>
<publisher-name><![CDATA[Pearson Education]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B37">
<nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Thomas]]></surname>
<given-names><![CDATA[D.]]></given-names>
</name>
<name>
<surname><![CDATA[Fowler]]></surname>
<given-names><![CDATA[Ch.]]></given-names>
</name>
<name>
<surname><![CDATA[Hunt]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Reflection, ObjectSpace, and Distributed Ruby]]></article-title>
<source><![CDATA[Programming Ruby: The Pragmatic Programmer's Guide]]></source>
<year>2004</year>
<page-range>403-419</page-range></nlm-citation>
</ref>
<ref id="B38">
<nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Warden]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Reflection. Modern Perl]]></article-title>
<source><![CDATA[Chromatic]]></source>
<year>2012</year>
<page-range>125-126</page-range><publisher-loc><![CDATA[Hillsboro^eOR OR]]></publisher-loc>
<publisher-name><![CDATA[Onyx NEon Press]]></publisher-name>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
