Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передать данные структуре объектов, как сделать это красиво 
:(
    Опции темы
_Y_
Дата 8.6.2014, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Программа динамически строит структуру объектов принадлежащих к разным подклассам одного суперкласса. На картинке изображено дерево из кружочков-объектов, но это для простоты. Одни и те же структуры объектов могут параллельно входить в разные ветки: на картинке объекты, принадлежащие повторно используемой структуре залиты серым.

user posted image

В каждом классе прописан метод, скажем implement, получающий данные. Естественно, обрабатывающий их и возвращающий результат. Обработка ведется как собственным кодом, так и включенным в этот код вызовом методов implement агрегированных объектов. Данные поступают из программы вызовом метода implement на корневого объекта (красненького) и обрабатываются всем деревом. В общем - ничего необычного: все дерево это динамически формируемая функция обработки данных.

Теперь специфика. На левой картинке нижняя часть дерева залита эеленым. Это объекты работающие с данными. Черная верхушка только вызывает чужие методы implement и обрабатывает их результаты. Никаких проблем у меня с этим нет.

Правая картинка - расширенный вариант задачи. На вход (методу implement красненького объекта) подается не один набор данных, а несколько. Каждый должен обрабатываться в своей ветке дерева. Обработка разных наборов обозначена разными цветами. Как видите, в пределах одного обращения к дереву, один и тот же набор может обрабатываться в нескольких ветках и одна и та же структура объектов (серые) может обрабатывать разные данные. 

Перераспределения "обязанностей" не происходит. Т.е. еще при формировании дерева известно какая ветка какой набор данных будет обрабатывать.

Левое дерево - частный случай правого: массив передаваемых наборов данных состоит из одного элемента. Работает на ура. А вот с правым заморочки. Не получается у меня сообразить как красиво-элегантно передавать данные такой структуре. Ну или как ветка структуры должна определять какой набор данных использовать. С какой стороны ни подойду - сплошные костыли расти начинают.

Посоветуйте 





--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Pavia
Дата 8.6.2014, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



1. Передавать все данные всем. К примеру спуская по дереву.
2. Вызывать всех поочерёдно и они выбирают нужные данные из очереди сообщений или массива данных.
3. Оптимизация 2. Нижнее обработчики при формировании дерева сообщают верхним какие данные они обрабатывают, т.е регистрируют тип данных с которым они работают. При поступлении данных верхний элемент проверяет на соответствие тип данных зарегистрированным и спускает вниз только те которые зарегистрированы. 

С учётом что у вас половина серых точек т.е  которые работают с разными данными, то наверно не стоит заниматься оптимизацией и спускать все данные вниз по дереву. И если будет не хватать скорости, то оптимизировать некоторые ветки отфильтровывая(отбрасывая) не нужные данные. Конечно это напоминает костыли, но ихмо это нормально для ООП.
PM MAIL   Вверх
_Y_
Дата 8.6.2014, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Pavia,
1. Все данные всем это именно то, что я и делаю.
2. А вот с тем, чтобы объекты выбирали нужные им данные и проблема. Закрашенные серым структуры это один и тот же набор объетков, ссылка на который имеется в разных ветках дерева. В результате в одном случае этот набор объектов должен обработать один набор данных, а в другом - другой.
3. Без оптимизации, думаю, можно обойтись на начальном этапе.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Pavia
Дата 8.6.2014, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



_Y_
Цитата(_Y_ @  8.6.2014,  11:34 Найти цитируемый пост)
А вот с тем, чтобы объекты выбирали нужные им данные и проблема. 

А в чём проблема? Объекты не знают какие данные их какие нет? Тогда кто это определяет?
PM MAIL   Вверх
_Y_
Дата 8.6.2014, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Pavia, можно сделать так, чтобы объекты знали какие данные их, а какие нет. Но, есть объекты, обрабатывающие разные данные в зависимости от того, в какой ветке дерева эти объекты сидят (зеленые структуры на правой картинке). Фактически, объект может знать какие данные НЕ его, но не знает какой какой из СВОИХ наборов данных обрабатывать при данном обращении.

Подумал я еще чуть над пунктом 3 Вашего предидущего поста. Вот такое решение должно работать и не будет очень уж костыльным.

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

user posted image
Попробую сделать так. Получится - помечу вопрос как решенный. Но буду рад и советам с  решениями элегантнее этого. Спасибо!

Это сообщение отредактировал(а) _Y_ - 8.6.2014, 12:30


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1079 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.