Articulo de referencia

Kermeta

Kermeta es un lenguaje de modelado y programación [ 1 ] para la ingeniería de metamodelos . Historia El idioma kermeta fue iniciado por Franck Fleurey en 2005 dentro del equipo ...

Kermeta es un lenguaje de modelado y programación [ 1 ] para la ingeniería de metamodelos .

Historia

El idioma kermeta fue iniciado por Franck Fleurey en 2005 dentro del equipo Triskell de IRISA (que reúne a investigadores del INRIA , CNRS , INSA y la Universidad de Rennes 1).

El lenguaje Kermeta toma prestados conceptos de lenguajes como MOF , OCL y QVT , pero también de BasicMTL, un lenguaje de transformación de modelos implementado en 2004 en el equipo de Triskell por D. Vojtisek y F. Fondement. Asimismo, se inspira en la experiencia previa con MTL, el primer lenguaje de transformación creado por Triskell, y en el lenguaje de acciones Xion para UML .

El nombre Kermeta es una abreviatura de "Kernel Metamodeling" (Metamodelado del Núcleo) y refleja que el lenguaje se concibe como un núcleo para el (meta)modelado. La consonancia bretona de este nombre es un reflejo intencional de la ubicación del equipo de Triskell en Bretaña.

Kermeta y su plataforma de ejecución bajo Eclipse están actualmente disponibles en su versión 2.0.4 [ 2 ] publicada en 2012. Es de código abierto , bajo la Licencia Pública de Eclipse .

Filosofía

Kermeta es un lenguaje de modelado y programación orientada a aspectos . Su metamodelo subyacente se ajusta al estándar EMOF . Está diseñado para escribir programas que también son modelos, transformaciones de modelos (programas que transforman un modelo en otro), restricciones sobre estos modelos y su ejecución. El objetivo de este enfoque de modelado es añadir un nivel de abstracción adicional sobre el nivel de "objeto" y, por lo tanto, visualizar un sistema dado como un conjunto de conceptos (e instancias de conceptos) que forman un todo explícitamente coherente, al que llamaremos modelo.

Kermeta trae así:

  • todos los conceptos de EMOF utilizados para las especificaciones de un modelo.
  • un concepto real de modelo, más precisamente de tipo de modelo (Jim Steel).
  • una sintaxis concreta que se adapta bien a la escritura de modelos y metamodelos.
  • Dos paradigmas: el objeto y el modelo.
  • un puente hacia el formalismo ECore de Eclipse

Características

Las principales características del idioma kermeta son  :

  • imperativo : estructuras tradicionales de control
  • orientado a objetos : herencia múltiple, enlace tardío
  • Orientado a modelos : conceptos de primera clase de asociaciones y composición
  • Orientado a aspectos : integra un tejedor sencillo pero potente para tareas de metamodelado simples. El tejido de complejidad arbitraria se logra mediante un compositor específico escrito en Kermeta. Esto permite a los programadores extender los metamodelos existentes, especialmente para añadirles comportamiento mediante la incorporación de semántica conductual (operacional o traslacional).
  • Diseño por contrato : las operaciones admiten precondiciones y postcondiciones, las clases utilizan invariantes.
  • funcional : funciones y expresiones lambda de primera clase
  • Tipado estático: genericidad para las clases y las operaciones, tipos de funciones...
  • Introspección completa : el modelo completo del programa está disponible durante la ejecución.

Sintaxis

El lector curioso encontrará más información en la página web de Kermeta .

Ejemplo (Kermeta 1.4)

paquete fsm ;requerir kermetausando kermeta :: estándarclase FSM { atributo ownedState : establecer Estado [ 0. .* ] # owningFSM referencia initialState : Estado [ 1. . 1 ] referencia currentState : Estado/**  * Imprime la FSM en la salida estándar  */ operation printFSM () is do self . ownedState . each { s | stdio . writeln ( "Estado: " + s . name ) s . outgoingTransition . each { t | stdio . writeln ( " Transición: " + t . source . name + "-(" + t . input + "/" + t . output + ")->" + t . target . name ) } } end }clase Estado { atributo nombre : String referencia owningFSM : FSM # atributo ownedState outgoingTransition : set Transition [ 0. .* ] # referencia de origen incomingTransition : set Transition [ 0. .* ] # destinopaso de operación ( c : String ) : String is do // Obtener las transiciones válidas var validTransitions : Collection < Transition > validTransitions : = outgoingTransition . select { t | t . input . equals ( c ) } // Comprobar si hay una y solo una transición válida if validTransitions . empty then raise "¡No hay transición!" end if validTransitions . size > 1 then raise "No determinismo" end // Disparar la transición result : = validTransitions . one . fire end }clase Transición { origen de referencia : Estado [ 1..1 ] # transición saliente destino de referencia : Estado [ 1..1 ] # transición entrante atributo salida : Cadena atributo entrada : Cadenaoperación fire () : String is do // actualizar el estado actual de la FSM source . owningFSM . currentState : = target result : = output end }

Véase también

Referencias

  1. Muller, Pierre-Alain; Fleurey, Franck; Jézéquel, Jean-Marc (2005). «Tejiendo la ejecutabilidad en metalenguajes orientados a objetos» . Lenguajes y sistemas de ingeniería dirigidos por modelos . Notas de clase en informática. Vol.  3713. pp. 264–278 . doi : 10.1007/11557432_19 . ISBN  978-3-540-29010-0. S2CID 2824834 . 
  2. Vojtisek, Didier. "¡Se ha publicado la versión 2.0.4 !" . Consultado el 3 de diciembre de 2012 . 
  • Sitio web oficial de Kermeta