Kermeta es un lenguaje de programación y modelado [1] [2] para ingeniería de metamodelos .
Historia
El lenguaje 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 modelo implementado en 2004 en el equipo de Triskell por D. Vojtisek y F. Fondement. También está inspirado en la experiencia previa en MTL, el primer lenguaje de transformación creado por Triskell, y en el lenguaje de acción Xion para UML .
El nombre Kermeta es una abreviatura de "Kernel Metamodeling" y refleja el hecho de que el lenguaje se concibe como un núcleo para (meta-) modelado. La consonancia del idioma bretón 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 bajo su versión 2.0.4 [3] lanzada en 2012. Es de código abierto , bajo la Licencia Pública Eclipse .
Filosofía
Kermeta es un lenguaje de programación orientado a aspectos y modelado . Su metamodelo subyacente se ajusta al estándar EMOF . Está diseñado para escribir programas que también son modelos, escribir transformaciones de modelos (programas que transforman un modelo en otro), escribir restricciones en estos modelos y ejecutarlos. El objetivo de este enfoque de modelo es traer un nivel adicional de abstracción sobre el nivel de "objeto" y así ver un sistema dado como un conjunto de conceptos (e instancias de conceptos) que forman un todo explícitamente coherente, que se llamar a un 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 Eclipse ECore
Caracteristicas
Las principales características del lenguaje Kermeta son:
- imperativo : estructuras tradicionales de control
- orientado a objetos : herencia múltiple, enlace tardío
- orientado a modelos : conceptos de asociación y composición de primera clase
- orientado a aspectos : integre un tejedor simple pero poderoso para tareas simples de metamodelado. El tejido complejo arbitrario se logra utilizando un compositor dedicado escrito en Kermeta. Esto permite a los programadores ampliar los metamodelos existentes. Especialmente para agregarles comportamiento tejiendo semántica conductual (operativa o traslacional).
- diseño por contrato : las operaciones apoyan las condiciones previas y posteriores, las clases utilizan invariantes.
- funcional : funciones y expresiones lambda de primera clase
- tipado estáticamente: genérico 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 el sitio web de Kermeta .
Ejemplo (Kermeta 1.4)
paquete fsm; requiere kermeta usando kermeta :: estándar clase FSM { atributo ownState: establecer estado [0 .. *] # owningFSM referencia initialState: State [1..1] referencia currentState: Estado / ** * Imprima el FSM en la salida estándar * / se hace la operación printFSM () self.ownedState.each {s | stdio.writeln ("Estado:" + s.name) en la Transición Saliente {t | stdio.writeln ("Transición:" + t.source.name + "- (" + t.input + "/" + t.output + ") ->" + t.target.name) } } final } class State { nombre de atributo: String referencia owningFSM: FSM # ownState atributo outgoingTransition: establecer transición [0 .. *] # fuente referencia inputTransition: establecer Transición [0 .. *] # objetivo paso de operación (c: String): String is do // Obtén las transiciones válidas var validTransitions: Colecciónón> validTransitions: = outgoingTransition.select {t | t.input.equals (c)} // Verifica si hay una y solo una transición válida si validTransitions.empty, genere "¡Sin transición!" final si validTransitions.size> 1, aumenta el final de "No determinismo" // dispara la transición resultado: = validTransitions.one.fire final } transición de clase { fuente de referencia: Estado [1..1] #outgoingTransition destino de referencia: Estado [1..1] #incomingTransition salida de atributo: Cadena entrada de atributo: String operación fuego (): Cadena es hacer // actualiza el estado actual de FSM source.owningFSM.currentState: = objetivo resultado: = salida final }
Ver también
Referencias
- ^ Muller, Pierre-Alain; Fleurey, Franck; Jézéquel, Jean-Marc (2005). "Tejiendo la ejecutabilidad en metalenguajes orientados a objetos" . Sistemas y lenguajes de ingeniería basados en modelos . Apuntes de conferencias en Ciencias de la Computación. 3713 . págs. 264-278. doi : 10.1007 / 11557432_19 . ISBN 978-3-540-29010-0.
- ^ Jézéquel, Jean-Marc; Combemale, Benoit; Barais, Olivier; Monperrus, Martin; Fouquet, François (2013). "Mashup de metalenguajes y su implementación en el banco de trabajo del lenguaje Kermeta" (PDF) . Modelado de software y sistemas . 14 (2): 905–920. arXiv : 1306.0760 . doi : 10.1007 / s10270-013-0354-4 .
- ^ Vojtisek, Didier. "¡Se lanza la versión 2.0.4!" . Consultado el 3 de diciembre de 2012 .