Kermeta - Kermeta

Kermeta язык моделирования и программирования[1][2] за метамодель инженерия.

История

В Kermeta язык был инициирован Франком Флёри в 2005 году в рамках Трискелл команда ИРИСА (собирая исследователей INRIA, CNRS, INSA и Реннский университет 1).

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

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

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

Философия

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

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

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

Характеристики

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

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

Синтаксис

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

Пример (Kermeta 1.4)

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

Смотрите также

Рекомендации

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

внешняя ссылка