Книга: Основы объектно-ориентированного программирования
Типовые переменные
Типовые переменные
Ряд авторов, среди которых Ким Брюс (Kim Bruce), Дэвид Шенг (David Shang) и Тони Саймонс (Tony Simons), предложили решение на основе типовых переменных (type variables), значениями которых являются типы. Их идея проста:
[x]. взамен ковариантных переопределений разрешить объявление типов, использующее типовые переменные;
[x]. расширить правила совместимости типов для управления такими переменными;
[x]. считать язык (в остальном) безвариантным;
[x]. обеспечить возможность присваивания типовым переменным в качестве значений типы языка.
Подробное изложение этих идей читатели могут найти в ряде статей по данной тематике, а также в публикациях Карделли (Cardelli), Кастаньи (Castagna), Вебера (Weber) и др. Начать изучение вопроса можно с источников, указанных в библиографических заметках к этой лекции. Мы же не будем заниматься этой проблемой, и вот почему.
[x]. Надлежаще реализованный механизм типовых переменных относится к категории, позволяющей использовать тип без полной его спецификации. Эта же категория включает универсальность и закрепление объявлений. Этот механизм мог бы заменить другие механизмы этой категории. Вначале это можно истолковать в пользу типовых переменных, но результат может оказаться плачевным, так как не ясно, сможет ли этот всеобъемлющий механизм справиться со всеми задачами с той легкостью и простотой, которая присуща универсальности и закреплению типов.
[x]. Предположим, что разработан механизм типовых переменных, способный преодолеть проблемы объединения ковариантности и полиморфизма (все еще игнорируя проблему скрытия потомком). Тогда от разработчика классов потребуется незаурядная интуиция для того, чтобы заранее решить, какие из компонентов будут доступны для переопределения типов в порожденных классах, а какие - нет. Ниже мы обсудим эту проблему, имеющую место в практике создания программ и, увы, ставящую под сомнение применимость многих теоретических схем.
Это заставляет нас вернуться к уже рассмотренным механизмам: ограниченной и неограниченной универсальности, закреплению типов и, конечно, наследованию.
- 16.1. Архитектура, ориентированная на типовые конфигурации
- Системные переменные ROWS_AFFECTED, GDSCODE, SQLCODE, TRANSACTIONJD, CONNECTIONJD
- 1.2.3. Константы, переменные и типы
- 22.3.3. Переменные окружения
- 8.3 Этап 3: переменные с произвольными именами; встроенные функции
- Контекстные переменные даты и времени
- 13.2.4. Условные переменные
- Переменные
- 15.4.2.1. Добавляйте отладочные опции и переменные
- Глава 2 Аргументы, опции и переменные окружения
- 2.4. Переменные окружения
- 1.3. Переменные