<?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>1909-8367</journal-id>
<journal-title><![CDATA[Entre Ciencia e Ingeniería]]></journal-title>
<abbrev-journal-title><![CDATA[Entre Ciencia e Ingenieria]]></abbrev-journal-title>
<issn>1909-8367</issn>
<publisher>
<publisher-name><![CDATA[Universidad Católica de Pereira]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S1909-83672016000200003</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Creación de una arquitectura utilizando Lenguaje de Modelado Unificado (UML) en la implementación de un Lenguaje Específico de Dominio Interno (LEDI): construcción de un LEDI para el modelado de problemas de optimización]]></article-title>
<article-title xml:lang="en"><![CDATA[Creating an architecture using Unified Modeling Language (UML) in the implementation of an Internal Domain Specific Language (IDSL): construction of an IDSL for modeling optimization problems]]></article-title>
<article-title xml:lang="pt"><![CDATA[Criação de uma arquitetura utilizando Linguagem de Modelagem Unificada (UML) na implementação de uma Linguagem Específica de Domínio Interno (LEDI): construção de uma LEDI para a modelagem de problemas de otimização]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Rodas]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Ríos]]></surname>
<given-names><![CDATA[J. I.]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Solarte]]></surname>
<given-names><![CDATA[G. R.]]></given-names>
</name>
<xref ref-type="aff" rid="A03"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Tecnológica de Pereira  ]]></institution>
<addr-line><![CDATA[Pereira ]]></addr-line>
<country>Colombia</country>
</aff>
<aff id="A02">
<institution><![CDATA[,Universidad Tecnológica de Pereira  ]]></institution>
<addr-line><![CDATA[Pereira ]]></addr-line>
<country>Colombia</country>
</aff>
<aff id="A03">
<institution><![CDATA[,Universidad Tecnológica de Pereira  ]]></institution>
<addr-line><![CDATA[Pereira ]]></addr-line>
<country>Colombia</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>12</month>
<year>2016</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>12</month>
<year>2016</year>
</pub-date>
<volume>10</volume>
<numero>20</numero>
<fpage>15</fpage>
<lpage>23</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_arttext&amp;pid=S1909-83672016000200003&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_abstract&amp;pid=S1909-83672016000200003&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_pdf&amp;pid=S1909-83672016000200003&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[El presente artículo muestra la creación de una arquitectura que ha sido diseñada para la implementación de un Lenguaje Específico de Dominio Interno (LEDI) orientado al modelado de problemas de optimización. Del mismo modo, se presenta la metodología C4 como la seleccionada para iniciar el proceso de diseño y cómo ella aplicada a través de la construcción de la arquitectura da como resultado diagramas en UML, así mismo la descripción de las tareas y propósitos que cumplen los componentes que conforman la base funcional del sistema.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[This article demonstrates how to create an architecture that is designed to implement an Internal Domain Specific Language (IDSL) oriented to the modeling of optimization problems. It also introduces the methodology C4 as the one selected to start the design process and how it can be applied through the building architecture, which gives diagrams in UML as a result, as well as the description of the tasks and objectives that meet the functional components that configures base of the system.]]></p></abstract>
<abstract abstract-type="short" xml:lang="pt"><p><![CDATA[O presente artigo mostra a criação de uma arquitetura que foi desenhada para a implementação de uma Linguagem Específica de Domínio Interno (LEDI) orientado à modelagem de problemas de otimização. Do mesmo modo, se apresenta a metodologia C4 como a selecionada para iniciar o processo de desenho e como ela é aplicada através da construção da arquitetura dando como resultado diagramas em UML, da mesma forma a descrição das tarefas e propósitos que cumprem os componentes que conformam a base funcional do sistema.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[Dominio-específico]]></kwd>
<kwd lng="es"><![CDATA[desarrollo dirigido por modelo]]></kwd>
<kwd lng="es"><![CDATA[Lenguaje Específico de Dominio Interno]]></kwd>
<kwd lng="es"><![CDATA[Lenguaje Específico de Dominio Embebido]]></kwd>
<kwd lng="es"><![CDATA[Ruby]]></kwd>
<kwd lng="en"><![CDATA[Specific domain]]></kwd>
<kwd lng="en"><![CDATA[model directed development]]></kwd>
<kwd lng="en"><![CDATA[Internal Domian Specific Language]]></kwd>
<kwd lng="en"><![CDATA[Embedded Domain Specific Language]]></kwd>
<kwd lng="en"><![CDATA[Ruby]]></kwd>
<kwd lng="pt"><![CDATA[Domínio específico]]></kwd>
<kwd lng="pt"><![CDATA[desenvolvimento dirigido por modelo]]></kwd>
<kwd lng="pt"><![CDATA[Linguagem Especifica de Domínio Interno]]></kwd>
<kwd lng="pt"><![CDATA[Linguagem específica de Domínio Embebido]]></kwd>
<kwd lng="pt"><![CDATA[Ruby]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[  <font face="Verdana" size="2">      <p align="center"><font size="4"><b>Creaci&oacute;n de una arquitectura utilizando Lenguaje de Modelado Unificado (UML) en la implementaci&oacute;n de un Lenguaje Espec&iacute;fico de Dominio Interno (LEDI): construcci&oacute;n de un LEDI para el modelado de problemas de optimizaci&oacute;n</b></font><Sup>1</Sup></p>      <p align="center"><font size="3"><b>Creating an architecture using Unified Modeling Language (UML) in the implementation of an Internal Domain Specific Language  (IDSL): construction of an IDSL for modeling optimization problems</b></font></p>      <p align="center"><font size="3"><b>Cria&ccedil;&atilde;o de uma arquitetura utilizando Linguagem de Modelagem Unificada (UML) na implementa&ccedil;&atilde;o de uma Linguagem Espec&iacute;fica de Dom&iacute;nio Interno (LEDI): constru&ccedil;&atilde;o de uma LEDI para a modelagem de problemas de otimiza&ccedil;&atilde;o</b></font></p>      <p align="center">A. Rodas<Sup>*</Sup>, J. I. R&iacute;os<Sup>**</Sup> y G. R. Solarte<Sup>***</Sup></p>      <p><Sup>1</Sup> Producto derivado del proyecto de grado de la Maestr&iacute;a en Ingenier&iacute;a de Sistemas y Computaci&oacute;n, dela Universidad Tecnol&oacute;gica de Pereira "Creaci&oacute;n de una arquitectura utilizando Lenguaje de Modelado Unificado (UML), en la implementaci&oacute;n de un Lenguaje Espec&iacute;fico de Dominio Embebido (LEDE): Creaci&oacute;n de LED Embebido en Ruby para el modelado de problemas de optimizaci&oacute;n".    <br>  <Sup>*</Sup> A. Rodas. Docente Programa de Ingenier&iacute;a de Sistemas y Computaci&oacute;n, de la Universidad Tecnol&oacute;gica de Pereira, Pereira (Colombia), email: <a href="mailto:alejorodasvasquez@utp.edu.co">alejorodasvasquez@utp.edu.co</a>.    <br>  <Sup>**</Sup> J. I. R&iacute;os. Director Maestr&iacute;a Ingenier&iacute;a de Sistemas y Computaci&oacute;n, de la Universidad Tecnol&oacute;gica de Pereira, Pereira (Colombia), email: <a href="mailto:jirios@utp.edu.co">jirios@utp.edu.co</a>.    <br>  <Sup>***</Sup> G. R. Solarte. Docente  de Ingenier&iacute;a de Sistemas y Computaci&oacute;n, de la Universidad Tecnol&oacute;gica de Pereira, Pereira (Colombia), email: <a href="mailto:roberto@utp.edu.co">roberto@utp.edu.co</a>.</p>      <p align="center">Recibido Octubre 16 de 2015 - Aceptado Mayo 30 de 2016 </p>  <hr>      ]]></body>
<body><![CDATA[<p><b><i>Resumen</i></b></p>      <p>El presente art&iacute;culo muestra la creaci&oacute;n de una arquitectura que ha sido dise&ntilde;ada para la implementaci&oacute;n de un Lenguaje Espec&iacute;fico de Dominio Interno (LEDI) orientado al modelado de problemas de optimizaci&oacute;n. Del mismo modo, se presenta la metodolog&iacute;a C4 como la seleccionada para iniciar el proceso de dise&ntilde;o y c&oacute;mo ella aplicada a trav&eacute;s de la construcci&oacute;n de la arquitectura da como resultado diagramas en UML, as&iacute; mismo la descripci&oacute;n de las tareas y prop&oacute;sitos que cumplen los componentes que conforman la base funcional del sistema.</p>      <p><b><i>Palabras clave</i></b>: Dominio-espec&iacute;fico, desarrollo dirigido por modelo, Lenguaje Espec&iacute;fico de Dominio Interno, Lenguaje  Espec&iacute;fico de Dominio Embebido, Ruby.</p>  <hr>     <p><b><i>Abstract</i></b></p>      <p>This article demonstrates how to create an architecture that is designed to implement an Internal Domain Specific Language (IDSL) oriented to the modeling of optimization problems. It also introduces the methodology C4 as the one selected to start the design process and how it can be applied through the building architecture, which gives diagrams in UML as a result, as well as the description of the tasks and objectives that meet the functional components that configures base of the system.</p>      <p><b><i>Key words</i></b>: Specific domain, model directed development, Internal Domian Specific Language, Embedded Domain Specific Language, Ruby.</p>  <hr>     <p><b><i>Resumo</i></b></p>      <p>O presente artigo mostra a cria&ccedil;&atilde;o de uma arquitetura que foi desenhada para a implementa&ccedil;&atilde;o de uma Linguagem Espec&iacute;fica de Dom&iacute;nio Interno (LEDI) orientado &agrave; modelagem de problemas de otimiza&ccedil;&atilde;o. Do mesmo modo, se apresenta a metodologia C4 como a selecionada para iniciar o processo de desenho e como ela &eacute; aplicada atrav&eacute;s da constru&ccedil;&atilde;o da arquitetura dando como resultado diagramas em UML, da mesma forma a descri&ccedil;&atilde;o das tarefas e prop&oacute;sitos que cumprem os componentes que conformam a base funcional do sistema.</p>      <p><b><i>Palavras chave </i></b>: Dom&iacute;nio espec&iacute;fico, desenvolvimento dirigido por modelo, Linguagem Especifica de Dom&iacute;nio Interno, Linguagem espec&iacute;fica de Dom&iacute;nio Embebido, Ruby.</p>  <hr>      <p><b>I. INTRODUCCI&Oacute;N</b></p>      ]]></body>
<body><![CDATA[<p>Dentro de los diversos roles que debe cumplir un ingeniero de sistemas, uno de los m&aacute;s importantes es el ejercido como desarrollador de software. Es all&iacute; donde su capacidad de creatividad y manipulaci&oacute;n de los lenguajes de programaci&oacute;n se pone a prueba, no obstante existen ocasiones donde ser&iacute;a m&aacute;s apropiado contar con un lenguaje que fuera enfocado al dominio del problema que se est&aacute; tratando de solucionar. Esta situaci&oacute;n se presenta con los Lenguajes de Prop&oacute;sito General donde se necesita una buena cantidad de l&iacute;neas de c&oacute;digo para expresar la soluci&oacute;n requerida, dichos lenguajes poseen elementos que no son propios del dominio (tal como par&eacute;ntesis, palabras reservadas, entre otros) lo cual resta expresividad y a&ntilde;ade complejidad al momento de depurar o buscar errores en el c&oacute;digo. Por el contrario, los Lenguajes Espec&iacute;ficos de Dominio son construidos de modo que abordan el problema en t&eacute;rminos de su dominio, empleando sintaxis acorde con el contexto logrando una mejor abstracci&oacute;n alcanzado una mejor comunicaci&oacute;n con los <i>expertos del dominio y mejorando la productividad en el desarrollo </i>&#91;1&#93;.</p>      <p><b>II. DEFINICI&Oacute;N DEL PROBLEMA</b></p>      <p>Desde el principio de los tiempos, el hombre ha utilizado se&ntilde;ales, diagramas y dibujos para representar el mundo que lo rodea. La necesidad de representar sus ideas, lo ha conducido a un proceso de abstracci&oacute;n que dio como origen la creaci&oacute;n del lenguaje hablado y escrito. En la actualidad, el hombre sigue en esta b&uacute;squeda donde las ciencias de la computaci&oacute;n han permitido la creaci&oacute;n de lenguajes artificiales, en especial los de programaci&oacute;n, que ayudan a concretar dichas abstracciones, que se conciben en el an&aacute;lisis de un problema o situaci&oacute;n en particular.</p>      <p>Cada uno de estos escenarios maneja su propio contexto el cual posee una sem&aacute;ntica propia de su universo, es decir, cada entorno maneja su propia din&aacute;mica y t&eacute;rminos que hacen posible la interacci&oacute;n dentro de este espacio, y es all&iacute; donde estos poseen una significancia v&aacute;lida, de modo que si se utilizasen en un espacio diferente, carecer&iacute;an del significado que los hacen v&aacute;lidos.</p>      <p>Por ejemplo, imagine que ha ingresado a una organizaci&oacute;n dedicada a la intermediaci&oacute;n financiera y se le pide que  modele su sistema de intermediaci&oacute;n, enfoc&aacute;ndose en las actividades de comercio y liquidaci&oacute;n. Seg&uacute;n &#91;12&#93; un modelo es una representaci&oacute;n abstracta de un sistema y la porci&oacute;n del mundo que interact&uacute;a con &eacute;l. Sin embargo, para construir este modelo es necesario utilizar herramientas como UML) y t&eacute;cnicas que permitan representar aquellos artefactos o componentes que constituyen el <i>dominio del problema</i> de modo que el modelo resultante pueda ser llevado al escenario llamado, <i>dominio de soluciones.</i></p>      <p>Un <i>dominio de soluciones</i>, constituye el espacio donde aquellos componentes que pertenecen al dominio del problema son representados por medio de t&eacute;cnicas apropiadas &#91;4&#93;. Es decir, supongamos que ha escogido utilizar la metodolog&iacute;a orientada a objetos, por lo tanto, las clases, objetos y m&eacute;todos, conforman los principales artefactos del dominio de soluciones, y por medio de estos se puede realizar una mejor representaci&oacute;n de los componentes de alto nivel del dominio del problema.</p>      <p>As&iacute; mismo, es en esta fase de construcci&oacute;n de artefactos en el dominio de soluciones, donde se utilizan, por lo general, los <i>lenguajes de programaci&oacute;n de prop&oacute;sito general</i>, cuya caracter&iacute;stica principal radica en que su sem&aacute;ntica y la gram&aacute;tica de las instrucciones que ellos poseen no est&aacute;n enmarcadas en la terminolog&iacute;a y contexto de un dominio espec&iacute;fico siendo este atributo un obst&aacute;culo cuando lo que se intenta es representar un dominio espec&iacute;fico en su m&aacute;s pura expresividad.</p>      <p>Por tal motivo, cuando se llega a esta situaci&oacute;n, donde las caracter&iacute;sticas del dominio del problema tiene particularidades que una herramienta gen&eacute;rica no puede abordar de forma efectiva &#91;20&#93;, es necesario crear un lenguaje que sirva para el prop&oacute;sito requerido; esto es lo que se denomina como Domain-Specific Language (DLS) o Lenguaje Espec&iacute;fico de Dominio (LED), donde la caracter&iacute;stica principal de los mismos, es proveer un lenguaje conciso, a medida, que sea f&aacute;cil para ingenieros y expertos en el dominio de aprender, entender y aplicarlo para una clase espec&iacute;fica de problema &#91;20&#93;.</p>      <p>En efecto, durante la investigaci&oacute;n que se plante&oacute;, la cual radica en la creaci&oacute;n de un LEDI Orientado al Modelado de Problemas de Optimizaci&oacute;n, se encontr&oacute; que existen los llamados Lenguajes de Modelado Algebraico, los cuales tienen como prop&oacute;sito servir para el modelado de problemas orientados a la optimizaci&oacute;n de funciones. No obstante, estos lenguajes solo puede ser comprensibles por personas que tienen formaci&oacute;n como programador o aquellas que estar&iacute;an dispuestas a invertir tiempo considerable en aprenderlos, ya que la forma c&oacute;mo fueron concebidos, requiere un grado de conocimiento referente a la programaci&oacute;n para lograr crear un modelo pertinente al problema planteado.</p>      <p>As&iacute; pues, los profesionales pertenecientes a las ramas de la Ingenier&iacute;a Industrial, Administraci&oacute;n Financiera y Negocios Internacionales, en fin, todas aquellas relacionadas con la Investigaci&oacute;n de Operaciones y que necesitan la formulaci&oacute;n de modelos dentro de su quehacer, y en el preciso caso la optimizaci&oacute;n de funciones, tienen una barrera al tratar de crear los modelos pertinentes empleando estos Lenguajes de Modelado Algebraico,  lo cual les deja como alternativas la utilizaci&oacute;n de hojas de c&aacute;lculo u otras herramientas no tan efectivas y f&aacute;ciles de usar como se necesitan.</p>      ]]></body>
<body><![CDATA[<p><b>III. JUSTIFICACI&Oacute;N</b></p>      <p>Dise&ntilde;ar una funci&oacute;n objetivo para su optimizaci&oacute;n es un proceso de abstracci&oacute;n donde se quiere expresar el comportamiento de cierto fen&oacute;meno por medio de variables representativas y algunas restricciones que est&aacute;n atadas a esta.</p>      <p>Para realizar esta abstracci&oacute;n es necesario contar con un lenguaje que permita la creaci&oacute;n de dicho modelo. Dentro de esta categor&iacute;a se encuentra OPL, AIMMS, OptimJ, GAMS, Zimp, entre otros, los cuales se denominan como Lenguajes de Modelado Algebraico para Optimizaci&oacute;n (Algebraic Modeling Languages for Optimization) para programaci&oacute;n matem&aacute;tica.</p>      <p>Sin embargo, aunque ellos cuentan con una sintaxis que permite una amplia expresividad y emplean instrucciones como <i>maximize (maximizar)</i> y <i>subject to (sujeto a)</i>, que son propias del dialecto utilizado en la optimizaci&oacute;n de funciones, el resto del c&oacute;digo es dif&iacute;cil de construir para una persona que no tenga conocimientos en programaci&oacute;n.</p>      <p>Por el contrario, los Lenguajes Espec&iacute;ficos de Dominio (LED) o Domain-Specific Language (DSL) son construidos de modo que el usuario del lenguaje especifique el comportamiento que desea en t&eacute;rminos del dominio (contexto) del problema, eliminando, en la medida de lo posible, aquellos caracteres (como puntos y comas, definici&oacute;n de tipos de datos o definici&oacute;n de variables) que no son parte fundamental del dominio, de modo que el lenguaje fluya por medio de expresiones naturales propias del dominio sin presentar ambig&uuml;edad en sus t&eacute;rminos y ofreciendo la expresividad necesaria que permita el modelado del problema por parte de un usuario que conozca del dominio del problema pero que no sea necesariamente un programador.</p>      <p><b>IV. ESTADO DEL ARTE</b></p>      <p>A continuaci&oacute;n se presentan algunos de los Lenguajes de Modelado Algebraico encontrados durante la investigaci&oacute;n:</p>  <ul>    <li> GAMS (General Algebraic Modeling System) - &uacute;ltima versi&oacute;n estable marzo 15 de 2016: es un sistema de alto nivel para el modelado de sistemas para programaci&oacute;n matem&aacute;tica y optimizaci&oacute;n. GAMS, est&aacute; adaptado para aplicaciones complejas de gran escala y permite construir modelos mantenibles que pueden ser adaptados a cualquier situaci&oacute;n. &#91;23&#93; </li>      <li> Pyomo - &uacute;ltima versi&oacute;n estable enero 22 de 2015: es un paquete de software <i>open-source </i>basado en Python que soporta un conjunto diverso de funcionalidades para la formulaci&oacute;n, resoluci&oacute;n y an&aacute;lisis de modelos de optimizaci&oacute;n. &#91;24&#93; </li>      <li> AIMMS (Advanced Interactive Multidimensional Modeling System) - &uacute;ltima versi&oacute;n estable julio 7 de 2014: es un software dise&ntilde;ado para modelar problemas tanto de optimizaci&oacute;n como de planificaci&oacute;n. Consiste en un Lenguaje de Modelado Algebraico y un ambiente integrado de desarrollo. &#91;25&#93; </li>      ]]></body>
<body><![CDATA[<li> ASCEND - &uacute;ltima versi&oacute;n estable abril 30 de 2012: ASCEND es un programa libre <i>open-source </i>modelos matem&aacute;ticos. ASCEND puede resolver sistemas  de ecuaciones no lineales, problemas de optimizaci&oacute;n lineales y no lineales y sistemas din&aacute;micos expresados en la forma de ecuaciones diferenciales/algebraicas. &#91;26&#93; </li>    </ul>      <p><b>VI. C4: CONTEXTO, CONTENEDORES, COMPONENTES Y CLASES</b></p>      <p>Uno de los problemas que se present&oacute; en la creaci&oacute;n de la arquitectura, fue alcanzar una forma efectiva de comunicar el dise&ntilde;o sobre el cual se basar&aacute; el LEDI. De forma, que a medida que se fuera construyendo la arquitectura se pudiera visualizar la evoluci&oacute;n de la misma. Por tanto, se emple&oacute; UML como un medio de comunicaci&oacute;n estandarizado que permite obtener este fin.</p>      <p>No obstante, UML presenta una serie de diagramas que permiten observar el sistema din&aacute;mica y est&aacute;ticamente &#91;21&#93;. De modo que para analizar la forma o estructura que va tomando la arquitectura del LEDI a medida que va evolucionando es conveniente emplear los diagramas pertenecientes al &aacute;rea estructural particularmente los diagramas de clases y componentes.</p>      <p>Por otro lado, la sola escogencia de este enfoque no garantiza que se alcance autom&aacute;ticamente un dise&ntilde;o que comunique efectivamente la arquitectura del sistema, por lo tanto se hace necesario encontrar una metodolog&iacute;a que permita alcanzar este objetivo y que permita, a la vez, construir diagramas que sean sencillos y sobre todo que expresen y transmitan la realidad del sistema.</p>      <p>As&iacute; pues, Simon Brown &#91;22&#93; presenta su metodolog&iacute;a llamada C4, la cual propone que <i>un sistema de software est&aacute; hecho por un n&uacute;mero de contenedores, que a su vez se componen de una serie de componentes, que a su vez son implementados por una o m&aacute;s clases. </i>Esto permite visualizar la estructura de una arquitectura de software de forma simple, reflejada como una serie de bloques (<a href="#f1">Fig. 1</a>) donde cada uno representa un nivel de abstracci&oacute;n dentro de la jerarqu&iacute;a.</p>      <p align="center"><a name="f1"></a><img src="img/revistas/ecei/v10n20/v10n20a03f1.jpg"></p>      <p>A continuaci&oacute;n se presenta la definici&oacute;n de cada uno de los niveles &#91;22&#93;.</p>  <ul>    <li> Sistema de Software (Software System): es el nivel m&aacute;s alto en la abstracci&oacute;n. En este nivel se observa el sistema en su forma general, de modo que se deben mostrar los actores que interact&uacute;an con el mismo, ya sean usuarios u otros sistemas, los detalles t&eacute;cnicos no son importantes ya que lo que se pretende es mostrar un panorama general.</li>      ]]></body>
<body><![CDATA[<li> Contenedores (Container): un diagrama de contenedor muestra las decisiones tecnol&oacute;gicas a un alto nivel, muestra c&oacute;mo las responsabilidades son distribuidas a trav&eacute;s de ellos y c&oacute;mo los contenedores se comunican. Para la presente investigaci&oacute;n se utiliz&oacute; el diagrama de paquetes para representar este bloque, de modo que se pudiera identificar la estructura del sistema desde una perspectiva de capas como la que puede ofrecer este tipo de diagrama.</li>      <li> Componentes (Component): por cada contenedor, un diagrama de componentes permite observar los componentes l&oacute;gicos claves y sus relaciones. Para la presente investigaci&oacute;n se emple&oacute; el diagrama de componentes para mostrar esta fase del modelo C4, a trav&eacute;s de este tipo de diagramas se mostr&oacute; c&oacute;mo cada uno de los paquetes que conforman el bloque de contenedores es conformado por componentes que desarrollan la implementaci&oacute;n de una determinada funcionalidad.</li>      <li> Clases (Classes): es un nivel opcional, es utilizado para explicar c&oacute;mo un patr&oacute;n o componente en particular ser&aacute; implementado. Para la investigaci&oacute;n fue necesario llegar hasta este nivel, puesto que para lograr la implementaci&oacute;n del Modelo de Dominio que sustenta el LEDI se necesit&oacute; emplear el diagrama de clases que soportan el mismo.</li>    </ul>      <p><b>V. PATRONES DE CONSTRUCCI&Oacute;N DE UN LENGUAJE ESPEC&Iacute;FICO DE DOMINIO INTERNO (LEDI) Y SELECCI&Oacute;N DE UNO DE ELLOS PARA IMPLEMENTAR EN EL PROYECTO</b></p>      <p>La clasificaci&oacute;n que se hace de los Lenguajes Espec&iacute;ficos de Dominio est&aacute; relacionada con la forma c&oacute;mo estos son implementados, es decir, cada una de los enfoques propuestos presenta caracter&iacute;sticas propias que se traducen en el dise&ntilde;o e implementaci&oacute;n del LED. Seg&uacute;n &#91;1&#93; existen dos enfoques principales de LED que son LED Interno (LEDI) y LED Externo. El primero ha sido seleccionado como objeto de la investigaci&oacute;n realizada.</p>      <p><i>LED Interno (LEDI)</i></p>      <p>Un LED Interno es aquel que usa la infraestructura de un lenguaje de programaci&oacute;n existente (tambi&eacute;n llamado lenguaje anfitri&oacute;n) para construir la sem&aacute;ntica de un dominio-espec&iacute;fico &#91;4&#93;. Ampliando esta definici&oacute;n es &uacute;til especificar qu&eacute; significa cuando se habla de <i>"usar la infraestructura de un lenguaje de programaci&oacute;n existente"</i>.</p>      <p>Como ya es conocido, dentro de la composici&oacute;n que posee un lenguaje de programaci&oacute;n no se puede olvidar mencionar su compilador, el cual posee diversas fases como son: analizador l&eacute;xico, analizador sint&aacute;ctico, analizador sem&aacute;ntico, etc. Es decir, se cuenta con una infraestructura ya implementada la cual ser&aacute; utilizada por el LEDI.</p>      <p>Por tal motivo, un LEDI tambi&eacute;n puede ser llamado <i>Lenguaje Espec&iacute;fico de Dominio Embebido</i>, refiri&eacute;ndose al hecho que el LED, al utilizar la infraestructura de un lenguaje anfitri&oacute;n, estar&aacute; ligado a las restricciones de este, por lo tanto, cualquier expresi&oacute;n que se utilice debe ser un expresi&oacute;n legal en el lenguaje anfitri&oacute;n, de ah&iacute; que sea importante escoger un <i>lenguaje anfitri&oacute;n</i> vers&aacute;til que cumpla con los criterios de expresividad requeridos; tal como lo ofrece el lenguaje de programaci&oacute;n Ruby a trav&eacute;s de su <i>Metraprogramaci&oacute;n,</i> la cual est&aacute; estrechamente ligada a la idea de la creaci&oacute;n de Lenguajes Espec&iacute;ficos de Dominio &#91;2&#93;.</p>      ]]></body>
<body><![CDATA[<p>Antes de implementar un LEDI es necesario evaluar el tipo de sintaxis que se desea obtener, es decir, cu&aacute;l ser&aacute; la estructura o apariencia que esta tendr&aacute; para ser presentada al usuario. Para lograr esto, Martin Fowler en &#91;1&#93; plantea tres patrones principales de implementaci&oacute;n llamados Encadenamiento de M&eacute;todos (<i>Method Chaining</i>), Funci&oacute;n anidada (<i>Nested Function</i>) y Secuencia de funciones (<i>Function Sequence</i>).</p>      <p>Sin embargo, haciendo un an&aacute;lisis de la forma y el tipo de sintaxis a la que se pretend&iacute;a llegar en la investigaci&oacute;n (como se muestra en la <a href="#f2">Fig. 2</a>), se analiz&oacute; una cuarta t&eacute;cnica tambi&eacute;n presentada en &#91;1&#93; llamada Cierres Anidados <i>(Nested Closures</i>), encontrando que esta t&eacute;cnica se adapta perfectamente al uso de Ruby como lenguaje anfitri&oacute;n y se fundamenta esencialmente en el uso de <i>Bloques</i>.</p>      <p align="center"><a name="f2"></a><img src="img/revistas/ecei/v10n20/v10n20a03f2.jpg"></p>      <p>As&iacute; mismo, el patr&oacute;n Cierre Anidado se muestra como una mejora de las Funciones Anidadas, Secuencia de Funciones y Encadenamiento de M&eacute;todos &#91;1&#93;, ya que permite combinar estas t&eacute;cnicas creando un lenguaje vers&aacute;til. Por consiguiente, se realiz&oacute; la elecci&oacute;n de esta t&eacute;cnica para ser la utilizada en la creaci&oacute;n del LEDI objeto de la investigaci&oacute;n.</p>       <p><b> DEFINICI&Oacute;N DE LA ARQUITECTURA UTILIZANDO LENGUAJE DE MODELADO UNIFICADO (UML), EN LA IMPLEMENTACI&Oacute;N DE UN LENGUAJE ESPEC&Iacute;FICO DE DOMINIO INTERNO</b></p>      <p>Uno de los objetivos en la aplicaci&oacute;n de la metodolog&iacute;a C4 fue mejorar la abstracci&oacute;n en la representaci&oacute;n del sistema mediante la creaci&oacute;n de varios diagramas. Por tanto, siguiendo dicha metodolog&iacute;a se inici&oacute;  la construcci&oacute;n de la arquitectura con un Diagrama de Contexto del Sistema (que puede ser equivalente a un Diagrama de Casos de Uso) permitir&aacute; identificar aquellos componentes que interact&uacute;an con el sistema observando a este como un solo bloque.</p>  <ul>    <li><i>Actor Usuario: </i>este actor juega el papel de Usuario del LEDI e interact&uacute;a con los casos de uso Modelado de Problema de Optimizaci&oacute;n y obtener los valores de las variables de decisi&oacute;n. Donde el primero, se enfoca en la construcci&oacute;n de los componentes de la arquitectura que le permitir&aacute;n al actor utilizar la infraestructura que soporta el modelo de dominio del LEDI; y el segundo caso que ha sido dise&ntilde;ado para ejecutar todos aquellas operaciones que implican la resoluci&oacute;n del modelado de la funci&oacute;n a optimizar, entre estas la conexi&oacute;n entre el algoritmo de resoluci&oacute;n de problemas de optimizaci&oacute;n creado en C y el propio LED implementado en Ruby.</li>      <li><i>Actor Sistema de Interpretaci&oacute;n Gr&aacute;fica de Resultados: </i>aunque este actor no tiene presencia obvia en la presente investigaci&oacute;n, se ha tomado la decisi&oacute;n en incluirlo en el modelo puesto que, tomando en consideraci&oacute;n trabajos futuros, es importante contar con un sistema que permita visualizar los resultados obtenidos de forma gr&aacute;fica. Esta consideraci&oacute;n se ver&aacute; reflejada en la arquitectura, como se observar&aacute; m&aacute;s adelante.</li>    </ul>      <p align="center"><a name="f3"></a><img src="img/revistas/ecei/v10n20/v10n20a03f3.jpg"></p>      ]]></body>
<body><![CDATA[<p>Continuando con la aplicaci&oacute;n de la metodolog&iacute;a C4, la siguiente perspectiva a crear es una visualizaci&oacute;n del sistema por medio de lo que han sido llamados Contenedores <i>(Containers), </i>los cuales se representar&aacute;n por medio de un Diagrama de Paquetes. Esta vista, permite descomponer el Diagrama de Contexto del Sistema en un conjunto de bloques que tendr&aacute;n una comunicaci&oacute;n entre ellos y responsabilidad individuales asignadas (<a href="#f4">Fig. 4</a>).</p>      <p align="center"><a name="f4"></a><img src="img/revistas/ecei/v10n20/v10n20a03f4.jpg"></p>  <ul>    <li><i>Capa DSL Model:</i> esta capa contiene las estructuras que componen el Modelo de Dominio. Estas estructuras son representadas mediante clases, donde por medio de sus atributos y m&eacute;todos, el usuario posee los elementos sint&aacute;cticos provistos por el LEDI necesarios para la representaci&oacute;n del modelo a optimizar. Del mismo modo, esta capa posee un componente dedicado a albergar los casos de prueba que ayudan a comprobar el Modelo de Dominio y los nuevos elementos que se a&ntilde;adan a este.</li>      <li><i>Capa Solver Services:</i> esta capa permite la comunicaci&oacute;n entre las capas DSL Model y C Solver, las cuales est&aacute;n construidas en los lenguajes de programaci&oacute;n Ruby y C, respectivamente. Para solventar este problema entre plataformas, se ha hecho uso de la librer&iacute;a FFI (<i>Foreign Function Interface </i>), la cual permite hacer llamados desde Ruby a funciones implementadas en C. Por lo tanto, la capa DSL Model puede llamar las rutinas algor&iacute;tmicas alojadas en la capa C Solver.</li>      <li><i>Capa C Solver: </i>esta capa contiene los algoritmos que permiten resolver problemas de optimizaci&oacute;n, los cuales est&aacute;n construidos en el lenguaje de programaci&oacute;n C, como ya se ha mencionado.</li>    </ul>      <p>Una vez obtenida la representaci&oacute;n de la arquitectura del sistema por medio de un Diagrama de Contenedores (<a href="#f4">Fig. 4</a>), el siguiente paso es descomponer cada Contenedor en bloques que han sido llamados Componentes (<i>Components</i>). Tal  como se menciona en &#91;22&#93; un Contenedor representa el lugar en el cual los Componentes son ejecutados. En la <a href="#f5">Fig. 5</a> se muestra el sistema por medio de un Diagrama de Componentes, y c&oacute;mo cada capa representada (por su correspondiente Contenedor) est&aacute; conformada por uno o varios Componentes.</p>      <p align="center"><a name="f5"></a><img src="img/revistas/ecei/v10n20/v10n20a03f5.jpg"></p>      <p>A continuaci&oacute;n se realiza una descripci&oacute;n de los principales componentes.</p>   <ul>    <li><i>Componente DSL Model: </i>contiene las estructuras que conforman el Modelo de Dominio, es decir, el LEDI propiamente dicho. Por lo tanto, es este Componente el que interact&uacute;a directamente con el actor Usuario </li>      ]]></body>
<body><![CDATA[<li><i>Componente Test DSL Model:</i> dedicado a los casos de prueba y tiene como finalidad comprobar el Modelo Sem&aacute;ntico residente en el Modelo de Dominio, de modo que cualquier modificaci&oacute;n o evoluci&oacute;n de dicho modelo sea comprobable y validada a trav&eacute;s de dichas pruebas o tests.</li>      <li><i>Componente Builder:</i> es el encargado de hacer el llamado a los m&eacute;todos que yacen en el componente SolverServices (el cual est&aacute; alojado en el Contenedor del mismo nombre).</li>      <li><i>Componente DSLException: </i>tiene como funci&oacute;n realizar las validaciones sobre los par&aacute;metros que reciben los m&eacute;todos que conformar el LEDI y en caso de un error originar el mensaje apropiado.  Contiene la clase <i>RestrictionException</i> la cual hereda de <i>Exception, </i>esta clase es propia de Ruby y responsable de manejar todas aquellas excepciones que se produzcan. Como ejemplo, algunas de ellas son: <i>NoMemoryError, RuntimeError, SecurityError, ZeroDivisionError, y NoMethodError </i>&#91;31&#93;. As&iacute; mismo, uno de los prop&oacute;sitos que se buscaba con esta herencia fue la creaci&oacute;n de una clase dise&ntilde;ada exclusivamente para las necesidades del LEDI.</li>      <li><i>Componente Expression Parser: </i>tiene como funci&oacute;n analizar cada una de las expresiones matem&aacute;ticas (manifestadas en la funci&oacute;n de optimizaci&oacute;n y sus restricciones) para posteriormente determinar en qu&eacute; categor&iacute;a (Programaci&oacute;n Lineal o Programaci&oacute;n No Lineal) se encuentra el problema que se est&aacute; modelando, de esta manera el LEDI podr&aacute; utilizar el algoritmo de resoluci&oacute;n apropiado.</li>      <li><i>Componente DslConnection: </i>tiene el prop&oacute;sito  de ser el elemento que ser&aacute; invocado en el archivo (con extensi&oacute;n .rb) donde el usuario modelar&aacute; su problema de optimizaci&oacute;n; este componente jugar&aacute; el papel de ser la conexi&oacute;n entre dicho archivo y la arquitectura del LEDI.</li>    </ul>      <p>Una vez descrita la arquitectura por medio de un Diagrama de Contenedores y de Componentes, se presenta a continuaci&oacute;n el nivel de descripci&oacute;n m&aacute;s detallado de la misma por medio de un <i>Diagrama de Clases (</i><a href="#f6">Fig. 6</a><i>)</i>. De igual forma, ya que el enfoque de implementaci&oacute;n escogido para la construcci&oacute;n del LEDI radica en la combinaci&oacute;n de los patrones Encadenamiento de M&eacute;todos y Cierre Anidado (Nested Closures), las caracter&iacute;sticas funcionales del lenguaje yacen en la creaci&oacute;n de un Modelo de Dominio que por medio de la definici&oacute;n de clases y el empleo de sus m&eacute;todos como elementos que proveen la sintaxis del LEDI, por tanto es conveniente analizar la arquitectura desde la perspectiva de un Diagrama de Clases.</p>      <p align="center"><a name="f6"></a><a href="img/revistas/ecei/v10n20/v10n20a03f6.jpg" target="_blank">FIGURA 6</a></p>      <p>Como se puede observar en la <a href="#f6">Fig. 6</a>, <i>OptimizationFunction </i>y <i>Restriction</i> son clases que est&aacute;n asociadas por una relaci&oacute;n de Composici&oacute;n; son estas clases las que conforman el Modelo de Dominio de la arquitectura. Se puede notar que la clase OptimizationFunction posee dos atributos que son: equation (permite almacenar la ecuaci&oacute;n que conforma la funci&oacute;n objetivo) y subject_to_restriccition (permite almacenar en forma de objeto la serie de restricciones a las que est&aacute; sujeta la funci&oacute;n a optimizar), este &uacute;ltimo atributo est&aacute; relacionado con la clase Restriction, la cual posee el atributo llamado restriction_equation correspondiente a una estructura de tipo Hash destinada a almacenar las restricciones relacionadas con la funci&oacute;n de optimizaci&oacute;n, donde la llave del arreglo Hash es el nombre de la restricci&oacute;n y el valor de dicha llave es la inecuaci&oacute;n que expresa la restricci&oacute;n.</p>      <p>Como se mencion&oacute; anteriormente, toda la sintaxis que posee el LEDI yace en su Modelo de Dominio y es representada por los m&eacute;todos que yacen en este. Sin embargo, ya que toda restricci&oacute;n lleva un nombre que la identifica (<a href="#f2">Fig. 2</a>) es dif&iacute;cil saber cu&aacute;l ser&aacute; el asignado por el usuario a cada restricci&oacute;n, haciendo imposible de esta forma, crear un m&eacute;todo que sea residente permanente en el modelo. Esta dificultad es sorteada mediante la implementaci&oacute;n del m&oacute;dulo <i>RestrictionBuilder</i>, el cual ha sido dise&ntilde;ado con el prop&oacute;sito de ser el encargado de construir, mediante la t&eacute;cnica de <i>Generaci&oacute;n Din&aacute;mica de M&eacute;todos</i>, todas aquellas restricciones que el usuario ingrese.</p>      ]]></body>
<body><![CDATA[<p>Una vez dada la estructura apropiada al objeto de tipo <i>OptimizationFunction,</i> el cual representa el modelado del problema de optimizaci&oacute;n con sus respectivas restricciones, el usuario debe hacer uso del m&eacute;todo <i>send_result_to_ solver</i>, el cual permite enviar dicho objeto hacia la clase <i>SolverConnectionBuilder</i>, la cual es la encargada de entablar la conexi&oacute;n con la capa <i>C Solver</i>, esto se hace invocando la implementaci&oacute;n del m&eacute;todo <i>algorithm_request</i>, la cual reside en la clase <i>ServiceSolverAdapter </i>y se define en la clase abstracta <i>IserviceAdapter</i>. De este modo se inicia el proceso que implica enviar el modelo de optimizaci&oacute;n hacia los algoritmos de resoluci&oacute;n mediante el m&eacute;todo<i> send_to_ adapter </i>el cual es llamado dentro del m&eacute;todo <i>send_result_ to_solver.</i></p>      <p>Del mismo modo, el componente <i>ExpressionParser </i>es conformado por los m&oacute;dulos <i>ExpressionExtensiones </i>y <i>ExpressionGrammar </i>(usado por la clase <i>SolverConnectionBuilder</i>), el cual utiliza el archivo de configuraci&oacute;n <i>equation_grammar.treetop</i> junto con la librer&iacute;a <i>Treetop,</i> la cual debe ser instalada en el ambiente de desarrollo. A trav&eacute;s de esta librer&iacute;a se logra realizar el an&aacute;lisis sint&aacute;ctico de la expresi&oacute;n matem&aacute;tica, extrayendo y separando las variables y coeficientes de la misma, logrando identificar y categorizar el tipo de ecuaciones que el usuario est&aacute; utilizando en el modelado del problema de optimizaci&oacute;n, esto con el fin de permitir que el LEDI pueda invocar internamente el algoritmo de resoluci&oacute;n apropiado para generar el resultado esperado.</p>      <p>Por &uacute;ltimo la interfaz <i>ISolverAlgorithm </i>permite el desacoplamiento entre las capas <i>SolverServices</i> y <i>C Solver</i>. Al mismo tiempo, tiene como tarea acceder al componente <i>C Solver</i> que contiene las rutinas implementadas en C, el cual depende de la librer&iacute;a FFI para lograr este fin, logrando as&iacute; la interconexi&oacute;n entre las dos tecnolog&iacute;as que conforman lactura (Ruby y C) </p>      <p><b>VII. VALIDACIONES Y PRUEBAS DE LA ARQUITECTURA</b></p>      <p>Para la validaci&oacute;n del LEDI se plante&oacute; un problema de optimizaci&oacute;n como caso pr&aacute;ctico de forma que se pudiera evaluar el comportamiento que presenta la arquitectura. En las pruebas pertinentes se plantearon escenarios tales como el paso err&oacute;neo de n&uacute;mero de par&aacute;metros y mal uso de la sintaxis del lenguaje. El formato empleado en la realizaci&oacute;n de las pruebas se muestra en la <a href="#t1">Tabla. I</a>.</p>      <p align="center"><a name="t1"></a><img src="img/revistas/ecei/v10n20/v10n20a03t1.jpg"></p>      <p>Como ejemplo de una de las pruebas realizadas se muestran la <a href="#t2">Tabla II</a> y <a href="#f7">Fig. 7</a>.</p>      <p align="center"><a name="t2"></a><img src="img/revistas/ecei/v10n20/v10n20a03t2.jpg"></p>      <p align="center"><a name="f7"></a><img src="img/revistas/ecei/v10n20/v10n20a03f7.jpg"></p>       <p><b>VIII. TRABAJOS FUTUROS</b></p>      ]]></body>
<body><![CDATA[<p> Dentro los proyectos relacionados se encuentran el <i>Modelado de una Arquitectura para la Construcci&oacute;n de una Herramienta la Visualizaci&oacute;n de Resultados Obtenidos Mediante un LEDI Orientado a la Definici&oacute;n de Problemas de Optimizaci&oacute;n</i>. Este proyecto presentar&aacute; como resultado el modelo de una arquitectura empleando UML, enfocado en la creaci&oacute;n de una herramienta gr&aacute;fica que permita visualizar los resultados obtenidos del modelado de un problema de optimizaci&oacute;n, empleando el LEDI mostrado en el presente art&iacute;culo.</p>      <p>Por otro lado, tambi&eacute;n se pretende que el LEDI construido pueda ser convertido en una librer&iacute;a que permita ser instalada en un Entorno Integrado de Desarrollo como Eclipse.</p>      <p><b>IX. CONCLUSIONES</b></p>      <p>Durante el proceso investigativo del proyecto se pudo constatar que el campo referente a la creaci&oacute;n de Lenguajes Espec&iacute;ficos de Dominio Interno ha sido explorado de diferentes formas, siendo el desarrollo web un nicho importante. En esta &aacute;rea se encontraron LEDI como Ruby on Rails y Rspec, el cual ha tomado fuerza en el sector de testing y pruebas de integraci&oacute;n.</p>      <p>Al inicio de la investigaci&oacute;n se ten&iacute;a pensado que el campo de los Lenguajes Espec&iacute;ficos de Dominio era un tema especializado y de dif&iacute;cil acceso, ya que usualmente, durante la formaci&oacute;n que se recibe como ingeniero de sistemas el &aacute;mbito de los lenguajes de programaci&oacute;n gira alrededor de los Lenguajes de Prop&oacute;sito General. Sin embargo, como se ha podido constatar por medio de la revisi&oacute;n bibliograf&iacute;a los Lenguajes Espec&iacute;ficos de Dominio son utilizados y desarrollados no solo con fines investigativos sino industriales, por lo tanto valdr&iacute;a la pena ser incluidos dentro de los planes de curso.</p>      <p> UML ofrece una variedad de diagramas que permiten observar el software o una aplicaci&oacute;n determinada desde varias Vistas. Sin embargo, al iniciar el planteamiento de la arquitectura del LEDI, se encontr&oacute; que esta diversidad de diagramas en realidad planteaba cierta desventaja puesto que no se ten&iacute;a claro cu&aacute;l de todos seleccionar. En este punto era importante encontrar alguna metodolog&iacute;a que brindara un punto de referencia. Es all&iacute; donde la metodolog&iacute;a C4 ofrece dentro de su planteamiento una forma pr&aacute;ctica y sencilla para construir un sistema, esto permiti&oacute; crear la arquitectura con un enfoque funcional e incremental, como se puede evidenciar en el documento, a medida que se fue necesitando la incorporaci&oacute;n de nuevos componentes que desempe&ntilde;aran distintas funcionalidades, estos fueron acoplados sin problema en la arquitectura.</p>  <hr>     <p><b>REFERENCIAS</b></p>      <!-- ref --><p>&#91;1&#93; M. Fowler, Domain - Specific Languages. Ed. Boston: Addison Wesley, 2011.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460030&pid=S1909-8367201600020000300001&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;2&#93;	D. Flanagan and Y. Matsumoto, The Ruby Programming Language. Ed. California: O'Reilly, 2008.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460032&pid=S1909-8367201600020000300002&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;3&#93;	P. Cooper.,Beginning Ruby From Novice to Professional, ed 2nd . Ed New York: Apress, 2009.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460034&pid=S1909-8367201600020000300003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;4&#93; D. Ghosh, DSLs in Action. Ed. Stamford: Manning, 2010.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460036&pid=S1909-8367201600020000300004&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;5&#93; S. G&uuml;nther, Agile DSL-Engineering with Patterns in Ruby.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460038&pid=S1909-8367201600020000300005&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;6&#93; E. Evans, Domain-Driven Design: Tackling Complexity in the Heart of Software. Ed. Addison Wesley, 2003.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460040&pid=S1909-8367201600020000300006&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;7&#93; M. Voelter, DSL Engineering. Designing, Implementing and Using Domain-Specific Languages. &#91;Online&#93;. Available: <a href="http://dslbook.org" target="_blank">http://dslbook.org</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=6460042&pid=S1909-8367201600020000300007&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;8&#93; M. Mernik, "When and How to Develop Domain-Specific Languages". ACM Computing Surveys. vol 37, pp 316-344, december 2005.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460044&pid=S1909-8367201600020000300008&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;9&#93; R. Fourer, D. M. Gay, B. W. Kernighan, AMPL: A Modeling Language for Mathematical Programming, 2da ed. 2003.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460046&pid=S1909-8367201600020000300009&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;10&#93;	IBM ILOG OPL Language User's Manual &#91;Online&#93;. Available: <a href="http://cedric.cnam.fr/~lamberta/MPRO/ECMA/doc/oplTutorial.pdf" target="_blank">http://cedric.cnam.fr/~lamberta/MPRO/ECMA/doc/oplTutorial.pdf</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=6460048&pid=S1909-8367201600020000300010&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;11&#93; T. Halpin. UML Data Models From An ORM Perspective: Part 1.&#91;Online&#93;. Available: <a href="http://www.orm.net/pdf/ICMArticle1.pdf" target="_blank">http://www.orm.net/pdf/ICMArticle1.pdf</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=6460050&pid=S1909-8367201600020000300011&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;12&#93; K. Czarnecki, "Overview of Generative Software Development", in Unconventional Programming Paradigms, 2005, pp. 326-341.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460052&pid=S1909-8367201600020000300012&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;13&#93; J. G&auml;rtner, X. GmbH, N. Musliu, W. Schafhauser and W. Slany. A Domain Specific Language for Modeling and Solving Staff Scheduling Problems. &#91;Online&#93;. Available: <a href="http://www.dbai.tuwien.ac.at/staff/musliu/CischedEMPLE.pdf." target="_blank">http://www.dbai.tuwien.ac.at/staff/musliu/CischedEMPLE.pdf</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=6460054&pid=S1909-8367201600020000300013&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;14&#93; A. Mediratta. "A Generic Domain Specific Language For Financial Contracts," M.S thesis, Rutgers, The State University of New Jersey, 2007.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460056&pid=S1909-8367201600020000300014&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;15&#93; H. Beck, K. Currie and A. Tate, A Domain Description Language for Job-ShopScheduling. &#91;Online&#93;. Available: <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.35.269" target="_blank">http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.35.269</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=6460058&pid=S1909-8367201600020000300015&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;16&#93; A. van Deursen, P. Klint and J. Visser. Domain-Specific Languages: An Annotated Bibliography. &#91;Online&#93;. Available: <a href="http://www.st.ewi.tudelft.nl/~arie/papers/dslbib.pdf" target="_blank">http://www.st.ewi.tudelft.nl/~arie/papers/dslbib.pdf</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=6460060&pid=S1909-8367201600020000300016&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;17&#93;	R. Fourer, Algebraic Modeling Languages for Optimization. &#91;Online&#93;.Available: <a href="http://ampl.com/REFS/amlopt.pdf" target="_blank">http://ampl.com/REFS/amlopt.pdf</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=6460062&pid=S1909-8367201600020000300017&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;18&#93; E. Gramma, R. Helm, R. Jhonson and J. Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Ed. Boston: Addison Wesley.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460064&pid=S1909-8367201600020000300018&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;19&#93; GarfinkeL, R.S. (1985). Motivation and Modeling, in LAWLER, E.L.; LENSTRA, J.K.; RINNOOY KAN, A.H.G.; SHMOYS, D.B. (eds.) <i>The Traveling Salesman Problem: A Guide Tour of Combinatorial Optimization</i>. Wiley. Chichester.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460066&pid=S1909-8367201600020000300019&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;20&#93;	J. de Lara y E. Guerra. "Domian-Specific Textual Meta-Modelling Languages form Model Driven Engineering". Modelling Foundations and Aplications. pp 316-344, July 2005.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460068&pid=S1909-8367201600020000300020&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;21&#93; J. Rumbaugh, I. Jacobson y G. Booch. El Lenguaje Unificado de Modelado: Manual de Referencia. Ed. Madrid: Addison Wesley, 2000.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460070&pid=S1909-8367201600020000300021&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;22&#93; S. Brown. Software Architecture for Developers. Ed. Leanpub, 2015.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=6460072&pid=S1909-8367201600020000300022&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;23&#93; GAMS &#91;Online&#93;. Available: <a href="https://www.gams.com/" target="_blank">https://www.gams.com/</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=6460074&pid=S1909-8367201600020000300023&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;24&#93; Pyomo &#91;Online&#93;. Available: <a href="http://www.pyomo.org/" target="_blank">http://www.pyomo.org/</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=6460076&pid=S1909-8367201600020000300024&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;25&#93; ASCEND &#91;Online&#93;. Available: <a href="http://ascend4.org/Main_Page" target="_blank">http://ascend4.org/Main_Page</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=6460078&pid=S1909-8367201600020000300025&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>      <!-- ref --><p>&#91;26&#93; AIMMS &#91;Online&#93;. Available: <a href="http://www.aimms.com/" target="_blank">http://www.aimms.com/</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=6460080&pid=S1909-8367201600020000300026&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></p>  <hr>     <p><b>Alejandro Rodas V&aacute;squez.</b> Profesor catedr&aacute;tico Programa Ingenier&iacute;a de Sistemas y Computaci&oacute;n - Universidad Tecnol&oacute;gica de Pereira. Es Ingeniero de Sistemas y Telecomunicaciones - Universidad Cat&oacute;lica de Pereira, MSc. en Ingenier&iacute;a de Sistemas y Computaci&oacute;n - Universidad Tecnol&oacute;gica de Pereira. Sus &aacute;reas de actuaci&oacute;n son el Desarrollo Web, Desarrollo de Sistemas Expertos, Arquitectura de Software, Ingenier&iacute;a de Software y Usabilidad en Lenguajes Espec&iacute;ficos de Dominio Interno.</p>      ]]></body>
<body><![CDATA[<p><b>Jorge Iv&aacute;n R&iacute;os Pati&ntilde;o.</b> Profesor Titular del Programa Ing. Sistemas y Computaci&oacute;n - Universidad Tecnol&oacute;gica de Pereira. Es Ingenier&iacute;a Industrial - Universidad Tecnol&oacute;gica de Pereira, MSc Inform&aacute;tica e Ingeniera del Conocimiento - Universidad Polit&eacute;cnica de Madrid y PhD (c) Inform&aacute;tica- Universidad Polit&eacute;cnica de Madrid. Es director de la Maestr&iacute;a en Ingenier&iacute;a de Sistemas y Computaci&oacute;n de la Universidad Tecnol&oacute;gica de Pereira desde junio de 2009. Sus &aacute;reas de actuaci&oacute;n son la Inteligencia Artificial, Ciencias de la Computaci&oacute;n y de la Informaci&oacute;n.</p>      <p><b>Guillermo Roberto Solarte Mart&iacute;nez,</b> Profesor Asociado, Transitorio del Programa Ing. Sistemas y Computaci&oacute;n. Doctor en Inform&aacute;tica de la Universidad Pontificia de Salamanca con sede Madrid Espa&ntilde;a Suficiencia investigativa, D .E. A Universidad Pontificia de Salamanca con sede Madrid Espa&ntilde;a, Magister en Investigaci&oacute;n de Operativa y Estad&iacute;stica de la Universidad Tecnol&oacute;gica de Pereira Risaralda e Ingeniero de Sistemas Grupo de Investigaci&oacute;n En Inteligencia Artificial, Semillero de Investigaci&oacute;n GNTO Grupo de Nuevas t&eacute;cnicas de b&uacute;squeda y de optimizaci&oacute;n.</p> </font>      ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Fowler]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<source><![CDATA[Domain - Specific Languages]]></source>
<year>2011</year>
<publisher-loc><![CDATA[Boston ]]></publisher-loc>
<publisher-name><![CDATA[Addison Wesley]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Flanagan]]></surname>
<given-names><![CDATA[D.]]></given-names>
</name>
<name>
<surname><![CDATA[Matsumoto]]></surname>
<given-names><![CDATA[Y.]]></given-names>
</name>
</person-group>
<source><![CDATA[The Ruby Programming Language]]></source>
<year>2008</year>
<publisher-loc><![CDATA[California ]]></publisher-loc>
<publisher-name><![CDATA[O'Reilly]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Cooper]]></surname>
<given-names><![CDATA[P.]]></given-names>
</name>
</person-group>
<source><![CDATA[Beginning Ruby From Novice to Professional]]></source>
<year>2009</year>
<edition>2nd</edition>
<publisher-loc><![CDATA[New York ]]></publisher-loc>
<publisher-name><![CDATA[Apress]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Ghosh]]></surname>
<given-names><![CDATA[D.]]></given-names>
</name>
</person-group>
<source><![CDATA[DSLs in Action]]></source>
<year>2010</year>
<publisher-loc><![CDATA[Stamford ]]></publisher-loc>
<publisher-name><![CDATA[Manning]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Günther]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
</person-group>
<source><![CDATA[Agile DSL-Engineering with Patterns in Ruby]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Evans]]></surname>
<given-names><![CDATA[E.]]></given-names>
</name>
</person-group>
<source><![CDATA[Domain-Driven Design: Tackling Complexity in the Heart of Software]]></source>
<year>2003</year>
<publisher-name><![CDATA[Ed. Addison Wesley]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Voelter]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<source><![CDATA[DSL Engineering. Designing, Implementing and Using Domain-Specific Languages]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Mernik]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[When and How to Develop Domain-Specific Languages]]></article-title>
<source><![CDATA[ACM Computing Surveys]]></source>
<year>dece</year>
<month>mb</month>
<day>er</day>
<volume>37</volume>
<page-range>316-344</page-range></nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Fourer]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
<name>
<surname><![CDATA[Gay]]></surname>
<given-names><![CDATA[D. M.]]></given-names>
</name>
<name>
<surname><![CDATA[Kernighan]]></surname>
<given-names><![CDATA[B. W.]]></given-names>
</name>
</person-group>
<source><![CDATA[AMPL: A Modeling Language for Mathematical Programming]]></source>
<year>2003</year>
<edition>2da</edition>
</nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="">
<collab>IBM ILOG OPL</collab>
<source><![CDATA[Language User's Manual]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Halpin]]></surname>
<given-names><![CDATA[T.]]></given-names>
</name>
</person-group>
<source><![CDATA[UML Data Models From An ORM Perspective: Part 1]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Czarnecki]]></surname>
<given-names><![CDATA[K.]]></given-names>
</name>
</person-group>
<source><![CDATA["Overview of Generative Software Development", in Unconventional Programming Paradigms]]></source>
<year>2005</year>
<page-range>326-341</page-range></nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Gärtner]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[GmbH]]></surname>
<given-names><![CDATA[X.]]></given-names>
</name>
<name>
<surname><![CDATA[Musliu]]></surname>
<given-names><![CDATA[N.]]></given-names>
</name>
<name>
<surname><![CDATA[Schafhauser]]></surname>
<given-names><![CDATA[W.]]></given-names>
</name>
<name>
<surname><![CDATA[Slany]]></surname>
<given-names><![CDATA[W.]]></given-names>
</name>
</person-group>
<source><![CDATA[]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Mediratta]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
</person-group>
<source><![CDATA[A Generic Domain Specific Language For Financial Contracts]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B15">
<label>15</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Beck]]></surname>
<given-names><![CDATA[H.]]></given-names>
</name>
<name>
<surname><![CDATA[Currie]]></surname>
<given-names><![CDATA[K.]]></given-names>
</name>
<name>
<surname><![CDATA[Tate]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
</person-group>
<source><![CDATA[A Domain Description Language for Job-ShopScheduling]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B16">
<label>16</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Deursen]]></surname>
<given-names><![CDATA[A. van]]></given-names>
</name>
<name>
<surname><![CDATA[Klint]]></surname>
<given-names><![CDATA[P.]]></given-names>
</name>
<name>
<surname><![CDATA[Visser]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<source><![CDATA[Domain-Specific Languages: An Annotated Bibliography]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B17">
<label>17</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Fourer]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
</person-group>
<source><![CDATA[Algebraic Modeling Languages for Optimization]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B18">
<label>18</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Gramma]]></surname>
<given-names><![CDATA[E.]]></given-names>
</name>
<name>
<surname><![CDATA[Helm]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
<name>
<surname><![CDATA[Jhonson]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
<name>
<surname><![CDATA[Vlissides]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<source><![CDATA[Design Patterns: Elements of Reusable Object-Oriented Software]]></source>
<year></year>
<publisher-loc><![CDATA[Boston ]]></publisher-loc>
<publisher-name><![CDATA[Addison Wesley]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B19">
<label>19</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[GarfinkeL]]></surname>
<given-names><![CDATA[R.S]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Motivation and Modeling]]></article-title>
<person-group person-group-type="editor">
<name>
<surname><![CDATA[LAWLER]]></surname>
<given-names><![CDATA[E.L]]></given-names>
</name>
<name>
<surname><![CDATA[LENSTRA]]></surname>
<given-names><![CDATA[J.K]]></given-names>
</name>
<name>
<surname><![CDATA[RINNOOY]]></surname>
<given-names><![CDATA[KAN]]></given-names>
</name>
<name>
<surname><![CDATA[SHMOYS]]></surname>
<given-names><![CDATA[D.B]]></given-names>
</name>
</person-group>
<source><![CDATA[The Traveling Salesman Problem: A Guide Tour of Combinatorial Optimization]]></source>
<year>1985</year>
<publisher-loc><![CDATA[Wiley ]]></publisher-loc>
<publisher-name><![CDATA[Chichester]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B20">
<label>20</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Lara]]></surname>
<given-names><![CDATA[J. de]]></given-names>
</name>
<name>
<surname><![CDATA[Guerra]]></surname>
<given-names><![CDATA[E.]]></given-names>
</name>
</person-group>
<source><![CDATA[Domian-Specific Textual Meta-Modelling Languages form Model Driven Engineering]]></source>
<year>July</year>
<month> 2</month>
<day>00</day>
<page-range>316-344</page-range></nlm-citation>
</ref>
<ref id="B21">
<label>21</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Rumbaugh]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[Jacobson]]></surname>
<given-names><![CDATA[I.]]></given-names>
</name>
<name>
<surname><![CDATA[Booch]]></surname>
<given-names><![CDATA[G.]]></given-names>
</name>
</person-group>
<source><![CDATA[El Lenguaje Unificado de Modelado: Manual de Referencia]]></source>
<year>2000</year>
<publisher-loc><![CDATA[Madrid ]]></publisher-loc>
<publisher-name><![CDATA[Addison Wesley]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B22">
<label>22</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Brown]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
</person-group>
<source><![CDATA[Software Architecture for Developers]]></source>
<year>2015</year>
<publisher-name><![CDATA[Ed. Leanpub]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B23">
<label>23</label><nlm-citation citation-type="">
<collab>GAMS</collab>
<source><![CDATA[]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B24">
<label>24</label><nlm-citation citation-type="">
<collab>Pyomo</collab>
<source><![CDATA[]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B25">
<label>25</label><nlm-citation citation-type="">
<collab>ASCEND</collab>
<source><![CDATA[]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B26">
<label>26</label><nlm-citation citation-type="">
<collab>AIMMS</collab>
<source><![CDATA[]]></source>
<year></year>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
