Реализация систем, управляемых событиями
От: Аноним А.Рахимбердыев, А.Ксенофонтов, Е.Адаменк  
Дата: 26.05.06 15:43
Оценка: 370 (5)
Статья:
Реализация систем, управляемых событиями
Автор(ы): А.Рахимбердиев, А.Ксенофонтов, Е.Адаменков, Д.Антонов, Р.Степанов
Дата: 02.03.2006
Опыт авторов показывает, что решения, получающиеся при традиционном подходе к реализации реактивных систем, редко оказываются удобными и простыми для дальнейшего расширения и поддержки, особенно в случаях, когда поведение системы нетривиально. В данной статье рассматривается методика разработки, эффективно решающая большую часть подобных проблем. Поведение системы в целом описывается в виде конечного автомата на диаграмме состояний UML. Локальные действия в отдельных состояниях системы определяются при помощи соответствующих классов и функций C++. В статье также описывается расширение средства моделирования ArgoUML, предназначенное для автоматизации процесса разработки.


Авторы:
А.Рахимбердыев, А.Ксенофонтов, Е.Адаменков, Д.Анто

Аннотация:
Опыт авторов показывает, что решения, получающиеся при традиционном подходе к реализации реактивных систем, редко оказываются удобными и простыми для дальнейшего расширения и поддержки, особенно в случаях, когда поведение системы нетривиально. В данной статье рассматривается методика разработки, эффективно решающая большую часть подобных проблем. Поведение системы в целом описывается в виде конечного автомата на диаграмме состояний UML. Локальные действия в отдельных состояниях системы определяются при помощи соответствующих классов и функций C++. В статье также описывается расширение средства моделирования ArgoUML, предназначенное для автоматизации процесса разработки.
Re: Реализация систем, управляемых событиями
От: UrryMcA Россия http://www.UrryMcA.com
Дата: 26.05.06 17:06
Оценка: +1
Далее по теме: http://softcraft.ru/auto.shtml
Re: Реализация систем, управляемых событиями
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 28.05.06 09:47
Оценка:
Здравствуйте, А.Рахимбердыев, А.Ксенофонтов, Е.Адаменков, Д.Анто, Вы писали:

АРА>Статья:

АРА>Реализация систем, управляемых событиями
Автор(ы): А.Рахимбердиев, А.Ксенофонтов, Е.Адаменков, Д.Антонов, Р.Степанов
Дата: 02.03.2006
Опыт авторов показывает, что решения, получающиеся при традиционном подходе к реализации реактивных систем, редко оказываются удобными и простыми для дальнейшего расширения и поддержки, особенно в случаях, когда поведение системы нетривиально. В данной статье рассматривается методика разработки, эффективно решающая большую часть подобных проблем. Поведение системы в целом описывается в виде конечного автомата на диаграмме состояний UML. Локальные действия в отдельных состояниях системы определяются при помощи соответствующих классов и функций C++. В статье также описывается расширение средства моделирования ArgoUML, предназначенное для автоматизации процесса разработки.


SObjectizer
Автор: Евгений Охотников
Дата: 30.12.05
так же изначально предназначался для упрощения программирования конечных автоматов. Похоже, разработка фреймворков на эту тему не собирается останавливаться



SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Реализация систем, управляемых событиями
От: LelicDsp Россия  
Дата: 29.05.06 20:05
Оценка:
В конце концов авторы пришли к тому, к чему и должны были — автоматически генерируемый код по формальному описанию. Из этого следует замечания:
1) Непонятно, чем эта реализация колеса, лучше чем предыдущие. (Обычно на SDL такие вещи пишут).
2) Когда авторы подойдут к реализации систем еще бОльших масштабов (с бОльшим числом состояний), они убедяться, что графическая нотация уже неудобна, т.к. очень громоздка. И придут к тому, что проще описывать с помощью формального текстового, а не графического, языка — и опять привет колесо. см п.1.
3) Рассуждения о выборе языка программирования — в какой-то степени лукавство. Какая разница во что генерить.
Re[2]: Реализация систем, управляемых событиями
От: Аноним  
Дата: 30.05.06 09:20
Оценка:
Здравствуйте, eao197, Вы писали:


E>SObjectizer
Автор: Евгений Охотников
Дата: 30.12.05
так же изначально предназначался для упрощения программирования конечных автоматов. Похоже, разработка фреймворков на эту тему не собирается останавливаться


E>


А вот исчо здесь
Автор(ы): Alexander Nikolayenko
Дата: 08.10.2005
Машина с конечным числом состояний (FSM, Finite State Machine, или как принято называть по-русски, конечный автомат, КА) представляет собой одну из наиболее полезных концепций в арсенале разработчика. Существует несколько методик реализации конечных автоматов, но, забегая вперед, хочется сказать, что достойный результат дают только те из них, которые связаны с генерацией кода. Возможности, предоставляемые последней версией стандарта C++ и реализованные в последних версиях компиляторов, позволяют генерировать код во время компиляции основного кода проекта. Это дает возможность избежать использования отдельных утилит или расширений IDE и, оставаясь в рамках единого языка (C++), создавать приемлемые для практического использования реализации КА, которые при этом легко поддерживать и развивать.
Re[3]: Реализация систем, управляемых событиями
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 30.05.06 09:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А вот исчо здесь
Автор(ы): Alexander Nikolayenko
Дата: 08.10.2005
Машина с конечным числом состояний (FSM, Finite State Machine, или как принято называть по-русски, конечный автомат, КА) представляет собой одну из наиболее полезных концепций в арсенале разработчика. Существует несколько методик реализации конечных автоматов, но, забегая вперед, хочется сказать, что достойный результат дают только те из них, которые связаны с генерацией кода. Возможности, предоставляемые последней версией стандарта C++ и реализованные в последних версиях компиляторов, позволяют генерировать код во время компиляции основного кода проекта. Это дает возможность избежать использования отдельных утилит или расширений IDE и, оставаясь в рамках единого языка (C++), создавать приемлемые для практического использования реализации КА, которые при этом легко поддерживать и развивать.


Угу, читали. Но там, имхо, черезчур сложные шаблонные навороты. Преимуществом описанного в обсуждаемой статье похода является наличие кодогенератора.

Кстати, обращение к авторам статьи, если они читают данное обсуждение: можно ли увидеть скриншоты вашей системы и примеры кода, который генерируется для дальнейшей правки руками?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Реализация систем, управляемых событиями
От: remark Россия http://www.1024cores.net/
Дата: 31.05.06 11:29
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, А.Рахимбердыев, А.Ксенофонтов, Е.Адаменков, Д.Анто, Вы писали:


АРА>>Статья:

АРА>>Реализация систем, управляемых событиями
Автор(ы): А.Рахимбердиев, А.Ксенофонтов, Е.Адаменков, Д.Антонов, Р.Степанов
Дата: 02.03.2006
Опыт авторов показывает, что решения, получающиеся при традиционном подходе к реализации реактивных систем, редко оказываются удобными и простыми для дальнейшего расширения и поддержки, особенно в случаях, когда поведение системы нетривиально. В данной статье рассматривается методика разработки, эффективно решающая большую часть подобных проблем. Поведение системы в целом описывается в виде конечного автомата на диаграмме состояний UML. Локальные действия в отдельных состояниях системы определяются при помощи соответствующих классов и функций C++. В статье также описывается расширение средства моделирования ArgoUML, предназначенное для автоматизации процесса разработки.


E>SObjectizer
Автор: Евгений Охотников
Дата: 30.12.05
так же изначально предназначался для упрощения программирования конечных автоматов. Похоже, разработка фреймворков на эту тему не собирается останавливаться


