<?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>0012-7353</journal-id>
<journal-title><![CDATA[DYNA]]></journal-title>
<abbrev-journal-title><![CDATA[Dyna rev.fac.nac.minas]]></abbrev-journal-title>
<issn>0012-7353</issn>
<publisher>
<publisher-name><![CDATA[Universidad Nacional de Colombia]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S0012-73532006000100003</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[ESTABLECIMIENTO Y VERIFICACIÓN DE LA CONSISTENCIA EN DOME: UN CASO DE ESTUDIO]]></article-title>
<article-title xml:lang="en"><![CDATA[CONSISTENCY ESTABLISHMENT AND VERIFICATION IN DOME: A CASE STUDY]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[CABARCAS]]></surname>
<given-names><![CDATA[DANIEL]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[ARANGO]]></surname>
<given-names><![CDATA[FERNANDO]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[ZAPATA]]></surname>
<given-names><![CDATA[CARLOS M.]]></given-names>
</name>
<xref ref-type="aff" rid="A03"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Nacional de Colombia, sede Medellín Facultad de Minas Escuela de Sistemas]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<aff id="A02">
<institution><![CDATA[,Universidad Nacional de Colombia, sede Medellín Facultad de Minas Escuela de Sistemas]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<aff id="A03">
<institution><![CDATA[,Universidad Nacional de Colombia, sede Medellín Facultad de Minas Escuela de Sistemas]]></institution>
<addr-line><![CDATA[ ]]></addr-line>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>03</month>
<year>2006</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>03</month>
<year>2006</year>
</pub-date>
<volume>73</volume>
<numero>148</numero>
<fpage>17</fpage>
<lpage>28</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_arttext&amp;pid=S0012-73532006000100003&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_abstract&amp;pid=S0012-73532006000100003&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_pdf&amp;pid=S0012-73532006000100003&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[Las herramientas metaCASE ofrecen una funcionalidad similar a la de las herramientas CASE convencionales para notaciones gráficas arbitrarias, una vez estas notaciones le sean especificadas adecuadamente. La principal dificultad de dichas herramientas es la especificación de las diferentes reglas de consistencia, que deben tenerse en cuenta cuando se usa una notación. En este artículo se presenta la especificación de dos reglas de consistencia del diagrama de clases de UML en el metaCASE DOME, codificadas en el lenguaje de programación Alter. Adicionalmente, se hace un análisis comparativo entre las especificaciones de los aspectos estructurales y de las reglas de consistencia en DOME y en la especificación de UML provista por el OMG.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[MetaCASE tools offer a similar functionality than conventional CASE tools for arbitrary graphical notations, once these notations had been suitably specified. The main obstacle affronted when using these tools, is the specification of the consistency rules that must be taken into account when using the graphical notation. In this paper, we present the specifications of two consistency rules of the UML class diagram on the metaCASE tool DOME, encoded on the programming language Alter. In addition, we analyze not only the specification of the structural features, but also the specification of the consistency rules of the UML class diagram in DOME, comparing with the UML specification provided by OMG.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[UML]]></kwd>
<kwd lng="es"><![CDATA[Metamodelamiento]]></kwd>
<kwd lng="es"><![CDATA[DOME]]></kwd>
<kwd lng="es"><![CDATA[Consistencia]]></kwd>
<kwd lng="en"><![CDATA[UML]]></kwd>
<kwd lng="en"><![CDATA[Metamodeling]]></kwd>
<kwd lng="en"><![CDATA[DOME]]></kwd>
<kwd lng="en"><![CDATA[Consistency]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[ <p align="center"><font size="4" face="Verdana, Arial, Helvetica, sans-serif"><b>ESTABLECIMIENTO       Y VERIFICACIÓN DE LA CONSISTENCIA EN  DOME: UN CASO DE ESTUDIO</b></font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>CONSISTENCY ESTABLISHMENT AND VERIFICATION IN DOME:  A CASE STUDY</b></font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>DANIEL CABARCAS</b>    <br>     <i>Grupo de Investigación UN-INFO. Escuela de Sistemas. Facultad de Minas.Universidad Nacional de Colombia, sede Medellín. <a href="mailto:dcabarc@unalmed.edu.co">dcabarc@unalmed.edu.co</a> </i></font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>FERNANDO   ARANGO </b>    <br>   <i>Grupo de Investigación UN-INFO. Escuela de Sistemas. Facultad de Minas.Universidad   Nacional de Colombia, sede Medellín. <a href="mailto:farango@unalmed.edu.co">farango@unalmed.edu.co</a></i> </font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>CARLOS   M. ZAPATA</b>     <br>   <i>Grupo de Investigación UN-INFO. Escuela de Sistemas. Facultad de Minas.Universidad Nacional de Colombia, sede Medellín. <a href="mailto:cmzapata@unalmed.edu.co">cmzapata@unalmed.edu.co</a></i></font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>Recibido     para revisar 11 de Febrero de 2005, aceptado 29 de Agosto de 2005, versión  final 21 de Septiembre de 2005</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>RESUMEN: </b>Las     herramientas metaCASE ofrecen una funcionalidad similar a la de las herramientas     CASE convencionales para notaciones gráficas arbitrarias, una   vez estas notaciones le sean especificadas adecuadamente.  La principal dificultad   de dichas herramientas es la especificación de las diferentes reglas de consistencia,   que deben tenerse en cuenta cuando se usa una notación.  En este artículo se   presenta la especificación de dos reglas de consistencia del diagrama de clases   de UML en el metaCASE DOME, codificadas en el lenguaje de programación Alter.   Adicionalmente, se hace un análisis comparativo entre las especificaciones de   los aspectos estructurales y de las reglas de consistencia en DOME y en la especificación de UML provista por el OMG. </font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>PALABRAS CLAVE:</b> UML, Metamodelamiento, DOME,   Consistencia. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>ABSTRACT:</b> MetaCASE     tools offer a similar functionality than conventional CASE tools for arbitrary     graphical notations, once these notations had been suitably specified. The     main obstacle affronted when using these tools, is the specification of the     consistency rules that must be taken into account when using the graphical     notation. In this paper, we present the specifications of two consistency     rules of the UML class diagram on the metaCASE tool DOME, encoded on the     programming language <i>Alter</i>. In addition, we analyze not   only the specification of the structural features, but also the specification   of the consistency rules of the UML class diagram in DOME, comparing with the   UML specification provided by OMG. </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>KEYWORDS:</b> UML, Metamodeling, DOME, Consistency.</font></p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>1. INTRODUCCIÓN</b> </font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Diseñadores de todo tipo de sistemas se están apoyando cada vez más en modelos  gráficos, no sólo para obtener una visión general del problema, sino para entender  mejor las implicaciones de sus decisiones y, más aún, para aplicar transformaciones  que reduzcan la brecha entre el diseño y la implementación, de manera que cada  vez es más necesario comprobar la integridad de un modelo gráfico, para asegurar  que el análisis posterior o un potencial paso de refinamiento entreguen un  resultado confiable.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Para seguirle     el paso a la gran cantidad de notaciones gráficas que aparecen  día a día para apoyar el diseño, en los últimos años han surgido varias metaherramientas  que permiten rápidamente generar herramientas para el modelamiento gráfico.  Algunas de ellas son: AToM3 (De Lara y Vangheluwe 2002), MetaEdit+ (MetaEdit+  2004), DOME (DOME 2004), GME (MetaGME 2004), DiaGen (DiaGen 2004), CodeSign  (CodeSign 2004) y Moses (Esser y Janneck 2001). Este tipo de herramientas aparecen  tratando de cumplir el papel que durante muchos años han cumplido generadores  automáticos de <i>parsers</i> o de analizadores léxicos, en la generación automática  de lenguajes de programación. En este último campo existe una notación unificadora  representada por la Forma <i>Backus Naur, </i>una estructura jerárquica tradicionalmente  usada para expresar las gramáticas textuales en un lenguaje de programación  específico.  En el metamodelamiento, empero, aún no existe una notación unificadora  para la definición de una nomenclatura gráfica.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Entre estas metaherramientas aparece DOME (<i>Domain  Modeling Environment</i>), una herramienta diseñada para especificar notaciones  gráficas y generar los editores correspondientes. Se destaca porque sus especificaciones  son orientadas a objetos y pueden ser interpretadas “on-the-fly” (se realizan  los cambios directamente en el metamodelo y se pueden usar inmediatamente  en la zona de edición de instancias). Además, DOME cuenta con muchos conceptos  preconstruidos que aceleran el desarrollo de notaciones gráficas y es soportado  por un poderoso “backend” para la generación de código y/o documentación  (Engstrom y Krueger 2000).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En este artículo se estudian las capacidades y facilidades que ofrece DOME  para verificar consistencia del diagrama de clases UML, mediante un caso de  estudio. En la sección 2 se introduce DOME como herramienta de metamodelamiento  y en la sección 3 se analiza una especificación en DOME que genera un editor  de UML. En la sección 4 se discuten brevemente los mecanismos que ofrece DOME  para especificar y verificar consistencia, con el fin de mostrar en la sección  5 la implementación de dos reglas de consistencia del metamodelo de UML sobre  la especificación introducida en la sección 3.</font></p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>2. DOMAIN MODELING ENVIRONMENT,  DOME.</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La versión 5.3 de DOME permite especificar una notación gráfica     como un modelo llamado <i>DOME Tool Specification,</i> DTS (DOME, 2004).     Para efectos prácticos  una DTS es creada, editada e interpretada utilizando ProtoDOME, que es una  herramienta visual. En una DTS se pueden distinguir dos componentes: una especificación  de alto nivel, basada en nodos, atributos, conectores, entre otros elementos  y un complemento a más bajo nivel, escrito en un lenguaje funcional basado  en <i>Scheme, </i>un lenguaje de programación similar al <i>Lisp</i>, para  implementar comportamientos especiales.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La especificación de los aspectos estructurales de una notación gráfica, parte  de uno o varios gráficos (denotados como <i>Graph</i> en el entorno de DOME)  que describen cada uno de los diagramas contemplados en la notación. Un <i>Graph</i> puede  contener  especificaciones de los siguientes tipos (véase la <a href="#fig01">Figura  1</a> para  apreciar la descripción gráfica de estos tipos en DOME): <i>Node,</i> <i>Connector,</i> <i>List  Element, Connection Constraint,</i> <i>Accessory part/whole,</i> <i>List Element  part/whole,</i> <i>Node part/whole,</i> <i>Generic Specification,</i> <i>Basic  Class,</i> <i>Property,</i> <i>Method</i> y <i>Relationship</i>.  En el resto  del artículo, por simplicidad, una especificación de tipo <i>Node</i> se denominará “un <i>Node</i>”,  y así  sucesivamente.</font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig01"></a><img src="/img/revistas/dyna/v73n148/a03fig01.gif">    <br>   Figura 1.</b> Los principales elementos de una DTS.    <br> <b>Figure 1.</b> Main DTS Elements</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Un <i>Node</i> en     una DTS, especifica una caja contenedora de otros elementos, de la que aparecerán instancias en los modelos elaborados bajo la notación.  Un <i>List Element</i> especifica (un tipo de) líneas de texto que usualmente  formarán parte de una lista contenida en una instancia de un <i>Node</i>. Un <i>Connector</i> especifica  una conexión en forma de línea entre instancias de <i>Nodes</i> u otros elementos.  Un <i>Connector</i> es restringido por <i>Connection Constraints</i>, que aparecen  conectando <i>Nodes</i> u otros elementos en la DTS, y especifican qué tipo  de objetos pueden ser conectados con instancias del <i>Connector</i>.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Existen otros     tres elementos que, en la DTS, expresan diferentes relaciones de contención para la notación gráfica: <i>Accessory part/whole</i>, <i>List  Element part/whole</i> y <i>Node part/whole</i>. Un <i>Generic Specification</i> especifica  una clase abstracta de la cual pueden heredar <i>Nodes</i>, <i>Connectors</i>,  etc., pero que no puede ser instanciada directamente en la notación gráfica.  Un <i>Basic Class</i> especifica un objeto sin representación gráfica, que  puede ser usado como estructura de almacenamiento interno. <i>Nodes</i>, <i>Graphs</i>, <i>List  Elements</i>, y otras especificaciones, pueden tener <i>Properties</i> y <i>Methods</i>.  Un <i>Property</i> especifica un atributo de una instancia en la notación gráfica,  que no aparece a la vista en el diagrama pero que se puede editar en un cuadro  de diálogo de edición de propiedades. Otra manera de especificar un atributo  es mediante un <i>Relationship</i> que se muestra, en la DTS, como una relación  dirigida que conecta un elemento a otro, indicando el tipo del atributo y el  contenedor del atributo. Un <i>Method</i> es un método programado en <i>Alter</i> (véase  sección 4). Adicionalmente se pueden especificar menús, botones y enumeraciones  (DOME 2004).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Con los elementos     descritos es posible elaborar cualquier tipo de metamodelo en DOME y realizar     las correspondientes instancias del mismo para la realización  de los diferentes modelos de usuario, como se hace en cualquiera de las herramientas  CASE. Es de especial interés en este artículo el metamodelo de UML expresado  en MOF (Meta Object Facility), el formalismo para expresión de metamodelos  de UML, tal como fue especificado por el OMG (OMG, 2004) y del cual en la <a href="#fig02">Figura  2</a> se puede apreciar una versión simplificada tomada de Medvidovic et al. (2002).</font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig02"></a><img src="/img/revistas/dyna/v73n148/a03fig02.gif">    <br>   Figura 2. </b>Metamodelo simplificado de UML en el formalismo MOF.    <br> <b>Figure 2. </b>An UML simplified metamodel in the MOF formalism.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A modo de ejemplo,     en la <a href="#fig03">Figura 3</a> se observa parte de la DTS que especifica los aspectos estructurales     de un diagrama de clases, como fue definida por el equipo creador de DOME     (esta especificación está incluida en la versión  5.3 de DOME). En el medio de la <a href="#fig03">Figura 3</a> aparece el <i>Node <u>Class</u></i> que  hereda del <i>Generic Specification <u>GeneralizableElement</u></i> de donde  obtienen los <i>Atributes <u>is-abstract</u></i>, <i><u>is-leaf</u></i> e <i><u>is-root</u></i>.  Entre los <i>Methods</i> de <i><u>Class</u></i> aparecen tanto métodos de la  versión original incluida en DOME (e.g. <i><u>qualified-name</u></i>), como  algunos que fueron adicionados en el contexto de este trabajo, como <i><u>all-parents</u></i> y <i><u>are-distinguishable</u></i>.  En la parte inferior la <a href="#fig03">Figura 3</a>, se pueden observar las relaciones de contención  entre el <i>Node <u>Class</u></i> y los elementos siguientes: el <i>List Element <u>Atribute</u></i>;  el <i>List Element <u>Operation</u></i>; y el <i>Node <u>ParameterBox</u></i>.  También se puede observar abajo a la derecha de la <a href="#fig03">Figura 3</a>, el <i>Connector</i> <i><u>InheritsFrom</u></i> que  es complementado por un <i>Connection Constraint</i> que aparece en la figura  como una relación que sale y llega a <i><u>Class</u></i>, rotulada “<i>InheritsFrom</i>”.  Dicha <i>Connection Constraint</i> indica que una instancia del <i>Connector <u>InheritsFrom</u></i>,  en la notación gráfica, es una relación que une dos instancias de <i><u>Class</u></i>.</font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig03"></a><img src="/img/revistas/dyna/v73n148/a03fig03.gif">    <br>   Figura 3.</b> Parte de la DTS del diagrama de clases.    <br> <b>Figure 3. </b>Portion of the class diagram DTS.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A partir de la     DTS descrita arriba, se genera un editor para diagramas de clases UML como     el que se puede observar en la <a href="#fig04">Figura 4</a>. En la barra de herramientas ubicada     en la parte izquierda aparecen íconos para <i><u>Note</u></i>, <i><u>Class</u></i>, <i><u>Attribute</u></i>, <i><u>Operation</u></i>, <i><u>Object</u></i>, <i><u>Parameter  Box</u></i>, <i><u>Constraint</u></i>, <i><u>Association</u></i>, <i><u>InheritsFrom</u></i> y <i><u>Dependency</u></i>.  Al lado derecho de la barra de herramientas, en la <a href="#fig04">Figura 4</a>, se observa la  región de edición donde aparece un ejemplo de un diagrama de clases construido  con el editor.</font></p>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="fig04"></a><img src="/img/revistas/dyna/v73n148/a03fig04.gif">    <br>   Figura 4.</b> Ventana del editor de DOME para diagramas de clases UML,  generado a partir de una DTS.    <br>  <b>Figure 4. </b>DOME Editor window for UML class diagram, generated from  a DTS.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A más bajo nivel, se puede adicionar a la especificación de los aspectos estructurales,  la especificación de otros aspectos de tipo lógico, tales como: restricciones  más complejas, rutinas de análisis y generadores de código o documentación.  Para ello, se debe usar el lenguaje de programación <i>Alter</i>, que es una  implementación casi completa del lenguaje <i>Scheme</i>, con algunas extensiones  que buscan realzar su funcionalidad como extensión de DOME. Aunque el propósito  principal de <i>Alter</i>, es facilitar la transformación de modelos, complementando  otra extensión grafica de DOME llamada Projector, también permite introducir  en la DTS, reglas de consistencia que se verifiquen sobre diagramas construidos  a partir de la notación gráfica definida por la DTS (Engstrom y Krueger 2000;  Pereira 2001). En la sección 4 se extiende el análisis del lenguaje <i>Alter</i> y  de los mecanismos para introducir reglas de consistencia.</font></p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>3. LA ESPECIFICACIÓN  DE UML EN DOME</b></font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La versión 5.3 de DOME viene con una serie de DTS’s construidas por el equipo  de DOME. Entre ellas se encuentran varias asociadas con la notación UML, que  incluyen diagramas de actividades, clases, colaboración, secuencias, estados  y casos de uso.  Estas DTS se tomaron como especificaciones de partida para  expresar las reglas de consistencia de UML en DOME; por ello, antes de abordar  el problema de la consistencia, se procederá a la realización de un análisis  de las similitudes y discrepancias de la DTS del diagrama de clases en DOME  en relación con la especificación de UML provista por el OMG (OMG, 2004). Una  descripción más detallada de la DTS del diagrama de clases en DOME se puede  obtener en el manual de DOME (DOME, 2004).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La especificación de UML en su versión 2.0 (OMG 2004) presenta diferencias  fundamentales con la especificación DOME  correspondiente. En primer lugar,  la especificación de los aspectos estructurales de UML es expresada en el formalismo  MOF (véase <a href="#fig02">Figura 2</a> para consultar nuevamente el metamodelo simplificado),  cuya apariencia es similar al diagrama de clases mismo (OMG 2004), mientras  que DOME emplea su propio lenguaje de metamodelamiento. Una diferencia particularmente  importante entre estos dos lenguajes, es que la especificación de los aspectos  estructurales de una notación gráfica en DOME, incluye los aspectos gráficos  propios de la notación definida.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Una consecuencia     de la mezcla entre los aspectos estructurales y los gráficos  se puede observar en la variedad de los elementos necesarios para la especificación  del diagrama de clases de UML en DOME (véase <a href="#fig03">Figura 3</a>). Allí, <i><u>Class</u></i> es  especificado por un <i>Node</i>, <i><u>InheritsFrom</u></i> por un <i>Connector</i> y <i><u>Attribute</u></i> por  un <i>List Element</i>.  La especificación del OMG es completamente uniforme  en su representación, puesto que <i><u>Class</u></i>, <i><u>Generalization</u></i> (que  viene a ser el equivalente a <i><u>InheritsFrom</u></i> en la especificación  de UML) y <i><u>Attribute</u></i> son especificados por medio de clases; la  variedad de la representación de estos elementos en DOME es consecuencia de  la necesidad de mezclar los aspectos estructurales con los aspectos gráficos  del diagrama. Así, un <i>Node</i> sirve para representar elementos que aparecerán  en la notación gráfica como cajas contenedoras de otros elementos (de allí que <i><u>Class</u></i> sea  un <i>Node</i>), mientras que un <i>List Element</i> se usa para representar  elementos que aparecerán en la notación gráfica contenidos por <i>Nodes</i> como  parte de una lista (de allí que <i><u>Attribute</u></i> sea un <i>List Element</i>).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Pese a la dificultad     para comparar la especificación del diagrama de clases  inmerso en el documento del OMG con aquélla provista por el equipo de DOME, éstas  comparten un lenguaje común y la estructura es similar. El lenguaje común se  refiere a los nombres de los elementos modelados (tales como: <i><u>GeneralizableElement</u></i>, <i><u>Class</u></i>, <i><u>Association</u></i>, <i><u>AssociationEnd</u></i>, <i><u>Feature</u></i>, <i><u>Attribute</u></i>, <i><u>Operation</u></i>, <i><u>Dependency</u></i>)  o sus atributos (i. e. <i><u>is-abstract</u></i>, <i><u>is-leaf</u></i> y <i><u>is-root</u></i> de <i><u>GeneralizableElement</u></i> o <i><u>is-navigable</u></i>, <i><u>aggregation</u></i> y <i><u>multiplicity</u></i> de <i><u>AssociationEnd</u></i>).  Aunque hay algunas pequeñas diferencias en los nombres utilizados, en términos  generales hay compatibilidad nominal.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En cuanto a la     estructura, las relaciones entre los elementos de la especificación  de UML, aunque sean expresadas de maneras diferentes, se preservan de la especificación  del OMG a la DTS. Por ejemplo, la relación entre <i><u>Atributte</u></i> y <i><u>Class</u></i>,  que en la especificación del OMG aparece implícitamente expresada por una relación  de agregación entre <i><u>Classifier</u></i> (ancestro de <i><u>Class</u></i>)  y <i><u>Feature</u></i> (ancestro de <i><u>Attribute</u></i>), en la DTS del  diagrama de clases en DOME aparece representada mediante un <i>List Element  part/whole</i> que conecta el <i>Node <u>Class</u></i> al <i>List Element</i> <i><u>Attribute</u></i> (véase  <a href="#fig03">Figura 3</a>).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Otro punto importante     de discrepancia surge de la separación de UML en varios  DTS’s independientes para cada diagrama UML. En DOME, los elementos a nivel  abstracto se especifican para servir a un diagrama específico. Por ejemplo, <i><u>Object</u></i> y <i><u>Message</u></i> aparecen  como <i>Nodes</i> dos veces independientes en las DTS’s del diagrama de colaboración  y en la del diagrama de secuencia. Incluso el <i>Node</i> <i><u>Object</u></i> aparece  también en la DTS del diagrama de clases. Esto además, imposibilita especificar  un núcleo común a varios diagramas, lo que dificulta aun más basarse en la  especificación del OMG.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Otra consecuencia     de separar la especificación de UML en diagramas es la imposibilidad  de imitar el uso de herencia que se observa en la especificación de la OMG.  La falta de un núcleo común limita el surgimiento de generalizaciones de más  alto nivel. Adicionalmente, la herencia en una DTS tiene ciertas limitaciones  implícitas; debido a la variedad de elementos de modelamiento (<i>Node</i>, <i>List  Element</i>, etc.) y sus particularidades, se ven limitadas las características  generalizables.</font></p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>4. EL LENGUAJE       DE PROGRAMACIÓN <i>ALTER</i> Y  LOS MECANISMOS PARA EXPRESAR CONSISTENCIA EN DOME</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Como se mencionó en la sección 2, el lenguaje de programación <i>Alter</i> se  puede utilizar para implementar reglas de consistencia más complejas que aquellas  que se especifican gráficamente en una DTS. Para ello, en primer lugar, es  posible incluir métodos codificados en  <i>Alter</i>, sobre los <i>Nodes, Connectors,  List Elements, Generic Specifications, Graphs</i> o <i> Basic Classes</i>.  Un método se programa por ejemplo en un <i>Node</i>, escribiendo una expresión  lambda que, en tiempo de ejecución, ata el símbolo <i>self</i> a una instancia  de dicho <i>Node </i>y, posiblemente, otros parámetros a otras instancias (DOME  2004). Ya con esta capacidad y el poder expresivo inherente a <i>Scheme</i>,  utilizando un evaluador que posee  DOME para sentencias de <i>Alter</i>, se  podría hacer verificación de consistencia.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Sin embargo, hay     otra característica     de DOME, que permite verificar consistencia justo en los momentos en que     puede ser violada, de modo que se prevenga o se advierta al modelador cuando     cometa la falta. Esto se puede lograr programando en <i>Alter</i> ciertos     métodos específicos sobre los <i>Nodes, Connectors,  List Elements</i>, etc., que el editor generado a partir de la DTS, disparará como  respuesta a ciertos eventos. Por ejemplo, a un <i>Node </i>llamado <i><u>primerNode</u> </i>se  le puede programar el método <i>Creation Check</i> que debe retornar un valor  booleano; el método será ejecutado justo antes de instanciar un <i><u>primerNode</u></i> y,  en caso de retornar <i>false</i> la creación será abortada, mientras que si  el método retorna <i>true</i>, la instancia de <i><u>primerNode</u></i> será  creada.</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El lenguaje <i>Alter</i> presenta     dos características que le facilitan servir  en el sentido mencionado:</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">(1) Varias primitivas     han sido adicionadas a aquellas especificadas en la versión 4 del Reporte     revisado del Lenguaje <i>Scheme</i>, para soportar la  manipulación de estructuras construidas con DOME.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">(2) El <i>Alter</i> posee     un conjunto amplio de primitivas para el manejo gráfico y basado en ventanas  (DOME 2004).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En las secciones     5.1 y 5.2, a medida que se presente el código <i>Alter</i>,  se introducirán algunas de las particularidades del lenguaje.</font></p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>5. CASO DE       ESTUDIO: DOS REGLAS DE CONSISTENCIA DEL METAMODELO DEL DIAGRAMA DE CLASES       DE UML Y SU IMPLEMENTACIÓN  EN DOME</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Para el caso de     estudio se seleccionaron dos reglas de consistencia de la especificación de UML tomadas de su versión 2.0 (véase <a href="#tab01">Tabla     1</a>). A continuación  se presentan las reglas, aunque es necesario advertir que fueron modificadas  de su versión original por varias razones: (1) Aquí las reglas se expresaron  en términos de las metaclases instanciables del metamodelo de UML para poder  hacer un paralelo a otra especificación que no incluye toda la estructura de  herencia; (2) Una regla como la segunda sólo tiene sentido si se acompaña de  cada una de las definiciones que ayudan a definirla y (3) se suprimieron algunos  aspectos que no están modelados en la implementación provista por DOME. Las  reglas son las siguientes:</font></p> <ol start=1 type=1>      <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Una clase no puede heredar directa ni indirectamente de si misma.</font></li>      <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Todos los miembros (<u>miembros heredados</u>,      atributos poseídos y operaciones  poseídas) de una clase deben <u>ser distinguibles</u> dentro de ella.  </font>    <ul>        <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> Dos miembros <b>son distinguibles</b> dentro      de una clase si (a) tienen tipos no relacionados o (b) si son ambos de tipo      Operación, tienen <u>diferente signatura</u>, o (c) en caso de tener <u>tipos        relacionados</u> (diferentes de operación), tienen nombre diferente.</font></li>        <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Los <b>miembros heredados</b> de      una clase <i>A</i>, son los miembros de las clases de las que hereda <i>A</i>,      excepto aquellas propiedades que son redefinidas en <i>A</i>. </font></li>        ]]></body>
<body><![CDATA[<li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El concepto de <b>tipo relacionado</b> proviene      del metamodelo. Dos instancias tienen tipos relacionados si son instancias      de la misma metaclase o de metaclases que heredan una de la otra.</font></li>        <li><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Dos Operaciones tienen <b>diferente      signatura</b> si tienen diferente nombre, o en caso de tener el mismo nombre,      la lista formada por el tipo de cada parámetro es distinta de una a la otra.</font></li>      </ul>  </li>     </ol>     <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><a name="tab01"></a>Tabla       1.</b> Referencias a la especificaci&oacute;n de UML donde aparecen las       reglas a implementar (OMG, 2004).    <br>  <b>Table 1.</b> UML specification references that show the rules to implement  (OMG, 2004)</font>    <br>  <img src="/img/revistas/dyna/v73n148/a03tab01.gif"></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En las siguientes   dos secciones se detalla la implementación en DOME de las   reglas de consistencia mencionadas, partiendo de la especificación en OCL entregada   por el OMG (OMG 2004). Finalmente en la sección 5.3 se hace un análisis de   la implementación realizada.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>5.1. REGLA 1: HERENCIA CIRCULAR</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En la especificación de UML 2.0 la regla en cuestión se expresa mediante la  siguiente expresión OCL en el contexto de <i><u>Classifier</u></i>:</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Courier New, Courier, mono"><i>not self.allParents()-&gt;includes(self)</i></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Además, la función <i>allParents</i> no es una primitiva del lenguaje sino  que, en el contexto de <i><u>Classifier</u></i>, se especifica así:</font></p>     <p><font size="2" face="Courier New, Courier, mono"><i>allParents =    <br>    self.parents()-&gt;    <br>       union(self.parents()-&gt;collect(p |    <br>         p.allParents())</i></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">y, por último, la función <i>parents</i> se  especifica de la siguiente forma en el contexto de <i><u>Classifier</u></i>:</font></p>     <p><font size="2" face="Courier New, Courier, mono"><i>parents = generalization.general</i></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En DOME se trata     de hacer algo similar.  Se implementó un método <i>parents</i> en  el <i>Node <u>Class</u></i>, utilizando el lenguaje <i>Alter</i>, así:</font></p>     <p><font size="2" face="Courier New, Courier, mono"><i>(add-method (<b>parents</b> (UMLClass) self)    ]]></body>
<body><![CDATA[<br>    (map destination    <br>       (select (outgoing-arcs self)    <br>         (lambda (x) (is-a? x UMLInheritsFrom)))))</i></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Donde la primitiva <i>outgoing-arcs</i> retorna     una lista con todas las conexiones que salen de su único argumento (instancia     de un <i>Node</i>). La primitiva <i>select</i> recibe  dos argumentos, una lista <i>list</i> y un procedimiento de un argumento <i>proc</i>,  y retorna una lista con los elementos de <i>list</i> para los cuales <i>proc</i> retorna <i>true</i>.  Finalmente la primitiva <i>is-a?</i> recibe un objeto y el nombre de un tipo  y retorna <i>true</i> si el objeto es del tipo indicado o <i>false</i> de lo  contrario.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Luego, con base en este método, se implementa el método <i>all-parents</i> así:</font></p>     <p><font size="2" face="Courier New, Courier, mono"><i>(add-method (<b>all-parents</b> (UMLClass) self)    <br>    (let ((p (parents self)))    <br>       (if (eq? p '())    <br>         '()    <br>         (append p    ]]></body>
<body><![CDATA[<br>            (apply append (map all-parents p)))))))</i></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La manera de implementar     la regla en sí, depende de la manera en que se quiera  verificar. En este trabajo la elección fue programar el método <i>Creation  Check</i> del <i>Connector <u>InheritsFrom</u></i>, de manera que, antes de  instanciar una relación de herencia, el editor verifique si dicha inserción  provocaría una herencia circular y en tal caso no se permita su instanciación.  El método queda implementado así:</font></p>     <p><font size="2" face="Courier New, Courier, mono"><i>(lambda (container . args)    <br>    (not (memq (car args)    <br>       (all-parents (cadr args)))))</i></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Donde la lista <i>args</i>, tiene como primer elemento el origen de la herencia  y como segundo elemento el destino de la herencia.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>5.2. REGLA 2: UNICIDAD DE NOMBRES</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En la especificación de UML2.0 la regla en sí es     condensada en la invariante <i>membersAreDistinguishable()</i> en  el contexto de <i><u>NameSpace</u></i>, lo cual se complementa con la definición  de la función:</font></p>     <p><font size="2" face="Courier New, Courier, mono"><i>Namespace::membersAreDistinguishable() : Boolean;    <br> membersAreDistinguishable =    ]]></body>
<body><![CDATA[<br>    self.member-&gt;forAll( memb |    <br>       self.member-&gt;excluding(memb)-&gt;forAll(other |    <br>         memb.isDistinguishableFrom(other, self)))</i></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Aunque el conjunto <i>self.member</i> queda     implícitamente definido por el  metamodelo de UML y la semántica de OCL, la restricción 4 (véase <a href="#tab01">Tabla  1</a>) de <i><u>Classifier</u></i> complementa  la definición al especificar inheritedMember que, para el caso de <i><u>Class</u></i>,  retorna un subconjunto de <i>member</i>. De la misma manera, la restricción  2 (véase <a href="#tab01">Tabla 1</a>) de <i><u>Namespace</u></i> especifica <i>importedMember</i> que  en el caso de una <i><u>Class</u></i>, retorna un subconjunto de <i>member</i>.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Más importante es la definición de la función <i>isDistinguishableFrom,</i> definida  en el contexto de <i><u>NamedElement</u></i></font></p>     <p><font size="2" face="Courier New, Courier, mono"><i>NamedElement::isDistinguishableFrom(n:NamedElement, ns: Namespace):  Boolean;    <br> isDistinguishable =    <br> </i><b><i>   if </i></b><i>self.oclIsKindOf(n.oclType) <b>or    <br> </b></i><b><i>      </i></b><i>n.oclIsKindOf(self.oclType)    <br> </i><b><i>   then </i></b><i>ns.getNamesOfMember(self)-&gt;    ]]></body>
<body><![CDATA[<br>       intersection(ns.getNamesOfMember(n))-&gt;    <br>         isEmpty()    <br> </i><b><i>   else </i></b><i>true    <br> </i><b><i>endif</i></b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Y su redefinición     en <i><u>BehavioralFeature</u></i>, que busca tener en cuenta  toda la signatura</font></p>     <p><font size="2" face="Courier New, Courier, mono"><i>BehavioralFeature::isDistinguishableFrom(n: NamedElement,  ns: Namespace): Boolean;    <br> isDistinguishableFrom =    <br> </i><b><i>   if </i></b><i>n.oclIsKindOf(BehavioralFeature)    <br> </i><b><i>   then    <br>       if </i></b><i>ns.getNamesOfMember(self)-&gt;    ]]></body>
<body><![CDATA[<br>         intersection(ns.getNamesOfMember(n))-&gt;    <br>             notEmpty()    <br> </i><b><i>      then </i></b><i>Set{}-&gt;including(self)-&gt;including(n)-&gt;    <br>         isUnique( bf | bf.parameter-&gt;    <br>            collect(type))    <br> </i><b><i>      else </i></b><i>true    <br> </i><b><i>      endif    <br>    else </i></b><i>true    <br> </i><b><i>endif</i></b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Cabe anotar que     parte de la complejidad de las dos últimas piezas de código  OCL, es insustancial para el análisis que se realiza debido a que, en el modelo  de clases de DOME modificado para este trabajo, un miembro tiene un único nombre,  mientras que el metamodelo de UML permite que un mismo miembro tenga varios  nombres, producto de varias importaciones bajo diferentes alias. Por tanto  la expresión</font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Courier New, Courier, mono"><i>ns.getNamesOfMember(self)-&gt;    <br>    intersection(ns.getNamesOfMember(n))-&gt;    <br>       notEmpty()</i></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">podría ser reemplazada, para este caso, por self.name = n.name.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">De nuevo, en DOME se trata de imitar la estructura, utilizando <i>Alter</i>.  Se agregan métodos <i>is-distinguishable-from?</i> al <i>List Element <u>Attribute</u></i> y  al <i>List Element <u>Operation</u></i>, especificados respectivamente por  las siguientes expresiones lambda.</font></p>     <p><font size="2" face="Courier New, Courier, mono"><i>(add-method (<b>is-distinguishable-from?</b> (UMLAttribute)  self other)    <br>    (not (equal? (name self) (name other))))    <br> (add-method (<b>is-distinguishable-from?</b> (UMLOperation) self other)    <br>    (or (not (equal? (name self) (name other)))    <br>         (not (equal? (length (get-property &quot;arguments&quot; self))    ]]></body>
<body><![CDATA[<br>         (length (get-property &quot;arguments&quot; other))))    <br>         (not (equal? (length (get-property &quot;arguments&quot; self)) 0))    <br>         (not (apply and (map equal? (get-property &quot;arguments&quot; self)    <br>            (get-property &quot;arguments&quot; other))))))</i></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Donde la primera     expresión imita el genérico <i>NamedElement::isDistinguishableFrom</i> y  la segunda, definida para el <i>List Element <u>Operation</u></i>, hace el  papel de la versión redefinida en <i><u>BehavioralFeature</u></i>.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En la anterior     pieza de código se introdujo la primitiva de <i>Alter</i> <i>get-property</i>.  Este método recibe dos argumentos, una cadena de caracteres <i>propName</i> y  un objeto object que pueda poseer <i>Properties</i> como una instancia de un <i>Node</i> o  de un <i>List Element</i>. Retorna el valor de la <i>property</i> identificada  con el nombre <i>propName </i>de<i> object</i>. También se introdujo la primitiva <i>name,</i> que  recibe un objeto y retorna su nombre (el objeto debe poseer nombre).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">A continuación, fue necesario agregar los métodos <i>all-attributes</i> y <i>all-operations</i> al <i>Node <u>Class</u></i>,  para recolectar los atributos (y operaciones respectivamente) heredados, teniendo  en cuenta no repetir aquellos atributos (u operaciones) que son redefiniciones  de atributos declarados más arriba en la descendencia. A continuación se presenta  su codificación en <i>Alter</i>:</font></p>     <p><font size="2" face="Courier New, Courier, mono"><i>(add-method (<b>all-attributes</b> (UMLClass) self)    <br>    (letrec ((attsSelf (select (elements self) (lambda (x) (is-a? x UMLAttribute))))    <br>               (parentsSelf (parents self))    ]]></body>
<body><![CDATA[<br>               (attsParents (if (eq? parentsSelf '()) '() (apply append (map all-attributes parentsSelf))))    <br>               (appendNoRepeat (lambda (l1 l2)    <br>                  (cond ((eq? l1 '()) l2)    <br>                    ((detect l2 (lambda (x) (not    <br>                          (is-distinguishable-from? x (car l1)))) #f)    <br>                       (appendNoRepeat (cdr l1) l2))    <br>                    (else (cons (car l1)    <br>                               (appendNoRepeat (cdr l1) l2)))))))    <br>    (appendNoRepeat attsParents attsSelf)))    <br> (add-method (<b>all-operations</b> (UMLClass) self)    ]]></body>
<body><![CDATA[<br>    (letrec ((opsSelf (select (elements self) (lambda (x) (is-a? x UMLOperation))))    <br>               (parentsSelf (parents self))    <br>               (opsParents (if (eq? parentsSelf '()) '() (apply append (map all-operations parentsSelf))))    <br>               (appendNoRepeat (lambda (l1 l2)    <br>                  (cond ((eq? l1 '()) l2)    <br>                     ((detect l2 (lambda (x) (not    <br>                          (is-distinguishable-from? x (car l1)))) #f)    <br>                       (appendNoRepeat (cdr l1) l2))    <br>                    (else (cons (car l1)    <br>                               (appendNoRepeat (cdr l1) l2)))))))    ]]></body>
<body><![CDATA[<br>    (appendNoRepeat opsParents <u>opsSelf</u>)))</i></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">La primitiva de <i>Alter</i> <i>detect</i> es similar a <i>select</i> reseñada  en la sub-sección anterior, excepto que sólo retorna el primer elemento de  la lista que satisfaga el predicado (que retorne <i>true</i> al procedimiento).</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Finalmente se     escribió una función genérica  que comprueba si los elementos de una lista de miembros de una <i><u>class</u></i> son distinguibles.</font></p>     <p><font size="2" face="Courier New, Courier, mono"><i>add-method (<b>are-distinguishable?</b> (UMLClass) self members)    <br>    (do ((attributes members (cdr attributes)))    <br>       ((or (eq? attributes '()) (eq? (cdr attributes) '())    <br>         (not (apply and (map    <br>               (lambda (x) (is-distinguishable-from? (car attributes) x))    <br>               (cdr attributes)))))    <br>       (or (eq? attributes '()) (eq? (cdr attributes) '())))))</i></font></p>     ]]></body>
<body><![CDATA[<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Con lo que la  regla de consistencia queda expresada mediante la siguiente expresión:</font></p>     <p><font size="2" face="Courier New, Courier, mono"><i>(and    (are-distinguishable?    <br>            self (all-attributes self))    <br>         (are-distinguishable?    <br>            self (all-operations self)))</i></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Esta expresión se incluyó en el método <i>Line Style</i> del <i>Node <u>Class</u></i> de  la siguiente manera:</font></p>     <p><font size="2" face="Courier New, Courier, mono"><i>(lambda (self)    <br>    (if (and     (are-distinguishable? self (all-attributes self))    <br>                  (are-distinguishable? self (all-operations self)))    <br>       'normal    ]]></body>
<body><![CDATA[<br>       'simpledash))</i></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">El método <i>Line Style</i> es ejecutado por el editor generado cada vez que  una instancia del <i>Node</i> requiere ser repintada, y retorna un estilo de  línea que se emplea para delinear la instancia del <i>Node</i>. Lo que se logra  entonces con el código presentado es que cuando una <i><u>class</u></i> tiene  miembros no distinguibles, su borde sea delineado con una línea punteada, mientras  que si todos sus miembros son distinguibles entre sí, la <i><u>class</u></i> es  delineada por una línea sólida. En la <a href="#fig04">Figura 4</a>, se observa cómo la clase <i><u>Rect</u></i> posee  dos atributos no distinguibles (<i><u>dim</u></i>) y se puede apreciar el borde  de la clase que aparece punteado.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>5.3 ANÁLISIS DE LA IMPLEMENTACIÓN</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">En primer lugar, el lenguaje <i>Alter</i>,     combinado con la descripción orientada  a objetos de la DTS, ofrece una flexibilidad muy amplia en cuanto a verificación  de consistencia. Prueba de ello es la implementación del método <i>all-operations</i> que  tiene en cuenta no sólo la signatura de las Operations sino también la redefinición.  Además, los mecanismos ofrecidos para verificar la consistencia en tiempo real,  son suficientemente efectivos para desarrollar un entorno de edición confortable  para una notación gráfica.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Sin embargo, la     legibilidad del código <i>Alter</i> es baja. Esto se debe  en parte a la inherente ilegibilidad de la sintaxis prefija de <i>Lisp</i>,  pero también a la manera en que se accede a datos del modelo con <i>Alter</i>.  La implementación del método <i>parents</i>, presentada en la sección 5.1,  ilustra este hecho claramente: mientras en OCL una sola línea de código basta  para implementarlo, en <i>Alter</i> hace falta seleccionar (expresión <i>select</i>)  de entre las relaciones que parten de la clase, aquellas de tipo <i>InheritsFrom;</i> Adicionalmente,  es necesario aplicar el método <i>destination</i> a cada una de las relaciones  (expresión <i>map</i>) para obtener el extremo opuesto de cada una. A medida  que crece la complejidad, crece aún más este problema como se observa en el  método <i>all-attributes</i>, donde se requiere definir un método interno <i>appendNoRepeat</i> para  seleccionar todos los atributos sin que se repitan las redefiniciones, ocultando  el sentido declarativo de la regla.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Finalmente, es     importante destacar que la agrupación del código que fue presentada  en las secciones 5.1 y 5.2, es producto de la recolección de cada una de las  piezas de código dispersas a través de toda la especificación. Al enfrentarse  directamente con la implementación, surgen varios problemas en la búsqueda  de dicho código, cuyas piezas se encuentran esparcidas por la DTS. Sin embargo,  el mismo problema surge al intentar compendiar las reglas de consistencia de  la especificación de UML provista por el OMG. El esfuerzo por separar el código  en pequeñas partes coherentes en sí mismas y referentes al contexto adecuado,  causa la dispersión del total de la información concerniente a una regla en  sí.</font></p>     <p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><b>6. CONCLUSIONES Y TRABAJOS FUTUROS</b></font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Se presentó en este artículo la implementación de dos reglas de consistencia  de la especificación de UML 2.0 (OMG 2004), para un editor generado con la  herramienta metaCASE DOME.  Si bien la complejidad se incrementó al emplear  el lenguaje de programación <i>Alter</i>, en comparación con la especificación  de las reglas en OCL, fue posible concebir una implementación coherente.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><i>Alter</i> hereda el poder expresivo de los lenguajes funcionales tipo <i>Lisp</i>,  pero dificulta preservar el sentido declarativo de las reglas de consistencia.  Por esa misma naturaleza diferente de <i>Alter</i> frente a OCL, la tarea de  traducir las reglas escritas en OCL (OMG 2004) a <i>Alter</i> es dispendiosa.  Pero, además, la traducción se dificulta aún más, debido a las diferencias  inevitables entre la especificación de los aspectos estructurales de UML al  pasar del documento de la OMG (OMG 2004) a DOME.</font></p>     <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Por otro lado,     la manera en que el usuario del editor percibe el control sobre las reglas,     es aceptable, gracias a los mecanismos que ofrece DOME para programar la     respuesta a algunos eventos del editor. Sin embargo, el conjunto de eventos  programables es reducido lo que dificulta la programación.</font></p>     ]]></body>
<body><![CDATA[<!-- ref --><p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Finalmente, para     la continuación de este trabajo, se espera introducir un  conjunto más nutrido de reglas de consistencia, sobre un editor de UML generado  con DOME. Vale la pena abordar también otros diagramas, además del de clases,  pero la necesidad de separar las especificaciones de los diferentes diagramas  de UML en DOME dificultará introducir reglas de consistencia que involucren  varios diagramas.</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000203&pid=S0012-7353200600010000300001&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref -->[2]</b></font></td><td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">ENGSTROM, E. y KRUEGER, J. 2000. Building and rapidly evolving domain-specific tools with DoME. Proceedings of the IEEE International Symposium on Computer-Aided Control System Design, 2000. CACSD 2000. Pp. 83-88.</font></td></tr> <tr><td valign="top" align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000204&pid=S0012-7353200600010000300002&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref -->[3]</b></font></td><td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">DOME. What is Dome. Available: <a href="mailto:http://www.htc.honeywell.com/dome/description.htm">http://www.htc.honeywell.com/dome/description.htm</a>. [Citado 8 de Diciembre de 2004]</b></font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">.</font></td></tr> <tr><td valign="top" align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000205&pid=S0012-7353200600010000300003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref -->[4]</b></font></td><td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">DE LARA, J., y VANGHELUWE, H.. AToM3: A tool for Multi-Formalism and Meta-Modelling. Proceedings of the Fifth International Conference on Fundamental Approaches to Software Engineering. Pp. 174-188. 2002.</font></td></tr> <tr><td valign="top" align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000206&pid=S0012-7353200600010000300004&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref -->[5]</b></font></td><td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">METAEDIT+. MetaCase Consulting. Available: <a href="http://www.metacase.com" target="ventana">http://www.metacase.com</a>. [Citado 8 de Diciembre de 2004]</b></font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">.</font></td></tr> <tr><td valign="top" align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000207&pid=S0012-7353200600010000300005&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref -->[6]</b></font></td><td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">METAGME (Meta-Graphical Model Editor). Vanderbilt University Institute for Software Integrated Systems ( ISIS). Available: <a href="http://www.isis.vanderbilt.edu/Projects/gme/default.html">http://www.isis.vanderbilt.edu/Projects/gme/default.html</a> [Citado 8 de Diciembre de 2004]</b></font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">.</font></td></tr> <tr><td valign="top" align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000208&pid=S0012-7353200600010000300006&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref -->[7]</b></font></td><td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">DIAGEN. University of Erlangen. Available: <a href="http://www2.informatik.uni-erlangen.de/DiaGen/">http://www2.informatik.uni-erlangen.de/DiaGen/</a> [Citado 8 de Diciembre de 2004]</b></font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">.</font></td></tr> <tr><td valign="top" align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000209&pid=S0012-7353200600010000300007&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref -->[8]</b></font></td><td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">CODESIGN. The CodeSign Project. Available: <a href="http://www.tik.ee.ethz.ch/~codesign/">http://www.tik.ee.ethz.ch/~codesign/</a> [Citado 8 de Diciembre de 2004]</b></font><font size="2" face="Verdana, Arial, Helvetica, sans-serif">.</font></td></tr> <tr><td valign="top" align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000210&pid=S0012-7353200600010000300008&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref -->[9]</b></font></td><td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">R. ESSER and J. W. JANNECK. A Framework for Defining Domain-Specific Visual Languages. Workshop on Domain Specific Visual Languages, ACM Conference on Object-Oriented Programming, Systems, Languages and Applications (OOPSLA-2001). 2001.</font></td></tr> <tr><td valign="top" align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000211&pid=S0012-7353200600010000300009&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref -->[10]</b></font></td><td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">MEDVIDOVIC, N., ROSENBLUM, D., REDMILES, D. y ROBBINS, J. Modeling software architectures in the Unified Modeling Language. En: ACM Transactions on Software Engineering and Methodology (TOSEM), Volumen 11, No. 1, 2002. Pp. 2-57.</font></td></tr> <tr><td valign="top" align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000212&pid=S0012-7353200600010000300010&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref -->[11]</b></font></td><td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">M.       A. PEREIRA REMELHE. Simulation and VisualizationSupport for User-defined       Formalisms Using Meta-Modeling and Hierarchical Formalism Transformation.       Proceedings of the 2001 IEEE International Conference on Control Applications.   México City. 2001.</font></td></tr> </table>    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000213&pid=S0012-7353200600010000300011&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --> ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="">
<collab>Object Management Group</collab>
<article-title xml:lang="en"><![CDATA[OMG: Unified Modeling Language Specification]]></article-title>
<source><![CDATA[]]></source>
<year>8 de</year>
<month> D</month>
<day>ic</day>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[ENGSTROM]]></surname>
<given-names><![CDATA[E.]]></given-names>
</name>
<name>
<surname><![CDATA[KRUEGER]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Building and rapidly evolving domain-specific tools with DoME]]></article-title>
<source><![CDATA[]]></source>
<year>2000</year>
<conf-name><![CDATA[ Proceedings of the IEEE International Symposium on Computer-Aided Control System Design]]></conf-name>
<conf-date>2000</conf-date>
<conf-loc> </conf-loc>
</nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="">
<collab>DOME</collab>
<article-title xml:lang="en"><![CDATA[What is Dome]]></article-title>
<source><![CDATA[]]></source>
<year>8 de</year>
<month> D</month>
<day>ic</day>
</nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[DE LARA]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[VANGHELUWE]]></surname>
<given-names><![CDATA[H.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[AToM3: A tool for Multi-Formalism and Meta-Modelling]]></article-title>
<source><![CDATA[Proceedings of the Fifth International Conference on Fundamental Approaches to Software Engineering]]></source>
<year>2002</year>
<page-range>174-188</page-range></nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="">
<article-title xml:lang="en"><![CDATA[METAEDIT+]]></article-title>
<source><![CDATA[]]></source>
<year>8 de</year>
<month> D</month>
<day>ic</day>
</nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="">
<collab>Vanderbilt University Institute for Software Integrated Systems</collab>
<article-title xml:lang="en"><![CDATA[METAGME (Meta-Graphical Model Editor)]]></article-title>
<source><![CDATA[]]></source>
<year>8 de</year>
<month> D</month>
<day>ic</day>
</nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="">
<collab>University of Erlangen</collab>
<article-title xml:lang="en"><![CDATA[DIAGEN]]></article-title>
<source><![CDATA[]]></source>
<year>8 de</year>
<month> D</month>
<day>ic</day>
</nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="">
<article-title xml:lang="en"><![CDATA[CODESIGN]]></article-title>
<source><![CDATA[]]></source>
<year>8 de</year>
<month> D</month>
<day>ic</day>
</nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[ESSER]]></surname>
<given-names><![CDATA[R.]]></given-names>
</name>
<name>
<surname><![CDATA[JANNECK]]></surname>
<given-names><![CDATA[J. W.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A Framework for Defining Domain-Specific Visual Languages]]></article-title>
<source><![CDATA[]]></source>
<year></year>
<conf-name><![CDATA[ ACM Conference on Object-Oriented Programming, Systems, Languages and Applications]]></conf-name>
<conf-date>2001</conf-date>
<conf-loc> </conf-loc>
</nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[MEDVIDOVIC]]></surname>
<given-names><![CDATA[N.]]></given-names>
</name>
<name>
<surname><![CDATA[ROSENBLUM]]></surname>
<given-names><![CDATA[D.]]></given-names>
</name>
<name>
<surname><![CDATA[REDMILES]]></surname>
<given-names><![CDATA[D.]]></given-names>
</name>
<name>
<surname><![CDATA[ROBBINS]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Modeling software architectures in the Unified Modeling Language]]></article-title>
<source><![CDATA[ACM Transactions on Software Engineering and Methodology (TOSEM)]]></source>
<year>2002</year>
<volume>11</volume>
<numero>1</numero>
<issue>1</issue>
<page-range>2-57</page-range></nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[PEREIRA REMELHE]]></surname>
<given-names><![CDATA[M. A.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Simulation and VisualizationSupport for User-defined Formalisms Using Meta-Modeling and Hierarchical Formalism Transformation]]></article-title>
<source><![CDATA[]]></source>
<year></year>
<conf-name><![CDATA[ Proceedings of the 2001 IEEE International Conference on Control Applications]]></conf-name>
<conf-date>2001</conf-date>
<conf-loc>México </conf-loc>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
