Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

State Mashine. Объясните.   Найти похожие ветки 

 
333333-й   (2012-09-23 13:09) [0]

Объясните про данный паттерн.
На пальцах. Мне тупенькому.
Где применяется на реальных задачах.


 
TUser ©   (2012-09-23 13:18) [1]

Кто конкретно объяснить? Что такое конечный автомат? Мне понравилась вот эта книга

http://www.ozon.ru/context/detail/id/2432037/

> Где применяется на реальных задачах.

Например, для распознавания регулярных выражений.


 
TUser ©   (2012-09-23 13:18) [2]

Правда,с современными реализациями регулярных выражений -чуть не так.


 
Пит   (2012-09-23 13:19) [3]

а паттерн State ты полностью понял?


 
333333-й   (2012-09-23 13:32) [4]


> Пит   (23.09.12 13:19) [3]
> а паттерн State ты полностью понял?


Есть такой паттерн?


 
Дмитрий С ©   (2012-09-23 13:46) [5]

О а я думал что State machine это что-то вроде процедуры:

procedure StateMachine(var State: TMachineState, ...);

Которая изменяет состояние при каждом вызове в (или вне) зависимости от параметров.


 
Дмитрий С ©   (2012-09-23 13:47) [6]

Я этим пользуюсь для выполнения http запроса на микроконтроллере, который выполняется долго по времени. Получается некая имитация распараллеливания.


 
Пит   (2012-09-23 14:18) [7]


>
> Есть такой паттерн?

а разве нету?


 
Юрий Зотов ©   (2012-09-23 14:42) [8]

> 333333-й   (23.09.12 13:09)

State Mashine - машина состояний. В русскоязычной литературе обычно используется термин "конечный автомат".

> Объясните про данный паттерн. На пальцах.

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

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

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

Над иметь в виду, что здесь под "символом" подразумевается не символ, как таковой (буква, цифра, знак...), а некая логически цельная единица информации. Например, многозначное число, или многобуквенное слово.

Программа - это тот же автомат. Ее состояние в каждый момент времени определяется двумя факторами:
- какой участок кода выполняется;
- какие значения имеют переменные.

Если в данном месте кода все переменные имеют допустимые значения, то состояние тоже допустимо, а если хотя бы одна из переменных имеет недопустимое значение, то и все состояние недопустимо. Например, перед делением знаменатель не должен быть равен нулю:

var
 z: double = 1; // Задали начальное состояние.  
begin
 while z >= 0 do // Задали признак окончания входной цепочки.
 begin
   ReadLn(z); // Считали входной символ - перешли в новое состояние.
   if z = 0 then // Проверили допустимость этого нового состояния.
     raise ...  // Оно недопустимо, работу прекращаем.
   WriteLn(1/z) // Оно допустимо, работу продолжаем.
 end
end

В этой программе начальное состояние такое:
- выполнение на точке входа;
- переменная z (еще не хранящая никакого входного символа) равна 1.

Все состояния здесь являются допустимыми, кроме двух:
1.
- выполняется процедура ReadLn;
- входной символ не является числом.
2.
- выполняется оператор if;
- входной символ (хранящийся в переменной z) равен нулю.

Конечное состояние:
- выполнена процедура ReadLn;
- входной символ (хранящийся в переменной z) меньше нуля.

> Где применяется на реальных задачах.

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

По сути дела, любая конструкция вида
if <что-то> then <возбудить исключение>
уже говорит о том, что, здесь использован принцип конечного автомата (проверка состояния). И в недопустимом состоянии работа программы не обязательно заканчивается, потому что его можно откатить, перехватив исключение.


 
Юрий Зотов ©   (2012-09-23 15:14) [9]

http://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80_.D1.81_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1 .8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5.D0.BC_.D0.BA.D0.BE.D0.BD.D0.B5.D1. 87.D0.BD.D0.BE.D0.B3.D0.BE_.D0.B0.D0.B2.D1.82.D0.BE.D0.BC.D0.B0.D1.82.D0.B0


 
Пит   (2012-09-23 17:20) [10]

молодец вы, дядь Юр, конечно.

Но по формулировке заглавного вопроса достаточно очевидно, что автору ответ нафиг не нужен...


 
Rouse_ ©   (2012-09-23 17:36) [11]


> Пит   (23.09.12 17:20) [10]

Смысл поста?


 
RWolf ©   (2012-09-23 18:02) [12]

