Кермет
Kermeta — язык моделирования и программирования. [1] для разработки метамоделей .
История
[ редактировать ]Язык Кермета был инициирован Франком Флери в 2005 году в рамках Трискелла команды IRISA (объединившей исследователей INRIA , CNRS , INSA и Университета Ренна 1).
Язык Kermeta заимствует концепции из таких языков, как MOF , OCL и QVT , а также из BasicMTL, языка преобразования моделей, реализованного в 2004 году в команде Triskell Д. Войтишеком и Ф. Фондементом. Он также вдохновлен предыдущим опытом работы с MTL, первым языком трансформации, созданным Triskell, и языком действий Xion для UML .
Название Kermeta является аббревиатурой от «Метамоделирование ядра» и отражает тот факт, что язык задуман как ядро для (мета)моделирования. Созвучие этого имени на бретонском языке является намеренным отражением местоположения команды Трискелла в Бретани.
Kermeta и ее платформа выполнения под Eclipse в настоящее время доступны в версии 2.0.4. [2] выпущен в 2012 году. Он с открытым исходным кодом , под лицензией Eclipse Public License .
Философия
[ редактировать ]Kermeta — это язык моделирования и аспектно-ориентированного программирования . Его базовая метамодель соответствует стандарту EMOF . Он предназначен для написания программ, которые также являются моделями, для написания преобразований моделей (программ, преобразующих одну модель в другую), для написания ограничений на эти модели и для их выполнения. Цель этого модельного подхода состоит в том, чтобы добавить дополнительный уровень абстракции поверх уровня «объекта» и, таким образом, рассматривать данную систему как набор концепций (и экземпляров концепций), которые образуют явно связное целое, которое можно будет позвоните модели.
Таким образом, Кермета приносит:
- все концепции EMOF, используемые для спецификации модели.
- реальная концепция модели, точнее типа модели (Джим Стил).
- конкретный синтаксис, который хорошо подходит для написания моделей и метамоделей.
- две парадигмы: объект и модель.
- мост к Eclipse ECore формализму
Характеристики
[ редактировать ]Основными характеристиками языка кермета являются:
- императив : традиционные структуры контроля
- объектно-ориентированный : множественное наследование, позднее связывание
- модельно-ориентированный : первоклассные концепции ассоциаций и композиции
- аспектно-ориентированный : интегрируйте простой, но мощный ткач для простых задач метамоделирования. Произвольное сложное плетение достигается с помощью специального композитора, написанного на кермете. Это позволяет программистам расширять существующие метамодели. Специально для того, чтобы добавить к ним поведение, вплетая поведенческую семантику (операционную или трансляционную).
- проектирование по контракту : операции поддерживают пред- и пост-условия, классы используют инварианты.
- функционал : функции и лямбда-выражения первого класса
- статически типизированный: универсальность классов и операций, типов функций...
- полный самоанализ : полная модель программы доступна во время выполнения.
Синтаксис
[ редактировать ]Любопытный читатель найдет дополнительную информацию на сайте 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
}
См. также
[ редактировать ]- Модельно-ориентированное проектирование
- Язык, специфичный для домена
- Специализированное моделирование предметной области
- Модельно-ориентированное тестирование
- Метамоделирование
- ОКЛ
- Язык преобразования модели
- Мета-объектная возможность
Ссылки
[ редактировать ]- ^ Мюллер, Пьер-Ален; Флери, Франк; Жезекель, Жан-Марк (2005). «Вплетение исполняемости в объектно-ориентированные метаязыки» . Языки и системы инженерного моделирования, управляемые моделями . Конспекты лекций по информатике. Том. 3713. стр. 264–278. дои : 10.1007/11557432_19 . ISBN 978-3-540-29010-0 . S2CID 2824834 .
- ^ Войтисек, Дидье. «Выпущена версия 2.0.4!» . Проверено 3 декабря 2012 г.