El lenguaje ejecutable UML ( xtUML o xUML ) es un método de desarrollo de software y un lenguaje de software altamente abstracto. Fue descrito por primera vez en 2002 en el libro "UML ejecutable: una base para la arquitectura basada en modelos". [1] El lenguaje "combina un subconjunto de la notación gráfica UML ( lenguaje de modelado unificado ) con semántica ejecutable y reglas de tiempo". [2] El método UML ejecutable es el sucesor del método Shlaer-Mellor . [3]
Los modelos UML ejecutables "se pueden ejecutar, probar , depurar y medir para determinar su rendimiento", [4] y se pueden compilar en un lenguaje de programación menos abstracto para apuntar a una implementación específica . [5] El UML ejecutable admite la arquitectura basada en modelos (MDA) a través de la especificación de modelos independientes de la plataforma y la compilación de los modelos independientes de la plataforma en modelos específicos de la plataforma . [6] [7]
El UML ejecutable es un nivel de abstracción más alto que los lenguajes de programación de tercera generación . Esto permite a los desarrolladores desarrollar al nivel de abstracción de la aplicación. [8] El UML ejecutable apunta a la separación de preocupaciones . Se supone que esto aumenta la facilidad de reutilización y reduce el costo del desarrollo de software . Esto también permite que los dominios del UML ejecutable sean multiplataforma . Eso significa que no está vinculado a ningún lenguaje de programación, plataforma o tecnología específicos.
El UML ejecutable también permite la traducción de modelos independientes de la plataforma (PIM) a modelos específicos de la plataforma (PSM). El método UML ejecutable permite valorar el modelo como propiedad intelectual , ya que el modelo es una solución completamente ejecutable para el espacio del problema.
Las acciones se especifican en lenguaje de acciones . Esto significa que la generación automática de código de implementación a partir de modelos UML ejecutables se puede generar de forma optimizada.
El UML ejecutable está pensado para servir como código ejecutable y como documentación. Los modelos son una especificación gráfica y ejecutable del espacio del problema que se compila en una implementación de destino . También están pensados para ser legibles por humanos .
Un sistema se compone de múltiples objetos, conocidos como dominios en términos de UML ejecutable. El UML ejecutable se utiliza para modelar un dominio en el nivel de abstracción de su objeto independientemente de las cuestiones de implementación. El modelo de dominio resultante está representado por los siguientes elementos:
El UML ejecutable requiere la identificación de los dominios (también conocidos como aspectos [9] o preocupaciones ) del sistema. "Cada dominio es un mundo autónomo habitado por entidades conceptuales" [10]. Cada dominio puede modelarse independientemente de los demás dominios del sistema, lo que permite una separación de preocupaciones . A modo de ejemplo, los dominios de un sistema de cajero automático pueden incluir los siguientes:
La separación de preocupaciones permite que cada dominio sea desarrollado y verificado independientemente de los otros dominios del sistema por los respectivos expertos del dominio.
Las conexiones entre dominios se denominan puentes . "Un puente es una dependencia de capas entre dominios". [11] Esto significa que los dominios pueden imponer requisitos a otros dominios. Se recomienda que los puentes sean acordados por los diferentes expertos del dominio.
Un dominio se puede marcar como realizado para indicar que existe y no es necesario modelarlo. Por ejemplo, un dominio de acceso a datos que utiliza una base de datos MySQL se marcaría como realizado.
Las entidades conceptuales, como objetos tangibles, roles, incidentes, interacciones y especificaciones, específicas del dominio que se está modelando se abstraen en clases . Las clases pueden tener atributos y operaciones .
Las relaciones entre estas clases se indicarán mediante asociaciones y generalizaciones . Una asociación puede requerir una mayor abstracción como una clase de asociación .
Las restricciones en el diagrama de clases se pueden escribir tanto en lenguaje de acción como en lenguaje de restricción de objetos (OCL).
El método UML ejecutable limita los elementos UML que se pueden utilizar en un diagrama de clases UML ejecutable.
Un diagrama de clases UML ejecutable tiene como objetivo exponer información sobre el dominio. Un exceso de complejidad en los diagramas de estado es un buen indicador de que el diagrama de clases debe ser rediseñado.
Las clases tienen ciclos de vida que se modelan en UML ejecutable con un diagrama de estado . El diagrama de estado define los estados , las transiciones , los eventos y los procedimientos que definen el comportamiento de una clase.
Cada estado tiene un solo procedimiento que se ejecuta al ingresar a ese estado . Un procedimiento se compone de acciones, que se especifican en un lenguaje de acciones.
Los modelos de clase y estado por sí solos pueden proporcionar una vista estática del dominio. Para tener un modelo ejecutable, debe haber una manera de crear instancias de clase, establecer asociaciones, realizar operaciones sobre atributos, invocar eventos de estado, etc. En UML ejecutable, esto se hace utilizando un lenguaje de acción que se ajusta a la semántica de acción de UML.
La semántica de acción se agregó a la especificación UML en 2001. La RFP de semántica de acción se basó en trabajos previos en lenguajes de acción que respaldaban el método Shlaer-Mellor . Los lenguajes de acción existentes son Object Action Language (OAL), Shlaer-Mellor Action Language (SMALL), Action Specification Language (ASL), Model Action Specification Language (MASL), [12] That Action Language (TALL), Starr's Concise Relational Action Language (SCRALL), Platform-independent Action Language (PAL) y PathMATE Action Language (PAL). SCRALL es el único que es un lenguaje de acción gráfico.
Una vez que se modela un dominio, se puede probar independientemente de la implementación de destino mediante la ejecución del modelo. Cada dominio se puede verificar y validar independientemente de cualquier otro dominio. Esto permite que los errores detectados se asocien con el dominio y sean independientes de otros problemas del sistema.
La verificación implicará cosas como la revisión humana de los modelos, realizada por expertos en el dominio relevante, y la verificación automática de la semántica de Executable UML, es decir, verificar que el modelo Executable UML cumple con el metamodelo Executable UML .
La validación normalmente implica el uso de una herramienta UML ejecutable para ejecutar el modelo. La ejecución puede ocurrir antes o después de la compilación del modelo.
Para poder ejecutar la implementación de destino , el modelo de dominio debe traducirse a una forma menos abstracta . Este proceso de traducción se denomina compilación de modelos . La mayoría de los compiladores de modelos apuntan a un lenguaje de programación conocido , ya que esto permite la reutilización de tecnologías de compilación existentes .
La optimización de los modelos de dominio por razones de implementación de destino reducirá el nivel de abstracción , afectará negativamente la independencia del dominio y aumentará el costo de reutilización . En UML ejecutable, las optimizaciones las realiza el compilador de modelos de forma automática o mediante marcado . El marcado permite que elementos específicos del modelo se destinen a implementaciones específicas de nivel inferior y permite tomar decisiones arquitectónicas más amplias, como especificar que las colecciones de objetos se deben implementar como una lista doblemente enlazada .
En términos de MDA , el compilador de modelos crea el PSM . La separación entre el PIM y el PSM en el UML ejecutable deshabilita la capacidad de realizar ingeniería de ida y vuelta del modelo y evita modificaciones al PSM . [13]
El UML ejecutable define la semántica de ejecución para un subconjunto del UML. Los aspectos clave del subconjunto del UML ejecutable incluyen lo siguiente:
El Object Management Group ha estandarizado el UML Fundacional (fUML) , que fue fuertemente influenciado por el UML Ejecutable.
Action Language for Foundational UML (ALF), [15] es una especificación de lenguaje de acción estándar del Object Management Group .