![]() |
|
|
![]()
|
|
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
Есть 4 состояния для приложения A. Для просты восприятие сразу прям как по задаче.
Dead, Not Connected, Hovering (аля завис), Normal. Тем или иным способом приложение B каждые N секунд присваивает A, одно из этих состояний. Вполне нормальная ситуация, если приложение A работает корректно, то череда его состояний будет Normal -> Normal -> Normal -> ... Между состояние возможны следующие переходы. Dead -> во все Not Connected -> Dead, Normal Hovering -> во все Normal -> во все. При переходе во любое состояние кроме Normal, производится какое то действие. Переход самого в себя не может быть (т.е. Dead -> Dead), на Практике, если A сломан, то на каждой итерации проверки, ему будет присваиваться статус Dead, но только при первом таком переходе (например Normal -> Dead) должно выполнится некое действия соответствующее состянию Dead. В дальнейшем (Dead -> Dead) просто игнорируется. До появление состояние Hovering, все это было реализовано следующим образом
В принципе не шибко сложно. Появление же нового статус делает все немного мрачнее. А то, что еще нужно учитывать что в него можно перейти не из любого состояния, делает такую последовательность if-else вообще хреного понимаемой. А еще и не нулевая вероятностью появления новых состояний. В следствии чего возник вопрос, наверно есть какие то устоявшиеся алгоритмы, принципы, подходы к решению подобного рода задач ? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
суть, я думаю. уловишь:
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Я делал state machine на классах.
Имеем набор классов с общим абстрактным предком. У у каждого класса есть метод "state" собственно это состояние и обрабатывающий. Метод возвращает ссылку на следующий класс. В результате этот огромный if аккуратно и лекгочитаемо размещен мелкими порциями в разных классах. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| cupper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
Мой вопрос это сферический конь. Но понял я это уже когда создал топик. Поглядел как белы люби реализую граф переходов, увидел что в бусте даже есть компонента для этого. Но это когда реально граф, а не 4 состояния. В итоге решил вообще немного логику пересмотреть, чтобы избавится от этой запутанности. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |