Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Начинающий программист, Вы писали:
К>Можно ли узнать оригинальную задачу, а не её вольную метафору про укуренного ёжика? К>Потому что — в принципе, можно выполнить два прохода: за первый полностью собрать информацию о графе и сделать удобное представление с прямым доступом, а также посчитать размерности. И уже вторым проходом — по нашей собственной структуре.
Это связано с множественным наследованием и атрибутами.
Правила такие: есть базовые сущности, их члены могут быть помечены атрибутами. В дочерних сущностях члены можно перегружать и добавлять новые атрибуты. Атрибуты могут наследоваться. При определении атрибута на члене дочерней сущности, в случае, если атрибут того же типа определен на базовой, он будет замещен. Из-за множественного наследования один и тот же член в дочерней сушности может соответствовать нескольким членам в базовой. Есть механизмы, позволяющие получить базовые сущности для данной. Есть механизмы, позволяющие получить список атрибутов (не унаследованных!) для данной сущности. Задача: получить полный список атрибутов, включая унаследованные.
Пример (атрибуты в скобках, тип атрибута — буква, значение — слово, наследование "<-"):
должны получить:
(A3 [перегружен], B1 [унаследован], C1 [новый])
определение
Base1 (A1, B1)
Base2 (A2)
Successor : Base1, Base2 (C1)
должны получить:
ошибка -- не возможно вычислить атрибут А
Про структуру графа пока ничего сказать не могу. Думаю, это будут DAG-и но не уверен, поэтому допустил наличие циклов.
Есть некоторая вероятность, что запрос на атрибуты будет не только к Successor, но и к Base, поэтому, если алгоритм подразумевает вычисление всех атрибутов на Base, этот результат имеет смыслс кешировать.