Книга: Основы объектно-ориентированного программирования
Дублируемое наследование и универсальность
Дублируемое наследование и универсальность
В завершение мы должны рассмотреть особый случай дублируемого наследования. Он касается компонентов, содержащих родовые параметры. Рассмотрим следующую схему (подобная ситуация может возникнуть не только при прямом, но и при косвенном дублируемом наследовании):
class A [G] feature
f: G;...
end
class B inherit
A [INTEGER]
A [REAL]
end
В классе B по правилу дублируемого наследования компонент f должен использоваться совместно. Но из-за универсализации возникает неоднозначность, - какой результат должен возвращать компонент - real или integer? Та же проблема возникнет, если f имеет параметр типа G.
Подобная неоднозначность недопустима. Отсюда правило:
Универсальность в правиле дублируемого наследования
Тип компонента, совместно используемого в правиле дублируемого наследования, а также тип любого из его аргументов не может быть родовым параметром класса, от которого произошло дублируемое наследование компонента.
Для устранения неоднозначности можно выполнить переименование в точке наследования.
- Общие предки
- По обе стороны океана
- Совместное использование и репликация
- Ненавязчивое дублирующее наследование
- Правило переименования
- Конфликт переопределений
- Конфликт при совместном использовании: отмена определения и соединение компонентов
- Конфликты при репликации: выделение
- Выделение всех компонентов
- Сохранение исходной версии при переопределении
- Пример повышенной сложности
- Дублируемое наследование и универсальность
- Правила об именах
- Дублируемое наследование (Repeated inheritance)
- Ограниченная универсальность (Constrained genericity)
- Универсальность (genericity)
- Ограниченная универсальность
- У14.4 Наследование без классов
- Наследование
- Лекция 9. Наследование и замыкание
- Лекция 14. Введение в наследование
- Лекция 15. Множественное наследование
- Дублируемое наследование
- ГЛАВА 11 Наследование
- Перегрузка и универсальность