Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Kermeta - это язык моделирования и программирования [1] [2] для разработки метамоделей .

История [ править ]

Kermeta язык был инициирован Franck Fleurey в 2005 году в рамках Triskell команды IRISA (сбор исследователей в INRIA , CNRS , INSA и университета Ренна 1).

Язык Kermeta заимствует концепции из таких языков, как MOF , OCL и QVT , а также из BasicMTL, языка преобразования моделей, реализованного в 2004 году командой Triskell Д. Войтисеком и Ф. Фондементом. Он также вдохновлен предыдущим опытом работы с MTL, первым языком преобразования, созданным Трискеллом, и языком действий Xion для UML .

Название Kermeta является аббревиатурой от «Kernel Metamodeling» и отражает тот факт, что язык задуман как ядро ​​для (мета-) моделирования. Язык Бретон созвучие этого названия является преднамеренным отражением расположения команды Triskell в Бретани.

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

Философия [ править ]

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

Таким образом, Кермета приносит:

  • все концепции EMOF используются для спецификации модели.
  • реальное понятие модели, точнее типа модели (Джим Стил).
  • конкретный синтаксис, который хорошо подходит для написания моделей и метамоделей.
  • две парадигмы: объект и модель.
  • мост к формализму Eclipse ECore

Характеристики [ править ]

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

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

Синтаксис [ править ]

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

Пример (Kermeta 1.4) [ править ]

 пакет fsm;  требуется кермета  используя kermeta :: standard  класс FSM { атрибут ownState: установить состояние [0 .. *] # owningFSM ссылка initialState: State [1..1]  ссылка currentState: Состояние   / ** * Распечатать FSM на стандартном выходе * / операция printFSM () - это делать self.ownedState.each  {s |  stdio.writeln ("Состояние:" + s.name) s.outgoingTransition.each  {t |  stdio.writeln ("Переход:" + t.source.name +  "- (" + t.input + "/" + t.output + ") ->" + t.target.name) } } конец }  class State { имя атрибута: Строка ссылка owningFSM: FSM # ownState атрибут outgoingTransition: установить переход [0 .. *] # источник ссылка incomingTransition: установить переход [0 .. *] # target  шаг операции (c: String): String - do // Получаем допустимые переходы var validTransitions: Коллекция <Переход>  validTransitions: = outgoingTransition.select {t | t.input.equals (c)} // Проверяем, есть ли один и только один допустимый переход если validTransitions.empty, то поднимите "No Transition!" конец если validTransitions.size> 1, поднимите конец "Недетерминизма" // запускаем переход результат: = validTransitions.one.fire конец }  класс Переход  { источник ссылки: State [1..1] #outgoingTransition эталонная цель: State [1..1] #incomingTransition вывод атрибута: String ввод атрибута: Строка  операция fire (): строка do // обновляем текущее состояние FSM source.owningFSM.currentState: = цель результат: = вывод конец }

См. Также [ править ]

Ссылки [ править ]

  1. ^ Мюллер, Пьер-Ален; Флери, Франк; Жезекель, Жан-Марк (2005). «Вложение исполняемости в объектно-ориентированные метаязыки» . Модельно-ориентированные инженерные языки и системы . Конспект лекций по информатике. 3713 . С. 264–278. DOI : 10.1007 / 11557432_19 . ISBN 978-3-540-29010-0.
  2. ^ Jezequel, Жан-Марк; Combemale, Бенуа; Баре, Оливье; Монперрус, Мартин; Фуке, Франсуа (2013). «Мэшап метаязыков и его реализация в языковой среде Kermeta» (PDF) . Программное обеспечение и моделирование систем . 14 (2): 905–920. arXiv : 1306.0760 . DOI : 10.1007 / s10270-013-0354-4 .
  3. ^ Войтишек, Дидье. "Вышла версия 2.0.4!" . Проверено 3 декабря 2012 года .

Внешние ссылки [ править ]

  • Официальный сайт Kermeta
  • список статей