Какие среды исполнения конечного автомата для C++ реализуют семантику UML?

Я ищу структуру, которая обеспечивает выполнение иерархических конечных автоматов (HSM).

Вот требования к каркасу:

  • Соответствует семантике конечного автомата UML (насколько это возможно)
  • Supports at least
    • run-to-completion semantics
    • иерархические состояния
    • входные и выходные действия
    • переходные действия
    • охранники
    • события с пользовательскими параметрами
  • Является объектно-ориентированным или, по крайней мере, не запрещает объектно-ориентированный дизайн.

Целевая платформа представляет собой встраиваемую систему среднего и крупного размера с ОС.

Знаете ли вы фреймворк, отвечающий вышеуказанным требованиям? Каковы плюсы и минусы вашего фреймворка?


person theDmi    schedule 20.09.2010    source источник


Ответы (5)


Ознакомьтесь с платформой Quantum.

Я использовал его в нескольких встроенных проектах (от очень маленьких до очень больших), и он поддерживает все необходимые элементы маркеров и многое другое.

Веб-страница для QP гораздо лучше объясняет себя, чем я могу сделать здесь.

Имейте в виду, QP не реализует 100% функциональности, указанной в спецификации UML, но отклонения четко объяснены, и за весь мой опыт работы с QP ни одно из них не было проблемой для проекта.

Есть также 2 пакета диаграмм состояний Boost, о которых вы, кажется, знаете.

person Dan    schedule 20.09.2010
comment
Спасибо, выглядит интересно. Обязательно присмотрюсь к QP. - person theDmi; 21.09.2010

Вы должны пойти и проверить Boost MSM, он новый для Boost 1.44, но кажется вполне законченным. Я еще не пробовал это сам, но это выглядит довольно многообещающе.

person Andreas Magnusson    schedule 20.09.2010
comment
Спасибо за совет. Я знал это раньше, и это кажется одним из наиболее многообещающих решений. - person theDmi; 20.09.2010
comment
на полубольших конечных автоматах он становится непригодным для использования из-за очень медленного времени компиляции. - person asaenko; 23.07.2014

На сегодняшний день доступна новая альтернатива C++ (поддерживает C++11 и C++03 с Boost). Он называется yasmine (и я архитектор). Он соответствует всем вышеперечисленным требованиям.

Некоторые плюсы и минусы (цитируется с веб-страницы yasmine):

Преимущества использования ясмина

  • Она обеспечивает полную реализацию семантики конечного автомата UML.
  • yasmine — это современная реализация C++ с использованием C++11 (также доступна поддержка C++03).
  • Поскольку это C++ (а не C), код прекрасно интегрируется в объектно-ориентированный код.
  • Она хорошо задокументирована [...]
  • Поскольку она с открытым исходным кодом, вы можете проверить ее реализацию. Кроме того, это гарантирует долгосрочное удобство использования и доступность.
  • Библиотека позволяет создавать конечные автоматы во время выполнения.
  • [...]

Чем не является жасмин

Она не является минимальной библиотекой следов, которая отдает приоритет работе на каждой системе, независимо от того, насколько мало доступных ресурсов. yasmine не требовательна к ресурсам, но она не может (и не хочет) конкурировать с библиотеками без абстракции на основе коммутатора.

Примечание

Я знаю, что это старый вопрос, но это № 1 Google для «машины состояний uml С++», что делает его очень актуальным.

person DrP3pp3r    schedule 20.06.2016

Если вы ищете фреймворк, который поддерживает иерархические и параллельные конечные автоматы с семантикой UML (вход/выход, переходы, охранники, события с параметрами, асинхронный/синхронный), взгляните на мой код конечного автомата и генератор диаграмм.

Вместо того, чтобы реализовывать конечный автомат «вручную», опишите конечный автомат в простом читаемом и доступном для записи XML-описании и позвольте генератору конечного автомата написать исходный код на C++, C# или java.

Фактически, для версии C++ сгенерированный код может быть легко кросс-компилирован для встраиваемой системы среднего/большого размера. Это уже сделано.

person Frederic Heem    schedule 07.08.2011

Вы можете взглянуть на мою структуру классов шаблонов C++ STTCL, которая предназначена для отображения состояния UML 2.2. нотация диаграммы к классам реализации. Подход STTCL является усовершенствованием шаблона состояния GoF и пытается заполнить пробелы в нотации диаграммы состояний UML.

Реализации фреймворка настраиваются относительно зависимостей ОС, насколько это необходимо (только для моделей асинхронного выполнения).

Доступен PDF-документ, объясняющий концепцию более подробно.

person Makulik    schedule 20.02.2012
comment
Привет, кажется, твой код зависит от Boost. В последнее время я оцениваю фреймворки конечных автоматов, и если Boost является зависимостью, почему следует выбирать STTCL, а не Boost StateCharts и Boost MSM? В частности, Boost::StateCharts также является усовершенствованием шаблона состояния GoF. - person krapht; 06.07.2015