Kermeta
Kermeta это язык моделирования и программирования для метамодельной инженерии. Он заполняет пробел между MOF, которое определяет только структуру метамодели, и практическими нуждами программирования, добавив средства определения статической семантики (подобно предметно-ориентированному языку программирования) и динамической семантики (используя операционную семантику метамодели).[1] 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 [2] выпущенной в 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
Примечания
- 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.
- ↑ Документация по языку Архивировано 27 сентября 2013 года.
- ↑ Vojtisek, Didier Version 2.0.4 is released ! . Дата обращения: 3 декабря 2012. Архивировано 30 октября 2015 года.