Russian Qt Forum

Программирование => С/C++ => Тема начата: Денис от Ноябрь 19, 2014, 11:20



Название: FSM и HSM ?
Отправлено: Денис от Ноябрь 19, 2014, 11:20
Недавно открывал тему про паттерн HSM (Hierarhical State Machine).
Так вот тема заинтересовала и мне интересно есть ли у кого-то примеры хорошо реализованных паттернов FSM (Finite State Machine) и HSM на Си и C++ ?
Можно и самому реализовать, но интересно посмотреть действительно стоящие примеры, и примеры которые стали стандартом дефакто ?


Название: Re: FSM и HSM ?
Отправлено: Akon от Ноябрь 19, 2014, 18:27
Полагаю, стоит посмотреть реализацию из буста.

PS.
Я ее не видел.


Название: Re: FSM и HSM ?
Отправлено: Денис от Ноябрь 19, 2014, 23:17
Полагаю, стоит посмотреть реализацию из буста.

PS.
Я ее не видел.

А серьезно, кто-то программирует в стиле конечных автоматов ? Есть ли у кого-то интересные ссылки ?


Название: Re: FSM и HSM ?
Отправлено: Akon от Ноябрь 20, 2014, 08:04
А что значит "стиле конечных автоматов"? Полагаю, машина состояний как отдельный класс должна использоваться, когда возможны несколько таких машин для класса (паттерн "Стратегия"). Ну или более общно - когда логика смены состояний должна быть инкапсулирована в отдельный класс по каким-либо причинам.


Название: Re: FSM и HSM ?
Отправлено: vulko от Ноябрь 20, 2014, 09:52
В прикладных задачах чаще всего нет смысла использовать конечные автоматы.


Название: Re: FSM и HSM ?
Отправлено: Old от Ноябрь 20, 2014, 10:07
В прикладных задачах чаще всего нет смысла использовать конечные автоматы.
Странное заявление. А какое смысл вы вкладываете в "прикладные задачи"?
Конечные автоматы замечательно описывают автоматические системы (которые должны работать сами и принимать решения на основании происходящих событий), не говоря уже о всяких протоколах. Позволяют легко их расширять (событиями и состояниями) без риска развалить весь комплекс, а когда состояний очень много (сотни, тысячи), то это наверное единственный способ описать такую систему, что бы она вообще заработала.


Название: Re: FSM и HSM ?
Отправлено: vulko от Ноябрь 20, 2014, 12:48
В прикладных задачах чаще всего нет смысла использовать конечные автоматы.
Странное заявление. А какое смысл вы вкладываете в "прикладные задачи"?
Конечные автоматы замечательно описывают автоматические системы (которые должны работать сами и принимать решения на основании происходящих событий), не говоря уже о всяких протоколах. Позволяют легко их расширять (событиями и состояниями) без риска развалить весь комплекс, а когда состояний очень много (сотни, тысячи), то это наверное единственный способ описать такую систему, что бы она вообще заработала.

И каков процент таких задач? Ну например, есть состояния у виджета. В зависимости от состояния, layout меняется например.
Для такой задачи мне нужен конечный автомат?

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


Это не странный комментарий, это просто ответ на
Цитировать
А серьезно, кто-то программирует в стиле конечных автоматов ? Есть ли у кого-то интересные ссылки ?


Название: Re: FSM и HSM ?
Отправлено: Old от Ноябрь 20, 2014, 13:32
И каков процент таких задач? Ну например, есть состояния у виджета. В зависимости от состояния, layout меняется например.
Для такой задачи мне нужен конечный автомат?
Ну я бы это задачей не назвал. Поэтому, мое мнение: для такой ерунды конечные автоматы не нужны.

Это не странный комментарий, это просто ответ на
Вы отвечаете за всю отрасль?
Не надо, у нас уже есть такой специалист. :)


Название: Re: FSM и HSM ?
Отправлено: vulko от Ноябрь 20, 2014, 15:15
И каков процент таких задач? Ну например, есть состояния у виджета. В зависимости от состояния, layout меняется например.
Для такой задачи мне нужен конечный автомат?
Ну я бы это задачей не назвал. Поэтому, мое мнение: для такой ерунды конечные автоматы не нужны.

Это не странный комментарий, это просто ответ на
Вы отвечаете за всю отрасль?
Не надо, у нас уже есть такой специалист. :)

