Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.066 c