Книга: Основы объектно-ориентированного программирования
Параллельные иерархии
Параллельные иерархии
Чтобы не оставить камня на камне, рассмотрим вариант примера SKIER с двумя параллельными иерархиями. Это позволит нам смоделировать ситуацию, уже встречавшуюся на практике: TWO_ WAY_LIST > LINKED_LIST и BI_LINKABLE > LINKABLE; или иерархию с телефонной службой PHONE_SERVICE.
Пусть есть иерархия с классом ROOM, потомком которого является GIRL_ROOM (класс BOY опущен):
Рис. 17.7. Лыжники и комнаты
Наши классы лыжников в этой параллельной иерархии вместо roommate и share будут иметь аналогичные компоненты accommodation (размещение) и accommodate (разместить):
indexing
description: "Новый вариант с параллельными иерархиями"
class SKIER1 feature
accommodation: ROOM
accommodate (r: ROOM) is ... require ... do
accommodation:= r
end
end
Здесь также необходимы ковариантные переопределения: в классе GIRL1 как accommodation, так и аргумент подпрограммы accommodate должны быть заменены типом GIRL_ROOM, в классе BOY1 - типом BOY_ROOM и т.д. (Не забудьте: мы по-прежнему работаем без закрепления типов.) Как и в предыдущем варианте примера, контравариантность здесь бесполезна.
- Навигация по иерархии узла
- Глава 1 Предел возможностей иерархии в мире перемен
- 9.7.4. Иерархии классов и абстрактные классы
- Параллельные вычисления
- 8.4. Перемещение по иерархии файлов
- 8.4.3. Перемещение по иерархии: nftw()
- Параллельные секции и директива parallel sections
- 14.1. Высший уровень иерархии
- 22.7. Параллельные серверы UDP
- Пример иерархии
- Нижняя часть иерархии
- 5.1. Параллельные интерфейсы SCSI