Почему за всю отрасль?
Мне вот за 6 лет работы ниразу не повстречались конечные автоматы. Видел реализации стейт машин, но все это было очень упрощенно, в сравнении с универсальной реализацией той же HSM.
Я не отрицаю что где-то они нужны. Но таких областей не так уж много.


Название: Re: FSM и HSM ?
Отправлено: Денис от Ноябрь 20, 2014, 19:42
И каков процент таких задач? Ну например, есть состояния у виджета. В зависимости от состояния, layout меняется например.
Для такой задачи мне нужен конечный автомат?
Ну я бы это задачей не назвал. Поэтому, мое мнение: для такой ерунды конечные автоматы не нужны.

Это не странный комментарий, это просто ответ на
Вы отвечаете за всю отрасль?
Не надо, у нас уже есть такой специалист. :)

Почему за всю отрасль?
Мне вот за 6 лет работы ниразу не повстречались конечные автоматы. Видел реализации стейт машин, но все это было очень упрощенно, в сравнении с универсальной реализацией той же HSM.
Я не отрицаю что где-то они нужны. Но таких областей не так уж много.

Боже мой ... отошли от сути вопроса !!!
Я спрашивал есть ли у кого-то стоящие примеры конечных автоматов, а не нужны ли они )
И естественно конкретно для определенных задач подходит программирование в стиле конечных автоматов, кое-где его и не надо использовать ... Но вопрос топика не о это ... Ссылки в студию !!!!!!!!! )  ;D
Для задачи с малым количество сообщений конечные автоматы не нужны, а вот где сообщения зашкаливают, в частности системы искусственного интеллекта, там без них не обойтись, бо придет тебе сообщение в такой системе заранее неизвестное и как программа будет себя вести ?
Во общем хотелось бы увидеть интересные ссылки на темы и паттерны посвященные такому программированию !?


Название: Re: FSM и HSM ?
Отправлено: Old от Ноябрь 20, 2014, 20:01
Ссылки в студию !!!!!!!!! )  ;D
А какие ссылки вы ждете? :)
Две реализации State Machine есть в бусте, еще одна в Qt. Примеры использования есть в их документациях.


Название: Re: FSM и HSM ?
Отправлено: vulko от Ноябрь 20, 2014, 20:21
И каков процент таких задач? Ну например, есть состояния у виджета. В зависимости от состояния, layout меняется например.
Для такой задачи мне нужен конечный автомат?
Ну я бы это задачей не назвал. Поэтому, мое мнение: для такой ерунды конечные автоматы не нужны.

Это не странный комментарий, это просто ответ на
Вы отвечаете за всю отрасль?
Не надо, у нас уже есть такой специалист. :)

Почему за всю отрасль?
Мне вот за 6 лет работы ниразу не повстречались конечные автоматы. Видел реализации стейт машин, но все это было очень упрощенно, в сравнении с универсальной реализацией той же HSM.
Я не отрицаю что где-то они нужны. Но таких областей не так уж много.

Боже мой ... отошли от сути вопроса !!!
Я спрашивал есть ли у кого-то стоящие примеры конечных автоматов, а не нужны ли они )
И естественно конкретно для определенных задач подходит программирование в стиле конечных автоматов, кое-где его и не надо использовать ... Но вопрос топика не о это ... Ссылки в студию !!!!!!!!! )  ;D
Для задачи с малым количество сообщений конечные автоматы не нужны, а вот где сообщения зашкаливают, в частности системы искусственного интеллекта, там без них не обойтись, бо придет тебе сообщение в такой системе заранее неизвестное и как программа будет себя вести ?
Во общем хотелось бы увидеть интересные ссылки на темы и паттерны посвященные такому программированию !?

В state machine нет ничего сложного, чтобы изучать ссылки, паттерны и т.п.
10 минут можно потратить на создание своей имплементации, вместо того чтобы искать готовую.
На чистом С имплементация была в соседней теме где ты спрашивал про hsm.
Но там конечно криво спроектированно имхо. Возьми идею за основу, накидай свой код поверх.

Ты больше времени потратишь на гугл и осмысление названий и логики работы, чем если напишешь сам.


Название: Re: FSM и HSM ?
Отправлено: Денис от Ноябрь 20, 2014, 23:36
И каков процент таких задач? Ну например, есть состояния у виджета. В зависимости от состояния, layout меняется например.
Для такой задачи мне нужен конечный автомат?
Ну я бы это задачей не назвал. Поэтому, мое мнение: для такой ерунды конечные автоматы не нужны.

Это не странный комментарий, это просто ответ на
Вы отвечаете за всю отрасль?
Не надо, у нас уже есть такой специалист. :)

