Compartir a través de


Introducción a los modelos, las clases y las relaciones

Un lenguaje específico (DSL) se define mediante un archivo de definición ADSL, así como cualquier código de programa personalizado que puede escribir. La mayor parte del código de programa en la solución ADSL se genera de este archivo.

Este tema describe las características centrales de definición ADSL.

La definición ADSL

Al abrir Dsl\DslDefinition.dsl, la ventana de Visual Studio es similar a la siguiente imagen.

diseñador dsl

La información más importante de definición ADSL se muestra en el diagrama de la definición del ADSL. Información adicional, que también es parte de DslDefinition.dsl, se muestra en el Explorador ADSL, que aparece normalmente en el lado del diagrama. Ejecuta el diagrama las tareas frecuentes, y con el Explorador ADSL para personalizaciones más avanzados.

El diagrama de definición ADSL muestra las clases de dominio que definen los elementos de modelo, y las relaciones que definen vínculos entre los elementos de modelo. También muestra las formas y conectores que se utiliza para mostrar los elementos del modelo al usuario.

diseñador dsl con swimlane (calle)

Cuando selecciona un elemento en la definición de DSL, en el diagrama o en el Explorador ADSL, información sobre él se muestra en la ventana Propiedades. Información adicional se puede mostrar en la ventana detalles de ADSL.

Los modelos son instancias del dominio (ADSL)

Un modelo es una instancia ADSL creado por un usuario. Un modelo contiene los elementos del modelo, que son instancias de las clases de dominio que define, y los vínculos entre los elementos, que son instancias de las relaciones de dominio definido. Un modelo puede tener formas y conectores, que muestran los elementos y los vínculos modelos en un diagrama. La definición ADSL incluye las clases de la forma, las clases de conector, y una clase para el diagrama.

Una definición de ADSL también se conoce como modelo de dominio. Una definición o un modelo de dominio ADSL es la representación en tiempo de diseño del lenguaje específico, mientras que el modelo crea instancias en tiempo de ejecución del lenguaje específico.

Las clases de dominio definen elementos modelos

Las clases de dominio se utilizan para crear los diferentes elementos del dominio, y las relaciones de dominio son vínculos entre los elementos. Son la representación en tiempo de diseño de los elementos y los vínculos que se crearán instancias por los usuarios del lenguaje diseño-específico cuando crean los modelos.

Esta ilustración muestra un modelo que se ha creado por el usuario de una biblioteca de música ADSL. Álbumes de música se representan mediante los marcos que contienen listas de canciones. Los cuadros redondeados representan, y están conectados a los artistas con álbumes a los que han participado.

Modelo de instancia de DSL generado

La definición ADSL separa dos aspectos. La apariencia de los elementos de modelo en el diagrama del modelo se define mediante clases de la forma y clases de conectores. Información llevó en el modelo se define mediante clases de dominio y relaciones de dominio.

La ilustración siguiente muestra las clases y las relaciones de dominio en la definición de ADSL de la biblioteca de Music.

Relaciones de incrustación y referencia

La ilustración muestra cuatro clases de dominio: música, álbum, Artist y Song. Las clases de dominio definen propiedades de dominio como nombre, title, etc. En el modelo de instancia, los valores de algunas de estas propiedades se muestran en el diagrama.

Entre las clases son las relaciones de dominio: MusicHasAlbums, MusicHasArtists, AlbumbHasSongs, y ArtistAppearedOnAlbums. Las relaciones tienen multiplicidades como 1..1, 0. *. por ejemplo, cada Song se debe relacionar con exactamente un álbum con la relación de AlbumHasSongs. cada álbum puede tener cualquier número de Songs.

Reorganizar el diagrama de definición ADSL

Observe que una clase de dominio puede aparecer varias veces en el diagrama de definición ADSL, como el álbum haga en esta imagen. Siempre hay una vista principal, y puede haber algunas vistas de referencia .

Para reorganizar el diagrama de definición ADSL, puede:

  • Cambie la principal y haga referencia a las vistas utilizando los comandos de Pasar el árbol aquí y de divida el árbol . Haga clic con el botón secundario en una única clase de dominio para ver estos comandos.

  • Puede reordenar las clases de dominio y las clases de la forma presionando Ctrl+Up y Ctrl+Down.

  • Contraer o expandir las clases mediante el icono en el derecho de cada forma.

  • Contraer las partes del árbol haciendo clic en el signo menos (-) en la parte inferior de una clase de dominio.

