Tefkat es un lenguaje de transformación de modelos y un motor de transformación de modelos. El lenguaje se basa en la lógica F y en la teoría de programas de lógica estratificada. El motor es un complemento de Eclipse para Eclipse Modeling Framework (EMF).
Tefkat fue uno de los subproyectos del proyecto Pegamento en el Centro de Tecnología de Sistemas Distribuidos (DSTC) de Australia. Aunque el proyecto ya estaba en marcha, la investigación más activa se llevó a cabo para la presentación de una respuesta a la Solicitud de propuestas de consultas/vistas/transformaciones MOF 2.0 de OMG .
Tefkat era de código abierto antes del cierre del DSTC en junio de 2006.
Tefkat define una asignación de un conjunto de metamodelos de origen a un conjunto de metamodelos de destino. Una transformación de Tefkat consta de reglas , patrones y plantillas . Las reglas contienen un término de origen y un término de destino . Los patrones se denominan simplemente términos de origen compuestos, y las plantillas se denominan simplemente términos de destino compuestos. Estos elementos se basan en la lógica F y la programación lógica pura, sin embargo, la ausencia de símbolos de función significa una reducción significativa de la complejidad.
Tefkat tiene dos elementos de lenguaje más importantes: seguimientos e inyecciones . Los seguimientos permiten preservar relaciones arbitrarias en un modelo de seguimiento. Las inyecciones permiten especificar la identidad de los objetos de destino en términos de un símbolo de función. Por lo tanto, las inyecciones son similares (pero más poderosas) a las claves de QVT, que especifican que la identidad de un objeto de destino es una función de su tipo y algunas de sus propiedades.
La semántica declarativa de una transformación Tefkat es el modelo perfecto de rastros y objetivos que satisface todas las reglas. Una semántica más imperativa de una transformación Tefkat es el punto fijo mínimo iterado de la consecuencia inmediata de cada regla. Debido a la estratificación, estas semánticas son equivalentes e inequívocas. Tefkat no utiliza una invocación explícita de reglas; todas las reglas (no abstractas) se activan independientemente de todas las demás, sin embargo, las reglas se pueden acoplar de forma flexible mediante seguimientos, inyecciones, extensión de reglas y/o reemplazo de reglas.
Tefkat tiene una sintaxis concreta similar a SQL diseñada para transmitir de forma concisa la intención de cada regla, patrón o plantilla.
REGLA ClaseATablaFORALL Clase c { nombre: n; }HACER Tabla t { nombre: n; };
El lenguaje Tefkat se define en términos de (E)MOF 2.0, sin embargo, el motor se implementa en términos de Ecore, el metametamodelo similar a EMOF que se encuentra en el centro de EMF. El lenguaje es muy similar al paquete Relations de QVT, sin embargo, no es estrictamente compatible.