Re[13]: Ну ты и намудрил... :)
От: obukolov  
Дата: 28.07.05 14:36
Оценка:
Здравствуйте, adontz, Вы писали:

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


M>>Чем например хуже объект который может сам себя записать/считать в поток/файл, прорисоваться используя определенную реализацию графики и наконец реализует метод типа PtInObject для перетаскиваний? Не могу я так быстро поменять свою точку зрения )))


A>Ничем. Просто есть такое понятие — инкапсуляция. Всё что тебе не нужно — тебе не должно быть видно.

A>В принципе объекты унаследованные от visual_object_base вполне могут реализовывать методы draw и is_point_in_object, но только чтобы пользоватся этими объектами совершенно не объязательно о них знать. и объект line тоже может реализовывать методы read(istream &) write (ostream &), но они не нужны visual_object.
A>Я просто отделил данные от представления. Код в конечном итоге станет чище.
A>Подумай сам, если графика векторная, то рано или поздно ты столкнёшься с группой объектов. Для группы is_point_in_object это логическое или над вызовами is_point_in_object для каждого члена группы. Всю эту логику вполне можно скрыть в draw_manager.is_point_in_object который сам разберётся object это группа или простой объект или ещё что-то, а не вываливать её наружу.

а что здесь наружу вываливается? Группа — это классический composite, а вот draw_manager тут совсем непричем...
Re[14]: Ну ты и намудрил... :)
От: adontz Грузия http://adontz.wordpress.com/
Дата: 28.07.05 14:39
Оценка:
Здравствуйте, obukolov, Вы писали:

O>а что здесь наружу вываливается? Группа — это классический composite, а вот draw_manager тут совсем непричем...


Объект в группе и вне её может рисоватся по-разному. Типичный пример CorelDRAW.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[15]: Ну ты и намудрил... :)
От: maugli71 Россия  
Дата: 11.08.05 17:40
Оценка:
И всетаки непонятно где хранить атрибуты фигуры. Инкапсуляция, полиморфизм это все конечно красивые и умные слова. А вот напрмер в функции API ExtCreatePen куча параметров и где их хранить? в самой фигуре? Тогда нарушается абстракция — фигура зависить будет от реализации.
Удачной охоты..
Re[4]: Ну ты и намудрил... :)
От: iZEN СССР  
Дата: 15.08.05 12:42
Оценка:
Здравствуйте, loki1000, Вы писали:

L>А данные фигур хранить в самих фигурах (инкапсуляция, понимаешь ли )

Ну нифига. Так делать нельзя и вот почему.
Механизм перерисовки для пары тройки фигур будет отрабатывать идеально. Проблемы начнутся, когда в редакторе будут несколько десятков-сотен фигур. Проблемы будут недецкие:
1) Отжирание памяти при создании очередной новой фигуры.
2) Медленность процесса отрисовки каждой отдельной фигуры.

Лучше использовать паттерн Flyweight (Приспособленец), когда фигура одна, а отрисовывается по-разному с помощью параметров, находящихся в твоём хранилище — рисунке.
Re[5]: Ну ты и намудрил... :)
От: maugli71 Россия  
Дата: 16.08.05 16:24
Оценка:
Здравствуйте, iZEN, Вы писали:

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


L>>А данные фигур хранить в самих фигурах (инкапсуляция, понимаешь ли )

ZEN>Ну нифига. Так делать нельзя и вот почему.
ZEN>Механизм перерисовки для пары тройки фигур будет отрабатывать идеально. Проблемы начнутся, когда в редакторе будут несколько десятков-сотен фигур. Проблемы будут недецкие:
ZEN>1) Отжирание памяти при создании очередной новой фигуры.
ZEN>2) Медленность процесса отрисовки каждой отдельной фигуры.

ZEN>Лучше использовать паттерн Flyweight (Приспособленец), когда фигура одна, а отрисовывается по-разному с помощью параметров, находящихся в твоём хранилище — рисунке.


Но если параметры фигуры хранить в объектах то никакой выгоды не получу от Приспособленца. Будет столько же объектов сколько и фигур + приспособленцы добавятся. Другое дело если данные хранить в обычных структурах. Так получается? И отжирание памяти и медленность прорисовки будут в случае объектов а в случае структур нет?
Удачной охоты..
Re[5]: Ну ты и намудрил... :)
От: maugli71 Россия  
Дата: 17.08.05 07:54
Оценка:
Поставил эксперимент.
В первом случае использую шаблон Приспособленец. Shape родитель, Line и Rect потомки. При прорисовке параметрами им передаются указатели на структуры. В итоге создается N структур и 2 приспособленца.
Во втором случае использую просто объекты. Все данные находятся в самих объектах. В итоге создается N объектов. Имеем:

10 000 100 000
Flyweight <1сек <10сек
Объекты <1сек <10сек
Удачной охоты..
Re[16]: Ну ты и намудрил... :)
От: LamerDrv Россия  
Дата: 17.08.05 12:06
Оценка:
Здравствуйте, maugli71, Вы писали:

M>И всетаки непонятно где хранить атрибуты фигуры. Инкапсуляция, полиморфизм это все конечно красивые и умные слова. А вот напрмер в функции API ExtCreatePen куча параметров и где их хранить? в самой фигуре? Тогда нарушается абстракция — фигура зависить будет от реализации.


Насколько я понимаю, тебе эти параметры предлагают действительно хранить в фигуре. Но, в фигуре являющейся визуальным объектом. А не в той фигуре которая, является частью исходной модели (рисунка). Если я правильно понял, о чем тебе говорит adontz. Как вариант, можно об этом чуть-чуть подробнее посмотреть в документации на Stingray Studio (в разделе 8.4.2, кажется)(Кажется документация у них доступна http://www.roguewave.com/support/docs/stingray/sflug.pdf).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.