Конечный автомат на Qt, (Qt State Machine Framework) |
Здравствуйте, гость ( Вход | Регистрация )
Конечный автомат на Qt, (Qt State Machine Framework) |
Litkevich Yuriy |
31.1.2009, 18:53
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Нашел в лаборатории у тролей Qt State Machine Framework
|
|
|
SABROG |
31.1.2009, 21:13
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Я не совсем понимаю предназначение. В качестве примера там приводится "машина" (замкнутый цикл?) из трех состояний, для кнопки. Жмем первый раз - меняется текст, у кнопки состояние 2, жмем второй раз - снова меняется текст, у кнопки состояние 3. Жмем третий раз - устанавливается первоначальный текст и состояние кнопки 1. Так вот чем это отличается от простого числового параметра у объекта?
|
|
|
Litkevich Yuriy |
31.1.2009, 23:12
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Так вот чем это отличается от простого числового параметра у объекта? параметр описывает текущее состояние. Но его можно изменять. И там приведен пример изменения состояния.Пример удачнее видимо будет на "флажке" (QCheckBox), который имеет три состояния, менятся они могут только поочереди - простой пример конечного автомата. |
|
|
SABROG |
1.2.2009, 0:04
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Почитал в инете примеры со строками на эту тему тут, тут и тут, а так и не понял какое преимущество он дает.
Ну, а чем тогда конечный автомат лучше для QCheckBox по сравнению с этим кодом?
Возможно и не работает, но идея должна быть понятна |
|
|
Litkevich Yuriy |
1.2.2009, 0:14
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
SABROG |
1.2.2009, 0:55
Сообщение
#6
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
|
|
|
Antrix |
1.2.2009, 16:23
Сообщение
#7
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 25.9.2008 Пользователь №: 300 Спасибо сказали: 4 раз(а) Репутация: 0 |
Конечный автомат, это ориентированый граф, который используется для переключения состояний. Вот например ты пишешь игру. У игры есть три состояния:
- bool is GameStart = false; //игра началась - bool isPause = false; //пауза - bool is gameEnd = false;//конец игры Но вот если подумать, то при таком раскладе, возможен вариант, когда все перемены true, тоесть игра началась, и в тоже время пауза, и игра закончилась, что не есть правильно. Так как, тип bool имет 2 состояния true или false, и переменных типа bool у нас 3, то и вариантов комбинаций 3 в квадрате = 9, хатя нам реально нужно всего 3. Что б это исправить, используют конечный автомат - отдельная функция или класс, которая и управляеет переключением состояний. Первое состояние - игра началась, значит: - bool is GameStart = true; - bool isPause = false; - bool is gameEnd = false; Второе состояние - пауза: -- bool is GameStart = false; - bool isPause = true; - bool is gameEnd = false; Третье состояние - конец: -- bool is GameStart = false; - bool isPause = false; - bool is gameEnd = true; Причем возможны только такие переходы; игра началась <--> пауза; игра началась --> конец игры. Вот хороший пример с лифтом, правда на паскале: http://books.google.com/books?id=JO9-7Riwl...1&ct=result |
|
|
kwisp |
1.2.2009, 17:11
Сообщение
#8
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
У игры есть три состояния: - bool is GameStart = false; //игра началась - bool isPause = false; //пауза - bool is gameEnd = false;//конец игры мне кажется пример, мягко говоря, немного неудачен. не понятно зачем 3 переменные bool??? если не ошибаюсь чаще используется перечисления
Раскрывающийся текст Цитата Первое состояние - игра началась, значит: - bool is GameStart = true; - bool isPause = false; - bool is gameEnd = false; m_station = e_PLAY; Цитата Второе состояние - пауза: -- bool is GameStart = false; - bool isPause = true; - bool is gameEnd = false; m_station = e_PAUSE; Цитата Третье состояние - конец: -- bool is GameStart = false; - bool isPause = false; - bool is gameEnd = true; m_station = e_NOPLAY; что касается Qt State Machine Framework, мне кажется эта штука сгодится только для небольших реализаций как в примере с кнопкой. для сложных машин состояний придется все равно самому реализовывать код... Сообщение отредактировал kwisp - 1.2.2009, 17:23 |
|
|
Litkevich Yuriy |
1.2.2009, 17:19
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
kwisp |
1.2.2009, 17:28
Сообщение
#10
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
|
|
|
Текстовая версия | Сейчас: 4.12.2024, 22:53 |