Мультиметоды
От: leaf  
Дата: 20.01.03 09:01
Оценка:
Всем привет.
Предплолжим, есть иерархия графический объектов, которые сами себя рисуют. И рисуют они себя в зависимости от режима отрисовки (к примеру, объект может быть выделенным, загрееным, заштрихованным и т.д.). Проблема в том, что графические объекты, как и режимы, могут добавляться в процессе развития программы. Я пока предполагаю представлять режимы классами и использовать мультиметоды для отрисовки. Но чтобы безболезненно развивать прогу, нужно, чтобы эти мультиметоды не были функциями-членами, иначе это приведет к модификации всей иерархии при добавлении нового мультиметода. С другой стороны, для отрисовки необходимо знание внутренней структуры объекта. Как быть ?
Re: Мультиметоды
От: Валерий Б. Россия  
Дата: 20.01.03 10:26
Оценка:
Попробуйте так:
На контроллер отрисовки поступает графический объект и объект, представляющий режим отрисовки, скажем прерыистой линией.
Выясняем посредством RTTI, умеет ли данный графический объект рисовать себя прерыистой линией, то есть является ли он соответствующим абстрактным классом. Если да, то вызывается его метод. Если нет, то выясняем, умеет ли режим отрисовки прерывистой линией рисовать графические объекты данного класса. Ну уж если и этот метод не реализован, тогда придётся вызывать у объекта метод НарисуйСебяКакНибудь, а у режима ПометьНаРисункеЭтотОбъектЧтобКазалосьЧтоОнВТвоемРежимеНарисован

По ходу дела будете добавлять реализацию интерфейсов в объекты и режимы.

В Открытых системах за прошлый год по этому поводу была статья, где предлагалось несколько решений данной проблемы.
Re[2]: Мультиметоды
От: leaf  
Дата: 20.01.03 11:32
Оценка:
Здравствуйте, Валерий.

Спасибо, идея понятна. Статью тоже нашел.
Re[3]: Мультиметоды
От: Дмитрий Наумов  
Дата: 29.01.03 14:49
Оценка:
Здравствуйте, leaf, Вы писали:

L>Здравствуйте, Валерий.


L>Спасибо, идея понятна. Статью тоже нашел.


Если я правильно понял вопрос, то на Первых Шагах www.firststeps.ru есть описание очень похожей ситуации. Называется такой прикол "Двойная диспетчеризация", и никакой RTTI не нужен.
... << RSDN@Home 1.0 beta 5 >>
Re: Мультиметоды
От: Bell Россия  
Дата: 29.01.03 15:30
Оценка:
Здравствуйте, leaf, Вы писали:

Посмотри еще про паттерн "Декоратор".
Любите книгу — источник знаний (с) М.Горький
Re: Мультиметоды
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 29.01.03 18:28
Оценка:
Здравствуйте, leaf, Вы писали:

Для того, чтобы не было "комбинаторного" взрыва количества классов, обычно выделяют несколько простейших фигур, например: отрезок, точка, кривая, прямоугольник, сектор, а все остальные объекты представляют через совокупность простейших.

Классы, которые занимаются различного рода оттрисовками, получают у объекта его описание в виде простейших фигур, и уже простейшие фигуры рисуют нужным способом.
... << RSDN@Home 1.0 beta 3 >>
Re[3]: Мультиметоды
От: _wqwa США  
Дата: 29.01.03 23:17
Оценка:
Здравствуйте, leaf, Вы писали:


L>Спасибо, идея понятна. Статью тоже нашел.


Урлик, пожалуйста приведите.
... << RSDN@Home 1.0 beta 5 >>
Кто здесь?!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.