Почему за всю отрасль?
Мне вот за 6 лет работы ниразу не повстречались конечные автоматы. Видел реализации стейт машин, но все это было очень упрощенно, в сравнении с универсальной реализацией той же HSM.
Я не отрицаю что где-то они нужны. Но таких областей не так уж много.

Боже мой ... отошли от сути вопроса !!!
Я спрашивал есть ли у кого-то стоящие примеры конечных автоматов, а не нужны ли они )
И естественно конкретно для определенных задач подходит программирование в стиле конечных автоматов, кое-где его и не надо использовать ... Но вопрос топика не о это ... Ссылки в студию !!!!!!!!! )  ;D
Для задачи с малым количество сообщений конечные автоматы не нужны, а вот где сообщения зашкаливают, в частности системы искусственного интеллекта, там без них не обойтись, бо придет тебе сообщение в такой системе заранее неизвестное и как программа будет себя вести ?
Во общем хотелось бы увидеть интересные ссылки на темы и паттерны посвященные такому программированию !?

В state machine нет ничего сложного, чтобы изучать ссылки, паттерны и т.п.
10 минут можно потратить на создание своей имплементации, вместо того чтобы искать готовую.
На чистом С имплементация была в соседней теме где ты спрашивал про hsm.
Но там конечно криво спроектированно имхо. Возьми идею за основу, накидай свой код поверх.

Ты больше времени потратишь на гугл и осмысление названий и логики работы, чем если напишешь сам.

Ну я также думал, а потом наткнулся на паттерн от Quantum Leaps и подумал нету ли чего-то еще похожего как и их библиотека State Machine ?
Посмотрите какие фирмы пользуются их наработками в стиле конечных автоматов и обомлеете ... даже разработчики Qt Framework-а не брезгают прибегать к их решениям ...


Название: Re: FSM и HSM ?
Отправлено: m_ax от Ноябрь 20, 2014, 23:53
Цитировать
Ну я также думал, а потом наткнулся на паттерн от Quantum Leaps и подумал нету ли чего-то еще похожего как и их библиотека State Machine ?
Посмотрите какие фирмы пользуются их наработками в стиле конечных автоматов и обомлеете ... даже разработчики Qt Framework-а не брезгают прибегать к их решениям .
Ну так посмотрите на реализацию в boost'е.. Boost всёже далеко не глупыми людьми разрабатывался.. И вообще, считаю, что нужно стремиться к этой философии заложенной там (в boost'е).. Во всяком случае, мне приходилось писать под себя нечто, аналогичное (что есть в boost'е),  лишь в очень-очень специфических задачах и то это па пальцам пересчитать..
Мораль в итоге такова:
Прежде чем изобретать свой велосипед (как рекомендуют тут асы 80 уровня) посмотрите на то, как это реализовано у тех, кто реально заслуживает авторитета  и уже потом, если в чём то объективно не согласны, создавайте своё, бессмертное)
Всё же, повторюсь,  boost далеко  не дураки писали..

Посмотрите как там, а потом уже делайте выводы) Надо оно вам али нет..)


Название: Re: FSM и HSM ?
Отправлено: vulko от Ноябрь 21, 2014, 09:14
Цитировать
Ну я также думал, а потом наткнулся на паттерн от Quantum Leaps и подумал нету ли чего-то еще похожего как и их библиотека State Machine ?
Посмотрите какие фирмы пользуются их наработками в стиле конечных автоматов и обомлеете ... даже разработчики Qt Framework-а не брезгают прибегать к их решениям .
Ну так посмотрите на реализацию в boost'е.. Boost всёже далеко не глупыми людьми разрабатывался.. И вообще, считаю, что нужно стремиться к этой философии заложенной там (в boost'е).. Во всяком случае, мне приходилось писать под себя нечто, аналогичное (что есть в boost'е),  лишь в очень-очень специфических задачах и то это па пальцам пересчитать..
Мораль в итоге такова:
Прежде чем изобретать свой велосипед (как рекомендуют тут асы 80 уровня) посмотрите на то, как это реализовано у тех, кто реально заслуживает авторитета  и уже потом, если в чём то объективно не согласны, создавайте своё, бессмертное)
Всё же, повторюсь,  boost далеко  не дураки писали..

Посмотрите как там, а потом уже делайте выводы) Надо оно вам али нет..)


максимка, опять очки не протер?))

где я предложил изобрести свой велосипед?)
Цитировать
Возьми идею за основу, накидай свой код поверх.