Здравствуйте, Начинающий программист, Вы писали:
НП>Это связано с множественным наследованием и атрибутами.
Ну это же другое дело. Сразу становится понятно. А то ёжик... обкурка...
НП>Правила такие: есть базовые сущности, их члены могут быть помечены атрибутами. В дочерних сущностях члены можно перегружать и добавлять новые атрибуты. Атрибуты могут наследоваться. При определении атрибута на члене дочерней сущности, в случае, если атрибут того же типа определен на базовой, он будет замещен. Из-за множественного наследования один и тот же член в дочерней сушности может соответствовать нескольким членам в базовой. Есть механизмы, позволяющие получить базовые сущности для данной. Есть механизмы, позволяющие получить список атрибутов (не унаследованных!) для данной сущности. Задача: получить полный список атрибутов, включая унаследованные.
Нужно ли получить список атрибутов (или хотя бы сообщение об ошибке) для произвольного объекта по запросу, или же для всех объектов сразу?
Для графа целиком можно выполнить топологическую сортировку и затем пробежаться по сортированной последовательности, запоминая атрибуты каждого объекта.
В случае запроса про один объект — можно рекурсивно оббежать его базы.
НП>Про структуру графа пока ничего сказать не могу. Думаю, это будут DAG-и но не уверен, поэтому допустил наличие циклов.
А что делать с циклическими графами? Каков их сермяжный смысл?
Мне кажется, проще диагностировать наличие циклов и сообщать об этом как об ошибке.
НП>Есть некоторая вероятность, что запрос на атрибуты будет не только к Successor, но и к Base, поэтому, если алгоритм подразумевает вычисление всех атрибутов на Base, этот результат имеет смыслс кешировать.
Как говорится, время-деньги. Если объектов немного (или глубина наследования невелика), то можно не кешировать, а перевычислять.
Но это зависит от объёма предметной области и требований по скорости и объёму памяти.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>