ответ прост: этот «паттерн» применяется везде, где есть вычислительное оборудование, потому что любая цифровая электроника с памятью, начиная с простого триггера, есть конечный автомат.


 
Rouse_ ©   (2012-09-23 18:14) [13]

Не только в оборудовании, в виртуальных машинах конечные автоматы частое явление.


 
Пит   (2012-09-23 20:27) [14]


> Смысл поста?

моего? Да жалко, когда профи время так тратят впустую... ( Да понимаю я всё...
Ну ок, дождемся автора ,может быть и правда он неделю разбирался, а теперь спрашивает


 
Rouse_ ©   (2012-09-23 20:30) [15]


> Пит   (23.09.12 20:27) [14]

Этот пост останется в хистори и вполне возможно в дальнейшем будет кому-то полезен, так что зря ты так, не системный подход :)


 
DVM ©   (2012-09-23 20:41) [16]

О машинах состояний и их применении хорошо рассказано в книге
Д. Бакнелл
Фундаментальные алгоритмы и структуры данных в Delphi


 
Petr V. Abramov ©   (2012-09-23 21:24) [17]

чуть более чаще чем часто "паттерн" имеет гораздо более прозаический смысл, применяется при автоматизации документооборота, во всяких неб-гоугодных местах типа банков и министерств.
есть документ, допустим, инвойс к оплате. вот его ввели, он в состоянии "введен". но ввести его могли сдуру (например, по второму разу случайно), а могли не сдуру. соответесвенно, есть операции "пардон" и "отправить на подпись", по результатам он получит состояния "введен сдуру" или "на подписи".
дальше другой чел, теоретически чуть более умный, его смотрит, и у него доступны операции "нафих" и "на оплату", по результатам от переходит в состояние "введен сдуру" или "оплатить".
ну и т.д.


 
QAZ2   (2012-09-23 21:42) [18]

Удалено модератором


 
Юрий Зотов ©   (2012-09-23 21:48) [19]


> QAZ2   (23.09.12 21:42) [18]

Новомодное словечко, означающее просто "шаблон". Т.е. нечто, обладающее заранее известными свойствами. Необязательно из ООП.


 
DVM ©   (2012-09-23 21:49) [20]


> QAZ2   (23.09.12 21:42) [18]

нет


 
DVM ©   (2012-09-23 21:52) [21]


> QAZ2

все программисты для решения схожих задач зачастую используют одни и те же приемы, к которым они зачастую пришли самостоятельно и независимо от других. Вот эти приемы и есть паттерны проектирования, ну или шаблоны. Эти шаблоны классифицировали, дали им имена. Само по себе изучение шаблонов - пустая трата времени, интересоваться ими стоит уже когда сам к ним пришел.


 
Petr V. Abramov ©   (2012-09-23 23:19) [22]

Удалено модератором


 
Petr V. Abramov ©   (2012-09-23 23:27) [23]

Удалено модератором


 
QAZ2   (2012-09-24 21:47) [24]

шаблон некой фигни которую нельзя описать классами или процедурами ???


 
Ega23 ©   (2012-09-25 09:36) [25]


> шаблон некой фигни которую нельзя описать классами или процедурами???

При чём тут классы или процедуры? Речь о "приёме" идёт.
Вот у тебя есть "сортировка бинарным деревом". Ты как её, через процедуры или через классы будешь реализовывать?  :)


 
Пит   (2012-09-25 09:38) [26]


> Этот пост останется в хистори

на этом сайте? ))
Тут форум очень грамотно написан. Пару месяцев - и топика нету, нагрузка знаешь ли ) Впрочем, вроде есть зеркало кем-то написанное, так что ладно )


> так что зря ты так, не системный подход

да блин просто немного противно. Ведь это паттерн, как правильно сказали - шаблон, то есть настолько типичная штука которую использовали уже миллионы раз, что её выделили как классику, пережевали и успокоились. Соответственно, любую информацию об этой штуки можно найти максимум минут за 5, просто немного погуглив.

Розыч, кстати, объясни мне про Visual Studio, где она практически используется, на пальцах в реальных задачах опиши.


 
картман ©   (2012-09-25 09:57) [27]

русский меняется, следующие издания книг будут называться "Шаблоны данных и шаблоны"... не, вот так: Шаблоны и шаблоны.))


 
Ega23 ©   (2012-09-25 10:25) [28]


> объясни мне про Visual Studio, где она практически используется

