MROC3 - не магия,
а справедливое слияние очередей
Елена Шамаева,
Георгий Курячий
Иерархия классов с множественным наследованием
В каком порядке среди родительских классов искать поле v ?
[D, E, A, B, C] ? [D, A, E, B, C] ?
...
MROC3. Индуктивный переход
Дано:
- очередь предков класса D,
- очередь предков класса E.
Необходимо:
- объединить очереди предков класса D и класса E,
- добавить в начало класс F.
Справедливое слияние очередей
-
Нельзя нарушать внутренний порядок родительских очередей;
-
Класс-предок может быть в нескольких родительских очередях;
-
У очередей есть приоритет;
Справедливое слияние очередей
Справедливое слияние очередей
Справедливое слияние очередей
Справедливое слияние очередей
Справедливое слияние очередей
Ожидания программиста
0. однозначность
для иерархии классов - однозначный порядок просмотра родительских классов
1. дети раньше родителей
2. родители в порядке объявления при наследовании
class C(A, B):
[...,A,...,B,...]
class C(D):
[...,C,...,D,...]
Как выполнить "родители в порядке объявления при наследовании" ?
Добавим очередь из родительских классов!
class A:
class B(A):
class C(A, B):
MROC3 выполняет все ожидания программиста
Справедливое слияние на графе наследования
-
На графе показана иерархия наследования;
-
Постепенно перемещаем классы из родительских очередей в итоговую;
-
На каждом этапе можно перемещать класс, стоящий внизу всех своих очередей;
-
Если таких классов несколько, выбирается класс из очереди с самым высоким приоритетом.
Справедливое слияние на графе наследования
class A: class B(A): class C(A): class D(A): class E(C, B): class F(D, C): class G(F, E):
Очередь класса F
(первый приоритет)
Очередь класса E
(второй приоритет)
Доп. очередь
(третий приоритет)
Справедливое слияние на графе наследования
Итоговая очередь:
[]
Добавляем F
Итоговая очередь:
[F]
Добавляем D
Справедливое слияние на графе наследования
Итоговая очередь:
[F, D]
Добавляем E
Итоговая очередь:
[F, D, E]
Добавляем C
Справедливое слияние на графе наследования
Итоговая очередь:
[F, D, E, C]
Добавляем B
Итоговая очередь:
[F, D, E, C, B]
Добавляем A
Спасибо за внимание!
Вопросы?
Copy of MROC3
By Георгий Курячий
Copy of MROC3
- 735