Здравствуйте, гость ( Вход | Регистрация )
AD | Дата 22.7.2009, 16:51 |
меня коллега ткнул носом на следующий способ реализации конечного автомата когда мой swich/case вырос до громадных размеров 1. создаешь енум, где элементы состояния автомата. 2. создаешь где быто нибыло (в классе в основном) статический массив указателей на функции обработчики. 3. меняешь состояние тут же проверяешь если есть обработчик в массиве вызываешь его. и быстрее в общем случае чем switch/case и меньше места занимает и модульность и гибкость. можно обработчики менять и обнулять если надо. Может быть лучше с помощью паттерна Состояние/State? Не реализовывал, но, думаю, стоит попробовать. |
|
kwisp | Дата 22.7.2009, 16:19 |
меня коллега ткнул носом на следующий способ реализации конечного автомата когда мой swich/case вырос до громадных размеров 1. создаешь енум, где элементы состояния автомата. 2. создаешь где быто нибыло (в классе в основном) статический массив указателей на функции обработчики. 3. меняешь состояние тут же проверяешь если есть обработчик в массиве вызываешь его. и быстрее в общем случае чем switch/case и меньше места занимает и модульность и гибкость. можно обработчики менять и обнулять если надо. коллега сказал что подсмотрел в ядре линукса основную идею. если кому интересно выложу пример. П.С. кажется где то я уже это писал.... |
|
sage | Дата 13.11.2008, 12:06 |
не читая тонны документации Документации вобщем-то не тонны Есть книга В.Д. Паронджанова "Как улучшить работу ума? Алгоритмы без программистов -- это очень просто! М.: Дело, 2001. --360 стр" |
|
AD | Дата 13.11.2008, 11:08 |
Да, точно "силуэт", Вы правы Насчёт "автоматности" "силуэта" шли жаркие дебаты. Но, на мой взгляд, тежело не увидеть очевидного... поскольку многие убедились на практике (в том числе и я), что "автоматные" задачи с помощью "силуэта" выражаются и успешно решаются. Что ещё нужно? Вопрос не в том! просто где-то из программы, в которой есть этот элемент, не читая тонны документации, можно узнать что с помощью СИЛУЭТА можно описать конечный автомат? Как это сделать прочитав КРАТКУЮ справку, предположим где-то в инете, можно "чайнику" создать этот автомат? Или же перед этим требуется хорошо разобраться в программе? |
|
sage | Дата 13.11.2008, 10:57 |
Можно вопрос? А каким образом пользователь, особенно такой "дубовый", как я, Да, точно "силуэт", Вы правы поймет, что слово "силует"("силуэт" возможно ?????) подразумевает конечный автомат? Насчёт "автоматности" "силуэта" шли жаркие дебаты. Но, на мой взгляд, тежело не увидеть очевидного... поскольку многие убедились на практике (в том числе и я), что "автоматные" задачи с помощью "силуэта" выражаются и успешно решаются. Что ещё нужно? |
|
AD | Дата 13.11.2008, 9:30 |
Конечный автомат в полной мере реализуется схемой типа "силует" в ДРАКОНе Можно вопрос? А каким образом пользователь, особенно такой "дубовый", как я, поймет, что слово "силует"("силуэт" возможно ?????) подразумевает конечный автомат? |
|
sage | Дата 12.11.2008, 18:07 |
А я предложение дописал но язык вобщем-то может быть любой. ДРАКОН задаёт лишь управляющие конструкции, а наполнение блоков может быть осуществлено на любом языке Таким образом, если нам необходима трансляция в С++, убираем из С++ все управляющие конструкции if, switch/case, while, и т.д. Их заменит графика! Если ещё и унифицировать синтаксис для наполнения блоков можно прийти к универсальному графическому представлению алгоритмов. Похожая идея была у авторов сайта alglib, но там использованны морально устаревшие блок-схемы. И что-бы не сложилось впечатление будто-бы это уход от темы ветки... Конечный автомат в полной мере реализуется схемой типа "силует" в ДРАКОНе |
|
Litkevich Yuriy | Дата 12.11.2008, 17:29 |
Тем более, что в этой теме обсуждались проблемы реализации что-то я не дописал предложение до конца "... на С++" |
|
sage | Дата 12.11.2008, 17:00 |
присоединяйся к Free DevStudio++. Нееет... уж лучше Вы к нам |
|
ViGOur | Дата 12.11.2008, 16:56 |
Новый редактор есть в планах писать присоединяйся к Free DevStudio++. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 12:09 |