Всем привет.
Предплолжим, есть иерархия графический объектов, которые сами себя рисуют. И рисуют они себя в зависимости от режима отрисовки (к примеру, объект может быть выделенным, загрееным, заштрихованным и т.д.). Проблема в том, что графические объекты, как и режимы, могут добавляться в процессе развития программы. Я пока предполагаю представлять режимы классами и использовать мультиметоды для отрисовки. Но чтобы безболезненно развивать прогу, нужно, чтобы эти мультиметоды не были функциями-членами, иначе это приведет к модификации всей иерархии при добавлении нового мультиметода. С другой стороны, для отрисовки необходимо знание внутренней структуры объекта. Как быть ?
Попробуйте так:
На контроллер отрисовки поступает графический объект и объект, представляющий режим отрисовки, скажем прерыистой линией.
Выясняем посредством RTTI, умеет ли данный графический объект рисовать себя прерыистой линией, то есть является ли он соответствующим абстрактным классом. Если да, то вызывается его метод. Если нет, то выясняем, умеет ли режим отрисовки прерывистой линией рисовать графические объекты данного класса. Ну уж если и этот метод не реализован, тогда придётся вызывать у объекта метод НарисуйСебяКакНибудь, а у режима ПометьНаРисункеЭтотОбъектЧтобКазалосьЧтоОнВТвоемРежимеНарисован
По ходу дела будете добавлять реализацию интерфейсов в объекты и режимы.
В Открытых системах за прошлый год по этому поводу была статья, где предлагалось несколько решений данной проблемы.
Здравствуйте, leaf, Вы писали:
L>Здравствуйте, Валерий.
L>Спасибо, идея понятна. Статью тоже нашел.
Если я правильно понял вопрос, то на Первых Шагах www.firststeps.ru есть описание очень похожей ситуации. Называется такой прикол "Двойная диспетчеризация", и никакой RTTI не нужен.
Для того, чтобы не было "комбинаторного" взрыва количества классов, обычно выделяют несколько простейших фигур, например: отрезок, точка, кривая, прямоугольник, сектор, а все остальные объекты представляют через совокупность простейших.
Классы, которые занимаются различного рода оттрисовками, получают у объекта его описание в виде простейших фигур, и уже простейшие фигуры рисуют нужным способом.