2010-09-20 1 views
5

Я ищу фреймворк, который обеспечивает выполнение иерархических государственных машин (HSM).Какая структура исполнения машины для C++ реализует семантику UML?

Эти требования для структуры:

  • Соответствует UML состояние машины семантики (как можно больше)
  • поддерживает по крайней мере
    • Выполнение до завершения семантики
    • иерархические состояния
    • действия на въезд и выезд
    • tra nsition действия
    • охранники
    • события с пользовательскими параметрами
  • является объектно-ориентированным, или же по крайней мере, не запрещает OO конструкции

целевая платформа представляет собой средне- и встраиваемых систем большого размера с ОС.

Вы знаете рамки, которые отвечают вышеуказанным требованиям? Каковы плюсы и минусы ваших рамок?

ответ

4

Проверьте Quantum Platform.

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

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

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

Есть также 2 бокс-планшета Boost, о которых вы, похоже, знаете.

+0

Спасибо, что выглядит интересно. Я, конечно, более внимательно посмотрю на QP. – theDmi

4

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

+0

Спасибо за подсказку. Я знал это раньше, и это, кажется, одно из наиболее перспективных решений. – theDmi

+0

на полу-больших государственных станках он становится непригодным из-за очень медленного времени компиляции. – asaenko

1

Если вы ищете инфраструктуру, поддерживающую иерархические и параллельные машины состояний с семантикой UML (вход/выход, переходы, охранники, события с параметрами, асинхронные/синхронные), посмотрите на мой state machine code and diagram generator.

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

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

1

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

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

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

+0

Привет, кажется, ваш код зависит от Boost. В последнее время я оцениваю рамки государственных машин, и если Boost является зависимостью, почему нужно выбирать STTCL над Boost StateCharts и Boost MSM? Особенно Boost :: StateCharts также является уточнением шаблона состояния GoF. – krapht

3

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

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

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

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

Что Ясмин не

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

Примечание

Я знаю, что это старый вопрос, но это Google, # 1 для «C++ УЯМ государственного аппарата», что делает его очень актуальным.

Смежные вопросы