Re: упавление состояниями в fsm, state pattern
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 01.09.06 08:59
Оценка: 7 (2)
Здравствуйте, WinMute, Вы писали:

WM>Привет Всем!


WM>У меня возник вопрос по реализации выбора состояния (state) в паттернах final state machine (fsm) или state. В и-нете смог найти только реализации когда переход и выбор слетующего состояния происходил либо в самих состояниях либо схема переходов была линейной (что также не соответствует ситуации). Мне надо реализовать схему переходов в одном класе (контексте) и чтоб класы state не знали о существовании других — с использованием state transition table. Смена состояний должна происходить по некоторому событию.



WM>??? Хотелось бы узнать как можно реализовать таблицу состояний на С#, может как то использовать масивы делегатов. Варианты с использованием reflection и xml думаю слишком муторные для такой задачи. Предложеный вариант реализации stt: http://rsdn.ru/article/alg/Static_Finite_State_Machine.xml
Автор(ы): Alexander Nikolayenko
Дата: 08.10.2005
Машина с конечным числом состояний (FSM, Finite State Machine, или как принято называть по-русски, конечный автомат, КА) представляет собой одну из наиболее полезных концепций в арсенале разработчика. Существует несколько методик реализации конечных автоматов, но, забегая вперед, хочется сказать, что достойный результат дают только те из них, которые связаны с генерацией кода. Возможности, предоставляемые последней версией стандарта C++ и реализованные в последних версиях компиляторов, позволяют генерировать код во время компиляции основного кода проекта. Это дает возможность избежать использования отдельных утилит или расширений IDE и, оставаясь в рамках единого языка (C++), создавать приемлемые для практического использования реализации КА, которые при этом легко поддерживать и развивать.
не понял . Возможно у кого есть какие идеи по этому поводу ???


Хмм... вроде бы все достаточно straight forward в реализации... попробую вкратце объяснить.

У Вас есть набор состояний и ни одно из не знает ни о каком другом. Каждое состояние обладает набором переходов. То есть это можно развернуть в следующий набор классов:

// Наше базое состояние
public abstract class State
{
    // Набор переходов
    // Как наполнить этот набор - это вопрос реализации 
    // (тут как раз таки и можно воспользоваться XML + Reflection, или просто мануально заполнить, 
    // если набор состояний и переходов не будет меняться)
    private IList<Transition> transitions;
    
    // Обрабатываем входное сообщение.
    public State Accept(object message)
    {
        foreach (Transiotion t in this.transitions)
        {
            if (t.IsAcceptable(message))
            {
                // Нашли переход, который считает это сообщение поводом для перехода =)
                // Переходим
                return t.Transit(message);
            }
        }
        // Состояние не изменилось
        return this;
    }
}

// Базовый переход
public abstract class Transition
{
    // Метод, позволяющий узнать является ли это сообщение поводом для перехода.
    public abstract bool IsAcceptable(object message);
    
    // Тут мы и осуществляем собственно переход.
    public abstract State Transit(object message);
}


Ваша система должна хранить текущее состояние. И идея крайне проста — состояние ничего не знает о других состояниях. О них знают только переходы.

Это давольно сжатое описание и в целом Вам стоит более подробно ознакомиться со статьями — там ничего сложного
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: упавление состояниями в fsm, state pattern
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 01.09.06 10:14
Оценка: 3 (1)
Здравствуйте, WinMute, Вы писали:

WM>Здравствуйте, pt4h, Вы писали:


P>>....................

P>>Это давольно сжатое описание и в целом Вам стоит более подробно ознакомиться со статьями — там ничего сложного

WM>Cупер , верняк: "все гениальное — просто" .


WM>Very thanks!!!


Можно еще использовать кнопки с оценками
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
упавление состояниями в fsm, state pattern
От: WinMute  
Дата: 01.09.06 08:22
Оценка:
Привет Всем!

У меня возник вопрос по реализации выбора состояния (state) в паттернах final state machine (fsm) или state. В и-нете смог найти только реализации когда переход и выбор слетующего состояния происходил либо в самих состояниях либо схема переходов была линейной (что также не соответствует ситуации). Мне надо реализовать схему переходов в одном класе (контексте) и чтоб класы state не знали о существовании других — с использованием state transition table. Смена состояний должна происходить по некоторому событию.


??? Хотелось бы узнать как можно реализовать таблицу состояний на С#, может как то использовать масивы делегатов. Варианты с использованием reflection и xml думаю слишком муторные для такой задачи. Предложеный вариант реализации stt: http://rsdn.ru/article/alg/Static_Finite_State_Machine.xml
Автор(ы): Alexander Nikolayenko
Дата: 08.10.2005
Машина с конечным числом состояний (FSM, Finite State Machine, или как принято называть по-русски, конечный автомат, КА) представляет собой одну из наиболее полезных концепций в арсенале разработчика. Существует несколько методик реализации конечных автоматов, но, забегая вперед, хочется сказать, что достойный результат дают только те из них, которые связаны с генерацией кода. Возможности, предоставляемые последней версией стандарта C++ и реализованные в последних версиях компиляторов, позволяют генерировать код во время компиляции основного кода проекта. Это дает возможность избежать использования отдельных утилит или расширений IDE и, оставаясь в рамках единого языка (C++), создавать приемлемые для практического использования реализации КА, которые при этом легко поддерживать и развивать.
не понял . Возможно у кого есть какие идеи по этому поводу ???
"... я забыл что в природе еще что-то есть. ..."
(Шевчук Ю. "ДДТ")
Re[2]: упавление состояниями в fsm, state pattern
От: WinMute  
Дата: 01.09.06 10:13
Оценка:
Здравствуйте, pt4h, Вы писали:

P>....................

P>Это давольно сжатое описание и в целом Вам стоит более подробно ознакомиться со статьями — там ничего сложного

Cупер , верняк: "все гениальное — просто" .

Very thanks!!!
"... я забыл что в природе еще что-то есть. ..."
(Шевчук Ю. "ДДТ")
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.