Ах, всё бы это объединить в один мега-фреймворк с мега-возможностями, что бы вообще всё автоматически генерировалось
Хорошо иметь возможность автогенерации кода, хорошо иметь механизм доставки сообщений (многопоточный/однопоточный/активные агенты/автоматы), хорошо иметь механизм отделения состояния от агента, а иногда плохо...
Только не упадёт ли фреймворк под собственным весом?

E>


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[3]: Реализация систем, управляемых событиями
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 31.05.06 13:25
Оценка:
Здравствуйте, remark, Вы писали:

R>Ах, всё бы это объединить в один мега-фреймворк с мега-возможностями, что бы вообще всё автоматически генерировалось

R>Хорошо иметь возможность автогенерации кода, хорошо иметь механизм доставки сообщений (многопоточный/однопоточный/активные агенты/автоматы), хорошо иметь механизм отделения состояния от агента, а иногда плохо...
R>Только не упадёт ли фреймворк под собственным весом?

Нет. Просто его никто не напишет.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Реализация систем, управляемых событиями
От: RGB_Dart Австралия  
Дата: 31.05.06 14:32
Оценка:
Любопытная статья.
Хотя то что авторы называют "конечным автоматом" уже больше похоже на Сеть Петри.
И еще авторы не дали определение "машины состояний".
Вообще, получается что авторы сами дали определения известных математических терминов. Обычно в таких случаях берут готовое определение и делают ссылку на источник

Но, в принципе, неплохо.
Re: Реализация систем, управляемых событиями
От: Димчанский Литва http://dimchansky.github.io/
Дата: 06.06.06 14:04
Оценка:
Здравствуйте, А.Рахимбердыев, А.Ксенофонтов, Е.Адаменков, Д.Анто, Вы писали:

АРА>Статья:

АРА>Реализация систем, управляемых событиями
Автор(ы): А.Рахимбердиев, А.Ксенофонтов, Е.Адаменков, Д.Антонов, Р.Степанов
Дата: 02.03.2006
Опыт авторов показывает, что решения, получающиеся при традиционном подходе к реализации реактивных систем, редко оказываются удобными и простыми для дальнейшего расширения и поддержки, особенно в случаях, когда поведение системы нетривиально. В данной статье рассматривается методика разработки, эффективно решающая большую часть подобных проблем. Поведение системы в целом описывается в виде конечного автомата на диаграмме состояний UML. Локальные действия в отдельных состояниях системы определяются при помощи соответствующих классов и функций C++. В статье также описывается расширение средства моделирования ArgoUML, предназначенное для автоматизации процесса разработки.


АРА>Авторы:

АРА>А.Рахимбердыев, А.Ксенофонтов, Е.Адаменков, Д.Анто

Может быть можно скачать исходники в виде файлов (то что к машине относится), чтобы не вычленять из статьи?
Re[2]: Реализация систем, управляемых событиями
От: _Obelisk_ Россия http://www.ibm.com
Дата: 06.06.06 18:39
Оценка:
Здравствуйте, LelicDsp, Вы писали:

LD>В конце концов авторы пришли к тому, к чему и должны были — автоматически генерируемый код по формальному описанию. Из этого следует замечания:

LD>1) Непонятно, чем эта реализация колеса, лучше чем предыдущие. (Обычно на SDL такие вещи пишут).

SDL имеет очень узкую область применения. Да и statechart-ы UML-я несколько отличны от SDL-ых процессов. В SDL-е автомат — неотъемлемая часть процесса и формальная run-time семантика SDL-я оперирует абстрактным statemachine-ами.
В случае же UML-я, statechart носит несколько более неформальный характер. И state в контексте UML-я скорее объект со своими свойствами, чем state в контексте SDL-я. Объектизировали state-ы лишь в SDL2000, но эта спецификация не получила особого распространения.



Душа обязана трудиться! (с) Н.Заболоцкий.
Re[2]: Реализация систем, управляемых событиями
От: pintelou  
Дата: 10.06.06 08:57
Оценка:
Д>Может быть можно скачать исходники в виде файлов (то что к машине относится), чтобы не вычленять из статьи?

Конечно. Вот они: http://rsdn.ru/File/22883/hsm-src.zip
Re[4]: Реализация систем, управляемых событиями
От: pintelou  
Дата: 10.06.06 09:03
Оценка: 28 (1)
E>Кстати, обращение к авторам статьи, если они читают данное обсуждение: можно ли увидеть скриншоты вашей системы и примеры кода, который генерируется для дальнейшей правки руками?

К сожалению, там все строго закрыто NDA. Для того, чтобы не нарушить это соглашение, весь код для статьи пришлось написать с нуля (конечно, машина состояний получилась сильно упрощенной). Но хорошее представление о том, как выглядит самописный и сгенерированный код можно получить из исходников: http://rsdn.ru/File/22883/hsm-src.zip. В реальной жизни файлы .inc были бы сгенерированы, а все остальные — написаны руками.
Re[2]: Реализация систем, управляемых событиями
От: pintelou  
Дата: 10.06.06 09:14
Оценка:
RGB>Хотя то что авторы называют "конечным автоматом" уже больше похоже на Сеть Петри.
С другой стороны, это вполне соответствует тому, что назвается "конечным автоматом" в UML.

RGB>Вообще, получается что авторы сами дали определения известных математических терминов. Обычно в таких случаях берут готовое определение и делают ссылку на источник

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

RGB>Но, в принципе, неплохо.

Спасибо.
Re[2]: Реализация систем, управляемых событиями
От: pintelou  
Дата: 10.06.06 09:25
Оценка:
LD>2) Когда авторы подойдут к реализации систем еще бОльших масштабов (с бОльшим числом состояний), они убедяться, что графическая нотация уже неудобна, т.к. очень громоздка. И придут к тому, что проще описывать с помощью формального текстового, а не графического, языка — и опять привет колесо. см п.1.
Вполне возможно. В наших системах помогал реюс компонентов — т.е. один раз нарисованная машина состояний использовалась в разных контекстах. Это очень хорошо работало в нашей области — моделирование железа — там типичная ситуация, когда у вас есть какой-то, условно говоря, сумматор и вы 16 экземпляров этого сумматора запихиваете в разные куски схемы. Таким образом число состояний *на одной диаграмме* удавалось держать в разумных рамках.
Re[3]: Реализация систем, управляемых событиями
От: Димчанский Литва http://dimchansky.github.io/
Дата: 09.08.06 14:12
Оценка:
Здравствуйте, pintelou, Вы писали:

P>Конечно. Вот они: http://rsdn.ru/File/22883/hsm-src.zip


Не критично в данном случае, но всё же.
В тестах в функции build_events куча new, но ни одного delete для них я не нашёл.
Re[4]: Реализация систем, управляемых событиями
От: damiryaka  
Дата: 02.03.09 07:08
Оценка:
Здравствуйте, Димчанский, Вы писали:

Д>Здравствуйте, pintelou, Вы писали:


P>>Конечно. Вот они: http://rsdn.ru/File/22883/hsm-src.zip


Д>Не критично в данном случае, но всё же.

Д>В тестах в функции build_events куча new, но ни одного delete для них я не нашёл.

почему-то эти исходники не компилируются.
говорит

Error 1 error C2989: 'hsm::StateMachine' : class template has already been declared as a non-class template d:\private\workspace\песочница\hsm\hsm.h 230 HSM

для того, чтобы компилировались мне пришлось сделать вот что.
исправить строчку
friend class StateMachine;

на строчку
friend class StateMachine<CONTEXT>;


и добавить объявление
 
template<class CONTEXT> class StateMachine;

до определения шаблона класса
 
template<class CONTEXT>class BaseState {...}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.