Kermeta — язык моделирования и программирования для метамодельной инженерии. Он заполняет пробел между MOF, которое определяет только структуру метамодели, и практическими нуждами программирования, добавив средства определения статической семантики (подобно предметно-ориентированному языку программирования) и динамической семантики (используя операционную семантику метамодели). Kermeta использует объектно-ориентированную парадигму, как Java или Eiffel.

История Язык Kermeta был инициирован Франком Флойри в 2005 году в рамках работы над проектом Triskell французского Института Информатики и Системных Исследований IRISA в Ренне (Бретань).

Язык Kermeta заимствует понятия из таких языков, как MOF, OCL и QVT, но и от BasicMTL, языка преобразования моделей, который реализовали в 2004 году в проекте Triskell D.Vojtisek и F.Fondement. Он также вдохновлен предыдущим опытом по MTL - первому языку трансформаций, созданному в рамках проекта Triskell, и по языку описания действий для UML "Xion".

Название Kermeta это сокращение от "Kernel Metamodeling" и отражает тот факт, что язык задуман как ядро для (мета-)моделирования.

Kermeta, и его исполняемая платформа под Eclipse в настоящее время доступна в версии 2.0.4, выпущенной в 2012 году. Это open source продукт под Eclipse Public License.

Философия Kermeta является языком моделирования и аспектно-ориентированного программирования. Лежащая в его основе метамодель соответствует версии EMOF стандарта MOF. Он разработан, чтобы писать программы, являющиеся также моделями и выполняющие преобразования над моделями. Цель этого подхода - ввести дополнительный уровень абстракции поверх «объектного» уровня, и увидеть данную систему как набор концептов (и экземпляров этих концептов), образующий единое целое, называемое моделью.

Kermeta, таким образом, приносит:

Все концепты версии EMOF языка MOF используются для спецификации моделей. Конкретный синтаксис, который хорошо подходит для написания моделей и метамоделей. Две парадигмы: объектная и модельная. Мост к еще одной реализации метамодельного подхода - Eclipse Modeling Framework.

Характеристики Основные характеристики языка Kermeta:

императивность: традиционные структуры управления объект-ориентированность: множественное наследование, позднее связывание модель-ориентированность: первоклассные понятия ассоциации и композиции аспект-ориентированность: интегрирован простой, но мощный механизм для простых задач мета-моделирования. Он особенно удобен для того, чтобы добавить в модель поведенческую семантику - операциональную или трансляционную контрактное программирование: поддержка операций до и после условия, классы используют инварианты. Функциональное программирование: функции и лямбда-выражения первого класса статическая типизация: типичность для классов и операций, типы функций... полная интроспекция: вся модель программы доступна во время выполнения.

Синтаксис Любознательный читатель найдет дополнительную информацию на Kermeta.

Пример (Kermeta 1.4) package fsm;

require kermeta

using kermeta::standard

class FSM { attribute ownedState : set State[0..*]#owningFSM reference initialState : State[1..1] reference currentState : State

/** * Print the FSM on the standard output */ operation printFSM() is do self.ownedState.each { s | stdio.writeln("State : " + s.name) s.outgoingTransition.each { t | stdio.writeln(" Transition : " + t.source.name + "-(" + t.input + "/" + t.output + ")->" + t.target.name)

end

class State { attribute name : String reference owningFSM : FSM#ownedState attribute outgoingTransition : set Transition[0..*]#source reference incomingTransition : set Transition[0..*]#target

operation step(c : String) : String is do // Get the valid transitions var validTransitions : Collection<Transition> validTransitions := outgoingTransition.select { t | t.input.equals(c) } // Check if there is one and only one valid transition if validTransitions.empty then raise "No Transition!" end if validTransitions.size > 1 then raise "Non Determinism" end // fire the transition result := validTransitions.one.fire end

class Transition { reference source : State[1..1]#outgoingTransition reference target : State[1..1]#incomingTransition attribute output : String attribute input : String

operation fire() : String is do // update FSM current state source.owningFSM.currentState := target result := output end

См. также Разработка управляемая моделями Предметно-ориентированный язык программирования Domain Specific Modelling Тестирование на основе модели Метамоделирование Object Constraint Language Model Transformation Language Meta-Object Facility

Примечания

Ссылки Kermeta official website article list

Литература Weaving Executability into Object-Oriented Meta-Languages Pierre-Alain Muller, Franck Fleurey, and Jean-Marc Jézéquel. In S. Kent L. Briand, editor, Proceedings of MODELS/UML'2005, LNCS, Montego Bay, Jamaica, October 2005. Springer.

Категория:Метамоделирование Категория:UML Категория:Программное обеспечение, написанное на Java