???


 
Компромисс ©   (2012-09-25 10:57) [29]


> Само по себе изучение шаблонов - пустая трата времени, интересоваться
> ими стоит уже когда сам к ним пришел.


Неверно ИМХО. Очень полезно изучить, какие уже есть велосипеды, перед тем как начинать свой изобретать. К некоторым шаблонам очень трудно придти самостоятельно, на это слишком много времени уйдет, причем впустую.


 
Пит   (2012-09-25 11:37) [30]


> Неверно ИМХО

ИМХО, абсолютно верно. Иначе ты будешь использовать шаблон не понимая почему именно так. Или тебе должен объяснить очень грамотный профи с разбором контр примеров, как можно по другому и в чем минусы, плюсы и что ВОТ ЭТО - наиболее оптимально.

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

Чтобы не говорили мудрецы - а собственные опыт отпечатывается гораздо лучше, чем чужой.


 
DVM ©   (2012-09-25 12:03) [31]


> Компромисс ©   (25.09.12 10:57) [29]


> Неверно ИМХО. Очень полезно изучить, какие уже есть велосипеды,
>  перед тем как начинать свой изобретать.

Главное, чтобы после прочтения, человек не начал применять паттерны ради паттернов.


 
Ega23 ©   (2012-09-25 12:09) [32]


> Главное, чтобы после прочтения, человек не начал применять
> паттерны ради паттернов.

плюс миллион. А в 90% случаев - именно такая картина. Умные слова, диаграммы, то-сё. И тонны говнокода.


 
Компромисс ©   (2012-09-25 13:20) [33]

Пит   (25.09.12 11:37) [30]


> ИМХО, абсолютно верно. Иначе ты будешь использовать шаблон
> не понимая почему именно так. Или тебе должен объяснить
> очень грамотный профи с разбором контр примеров, как можно
> по другому и в чем минусы, плюсы и что ВОТ ЭТО - наиболее
> оптимально.


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

DVM ©   (25.09.12 12:03) [31]


> Главное, чтобы после прочтения, человек не начал применять
> паттерны ради паттернов.


Да, бывает такое. Тем не менее, это уже проблема не шаблонов, а человека. Любое средство можно использовать не по назначению


 
Rouse_ ©   (2012-09-25 21:42) [34]


> Розыч, кстати, объясни мне про Visual Studio, где она практически
> используется, на пальцах в реальных задачах опиши.

На пальцах? Она используется везде и в любых задачах где не используются другие языки программирования.


 
Ega23 ©   (2012-09-25 21:48) [35]


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


срЕды, я бы сказал. Писать и в нотепаде можно. Муторно, но можно.


 
Пит   (2012-09-26 09:46) [36]

Удалено модератором


 
Компромисс ©   (2012-09-26 09:57) [37]


> State Mashine - такой паттерн программирования, который
> используется в любых задачах, где не используются другие
> паттерны )))


У меня обычно паттерны кучкуются в проектах: если один паттерн появился, то скоро и другие появляются.


 
Jeer ©   (2012-09-26 15:16) [38]

Для любителей виртуальных hard-"State Mashine":

http://ozark.hendrix.edu/~burch/logisim/

Занятная штуковина, жаль эффект "гонок" не реализован :)


 
jack128_   (2012-09-26 16:02) [39]


> Ты как её, через процедуры или через классы будешь реализовывать?
>   

через процедуры И классы(или рекорды). А какая разница?


 
jack128_   (2012-09-26 16:05) [40]


> Новомодное словечко, означающее просто "шаблон". Т.е. нечто,
>  обладающее заранее известными свойствами. Необязательно
> из ООП.

односвязный список целых чисел имеет заранее определённые свойства. Это шаблон?



Страницы: 1 2 3 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.082 c
2-1340013571
IGray
2012-06-18 13:59
2013.03.22
Как правильно закрыть модальную форму из OnActivate?


15-1320615494
Kerk
2011-11-07 00:38
2013.03.22
Подсветка синтаксиса кода на форуме в Firefox и Chrome (beta)


15-1336894204
Юрий
2012-05-13 11:30
2013.03.22
С днем рождения ! 13 мая 2012 воскресенье


15-1349555402
Юрий
2012-10-07 00:30
2013.03.22
С днем рождения ! 7 октября 2012 воскресенье


2-1331179586
Eeuwige Rouw
2012-03-08 08:06
2013.03.22
Совместимость приложения!