Herencia

Las clases de dominio pueden definirse mediante herencia. Para crear una derivación de herencia, haga clic en la herramienta de herencia, haga clic en la clase derivada, y haga clic en la clase base. Un elemento de modelo tiene todas las propiedades que se definen en su propia clase de dominio, así como todas las propiedades heredadas de la clase base. también hereda sus roles en relaciones.

La herencia se puede utilizar entre Relaciones, formas, y conectores. Herencia debe mantener dentro del mismo grupo. Una forma no puede heredar de una clase de dominio.

Relaciones de dominio

Los elementos de modelo se pueden vincular mediante relaciones. Los vínculos siempre son binarios; enlazan exactamente dos elementos. Sin embargo, cualquier elemento puede tener muchos vínculos a otros objetos, y incluso puede haber más de un vínculo entre los mismos pares de elementos.

Igual que puede definir diferentes tipos de elementos, puede definir diferentes tipos de vínculos. La clase de un vínculo se denomina relación de dominio. Relación de dominio especifica qué tipos de elementos pueden conectarse sus instancias. Cada extremo de una relación se denomina rol, y la relación de dominio define los nombres de los dos roles, así como para la relación propio.

Hay dos tipos de relaciones de dominio: relaciones de incrustación y relaciones de referencia. En el diagrama de la definición de DSL, insertar relaciones tenga líneas continuas en cada rol, y las relaciones de referencia tienen líneas de guiones.

Relaciones de incrustación

Cada elemento del modelo, a excepción de la raíz, es el destino de un vínculo que inserta. Por consiguiente, los formularios modelos de conjunto que un único árbol de incrustación enlazado. Una relación de incrustación representa la contención o la propiedad. Dos elementos modelos relacionados de esta manera también se conocen como elemento primario y secundario. El elemento secundario se incrustado en el elemento primario.

Insertar vínculos no se muestran generalmente explícitamente como conectores en un diagrama. En su lugar, se representan generalmente la contención. La raíz del modelo se representa en el diagrama, y elementos insertados en se muestran como formas en el diagrama.

En el ejemplo, la clase Music raíz tiene una relación MusicHasAlbums de incrustación al álbum, que tiene un AlbumHasSongs que inserta a Song. Las canciones se muestran como elementos de una lista dentro de cada álbum. la música también tiene un MusicHasArtists que inserta a la clase de Artist, cuyas instancias también aparecen como formas en el diagrama.

De forma predeterminada, los elementos incrustados automáticamente se eliminan cuando eliminan de sus elementos primarios.

Cuando un modelo se guarda en el archivo en formato XML, los elementos incrustados se anidan dentro de sus elementos primarios, a menos que haya personalizado la serialización.

Nota

La incrustación no es igual que la herencia.Los elementos secundarios en una relación de incrustación no hereda las propiedades del elemento primario.Una incrustación es un tipo de vínculo entre los elementos de modelo.Herencia es una relación entre las clases, y no vínculos entre elementos del modelo.

Reglas de incrustación

Cada elemento del modelo de instancia debe ser el destino de exactamente un vínculo que inserta, a excepción de la raíz del modelo.

Por consiguiente, cada clase de dominio de no, a menos que la clase raíz, debe ser el destino de al menos una relación que inserta, o debe heredar una incrustación de una clase base. Una clase puede ser el destino de dos o más embeddings, pero los elementos del modelo de instancia sólo pueden tener un elemento primario al mismo tiempo. La multiplicidad de destino al origen debe ser 0..1 o 1..1.

El Explorador muestra el árbol de incrustación

La definición ADSL también crea un explorador, que los usuarios ven junto al diagrama del modelo.

Explorador generado de DSL

El explorador muestra todos los elementos del modelo, incluidos los que aún no definido cualquier forma. Muestra elementos y relaciones de incrustación, pero no relaciones de referencia.

Para ver los valores de las propiedades del dominio de un elemento, el usuario selecciona un elemento, en el diagrama del modelo o en el explorador de modelos, y abra la ventana Propiedades. Muestra todas las propiedades del dominio, incluidos los que no se muestran en el diagrama. En el ejemplo, cada Song tiene un título y un género, pero solo el valor de título se muestra en el diagrama.

Relaciones de referencia

Una relación de referencia representa cualquier tipo de relación que no está insertando.

Las relaciones de referencia se muestran habitualmente en un diagrama como conectores entre las formas.

En la representación XML del modelo, un vínculo de referencia entre dos elementos se representa mediante monikers. Es decir, los monikers son nombres que identifican de forma única a cada elemento del modelo. El nodo XML para cada elemento del modelo contiene un nodo que especifique el nombre de la relación y el moniker de otro elemento.

Roles

Cada relación de dominio tiene dos roles, un rol de origen y un rol de destino.

En la siguiente imagen, la línea entre la clase de dominio del editor y la relación del dominio de PublisherCatalog es el rol del origen. La línea entre la relación de dominio y la clase de dominio del álbum es el rol de destino.

Roles y propiedades.

Los nombres asociado con una relación son especialmente importantes cuando escribe código de programa que recorre el modelo. Por ejemplo, cuando se compila la solución ADSL, el editor generado de la clase tiene un catálogo de la propiedad que es una colección de álbumes. El álbum de la clase tiene un editor de la propiedad que sea una única instancia del editor de la clase.

Al crear una relación en una definición ADSL, la propiedad y los nombres de la relación se proporcionan valores predeterminados. Sin embargo, puede cambiarlos.

Multiplicidades

Multiplicidades especifica cuántos elementos pueden tener el mismo rol de relación de dominio. en el ejemplo, los cero-a-muchos (0. *) el valor de la multiplicidad en el rol de catálogo especifica que cualquier instancia de la clase de dominio del editor puede tener tantos vínculos de la relación de PublisherCatalog que desee darla.

configure la multiplicidad de un rol escribiendo en el diagrama o modificando la propiedad de Multiplicity en la ventana de Propiedades . la tabla siguiente describe los valores para esta propiedad.

Tipo de multiplicidad

Descripción

0. * (Zero a muchos)

Cada instancia de la clase de dominio puede tener varias instancias de la relación o instancias de la relación.

0..1 (Zero uno)

Cada instancia de la clase de dominio no puede tener más de una instancia de la relación o de instancias de la relación.

1..1 (uno)

Cada instancia de la clase de dominio puede tener una instancia de la relación. No puede crear más de una instancia de esta relación de ninguna instancia del rol de la clase. Si se habilita la validación, un error de validación se producirá a cualquier instancia del rol de la clase no tiene ninguna instancia de la relación.

1. * (uno a varios)

Cada instancia de la clase del rol que tiene esta multiplicidad puede tener varias instancias de la relación, y cada instancia debe tener una instancia de la relación. Si se habilita la validación, un error de validación se producirá a cualquier instancia del rol de la clase no tiene ninguna instancia de la relación.

Dominio Relaciones como clases

un vínculo se representa en el almacén como instancia de LinkElement, que es una clase derivada de ModelElement. Puede definir estas propiedades en el diagrama del modelo de dominio en relaciones de dominio.

También puede crear una relación el origen o destino de otras relaciones. En el diagrama del modelo de dominio, haga clic con el botón secundario en la relación de dominio y haga clic en Muestra como clase. un cuadro adicional de la clase aparecerá. Puede conectar un vínculo al.

Puede definir una relación parcialmente por herencia, igual que las de las clases de dominio. Seleccione la relación derivada y relación base determinado en la ventana Propiedades.

Una relación derivada especializada su relación base. Las clases de dominio de las que vinculan deben derivar igual que las clases vinculadas mediante la relación base. Cuando un vínculo de la relación derivada se crea en un modelo, es una instancia de relaciones derivadas y bases. En código de programa, puede navegar hasta el extremo contrario de vínculo mediante las propiedades generados por la base o por la clase derivada.

Vea también

Conceptos

[redirigir] Relaciones de dominio en la API generada

Otros recursos

Domain-Specific Language Tools Glossary