Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1338150603
Юрий
2012-05-28 00:30
2013.03.22
С днем рождения ! 28 мая 2012 понедельник


2-1337494785
TStas
2012-05-20 10:19
2013.03.22
MethodName


15-1350838886
Лида
2012-10-21 21:01
2013.03.22
Обработка различных событий в Delphi


15-1328526701
2222
2012-02-06 15:11
2013.03.22
Вырезать полигон из полигона


15-1347463185
brother
2012-09-12 19:19
2013.03.22
Парнишка снял видеоклип при помощи Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский