Russian Qt Forum
Ноябрь 01, 2024, 05:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Какой паттерн проектирования выбрать.  (Прочитано 7593 раз)
r2d2u2
Гость
« : Апрель 28, 2011, 08:47 »

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

Есть изначальный объект с "сырыми" данными. Необходимо создать цепочку обработчиков этих сырых данных. У каждого обработчика может быть свой алгоритм обработки. Обработчики выстраиваются в "цепочки" так, что результат предыдущего обработчика может подаваться на вход следующему. Алгоритм обработки в обработчиках может настраиваться соответствующими ему по смыслу параметрами.
 Спасибо!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Апрель 28, 2011, 09:06 »

Есть изначальный объект с "сырыми" данными. Необходимо создать цепочку обработчиков этих сырых данных. У каждого обработчика может быть свой алгоритм обработки. Обработчики выстраиваются в "цепочки" так, что результат предыдущего обработчика может подаваться на вход следующему. Алгоритм обработки в обработчиках может настраиваться соответствующими ему по смыслу параметрами.
Судя по этому (очень общему) описанию, не видно зачем Вам изыскивать какой-то специальный паттерн. Нужно позаботиться о хорошей "модульности", так чтобы расчеты не зависели друг от друга, выделить общие утилиты и.т.п.
Записан
r2d2u2
Гость
« Ответ #2 : Апрель 28, 2011, 09:26 »

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

Да верно, судя из описания напрашивается такой вывод.
Попробую уточнить. К примеру один объект считывает поочередно из файла статистические данные. Другой объект принимает эти данные, производит обработку и накапливает свою статистику по ним. Она может тут же отображаться на графике. Кроме этого эта статистика может быть подана на вход третьему объекту который соберет "статистику по статистике" и тоже может отобразить ее на графике. Потом в эту цепочку можно добавить еще какой либо объект. Или удалить. Или может быть несколько объектов принимающих одни и те же данные но производящие свои, которые отображаются на графике.
 А потом можно исходному объекту в цепочке сказать чтобы он прочитал другие файлы с данными и все это по цепочке сработает, и отобразится все на графиках. Или можно в какой то момент времени в середине цепочки у какого либо обработчика настроить по-другому алгоритм обработки и начиная с него пересчитаются объекты которые "кормятся" его данными.
  Что то все придумать не могу как это по уму все организовать. А с другой стороны может не заморачиваться и сделать в лоб. Когда обработчик описывает интерфейс его дочерних обработчиков. Кто хочет наследуется от этого интерфейса и добавляется в этот обработчик. Он в свою очередь обработав данные сует свой результат для обработки свои дочерним обработчикам. и т.д. Правда там мьютексов будет куча. Добавлятся обработчики будут из одних потоков, сама обработка в другом потоке. и в каждом обработчике всей этой цепочки будут мьютексы....  Улыбающийся 
Записан
asvil
Гость
« Ответ #3 : Апрель 28, 2011, 09:30 »

filter, map, reduce
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #4 : Апрель 28, 2011, 09:42 »

state machine
Записан

ArchLinux x86_64 / Win10 64 bit
r2d2u2
Гость
« Ответ #5 : Апрель 28, 2011, 09:50 »

Да, кстати, по структуре похоже на state machine.
Насчет filter, map, reduce, поищу в нете что и как.   
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Апрель 28, 2011, 09:55 »

Когда-то делал задачу для кардиологии, и возникала проблема "многообразности" выбора. Напр пользователь хочет отобразить график сигнала. Или график + спектр. Перед этим он хочет применить к нему фильтры - эти или те. Словом число вариантов что могут понадобиться как-то не умещается в UI  Улыбающийся

Я решал это через создание своего мини-интерпретатора. Пользователь задает набор команд, например так
Код:
Signal1 = ReadSignal("file 1");
Window1 = CreateWindow("title", 200, 200);
DrawSignal(Window1, Signal1);
Signal2 = Filter(Signal1, FLT_FOURIER);
DrawSignal(Window1, Signal2);
Смысл в том что пользователь может строить произвольные "цепочки"
Записан
r2d2u2
Гость
« Ответ #7 : Апрель 28, 2011, 10:28 »

Я решал это через создание своего мини-интерпретатора. Пользователь задает набор команд, например так
Код:
Signal1 = ReadSignal("file 1");
Window1 = CreateWindow("title", 200, 200);
DrawSignal(Window1, Signal1);
Signal2 = Filter(Signal1, FLT_FOURIER);
DrawSignal(Window1, Signal2);
Смысл в том что пользователь может строить произвольные "цепочки"

Да интересная идея, спасибо. Действительно если фильтры можно применять к разным сигналам, а сигналы рисовать на любых окнах то гибкая штука получается. И пользователь по сути ограничен только набором фильтров, а если ему еще  предоставить возможность писать фильтры на метаязыке... 
Записан
_govorilka
Гость
« Ответ #8 : Апрель 28, 2011, 10:52 »

Почитай описание вот этого проекта:
http://www.mevislab.de/home/about-mevislab/

Возможно это подкинет тебе новые идеи.

Подобные графы сейчас используются в основном для обработки изображений и видео (MS DirectShow, GStreamer), но подобные штуки можно использовать для обработки любых массивов данных, например, для визуализации SQL запросов. Можно сделать интересный проект.

Записан
r2d2u2
Гость
« Ответ #9 : Апрель 28, 2011, 11:12 »

Почитай описание вот этого проекта:
http://www.mevislab.de/home/about-mevislab/
Возможно это подкинет тебе новые идеи.

Спасибо, посмотрю.
Записан
grin
Гость
« Ответ #10 : Ноябрь 11, 2011, 02:50 »

может это http://codelab.ru/p/chain_of_responsibility/
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.