Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
oberon:generics [2024/07/05 18:38] comdiv создано |
oberon:generics [2024/07/15 15:48] (текущий) comdiv |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Обобщённые модули в стандартном Oberon ====== | ====== Обобщённые модули в стандартном Oberon ====== | ||
- | Сам по себе язык не предусматривает специальной поддержки этого | + | Обобщённые модули (дженерики) — модули, параметризированные по константам, |
+ | Существуют диалекты Oberon с явной поддержкой параметризуемых модулей, | ||
Здесь представлен схематичный пример. Дополнительные детали воплощения для достижения нужных качеств представить несложно. | Здесь представлен схематичный пример. Дополнительные детали воплощения для достижения нужных качеств представить несложно. | ||
- | «Параметризированный» модуль может ничем не отличаться от обычного модуля, | + | ==== Параметризация модуля ==== |
+ | «Параметризированный» модуль может ничем не отличаться от обычного модуля, | ||
MODULE List; IMPORT Param; | MODULE List; IMPORT Param; | ||
Строка 34: | Строка 36: | ||
| | ||
END List. | END List. | ||
+ | |||
+ | ==== Формальный и фактический параметры-модули ==== | ||
+ | |||
+ | Следующий исходный(формальный) параметр-модуль не только служит заготовкой для фактических параметров-модулей, | ||
+ | |||
+ | MODULE Param; IMPORT V; | ||
+ | TYPE T* = POINTER TO V.Base; | ||
+ | END Param. | ||
Фактический параметр-модуль с нужными объявлениями: | Фактический параметр-модуль с нужными объявлениями: | ||
Строка 43: | Строка 53: | ||
При должном обобщённом подходе модули-параметры могут использоваться вместе с разными параметризированными модулями. | При должном обобщённом подходе модули-параметры могут использоваться вместе с разными параметризированными модулями. | ||
+ | |||
+ | ==== Специализация параметризированного модуля ==== | ||
Псевдо-код для специализации модуля где-то в сборочной системе: | Псевдо-код для специализации модуля где-то в сборочной системе: | ||
Строка 57: | Строка 69: | ||
Modules.Spec(" | Modules.Spec(" | ||
- | Использование специализированного модуля: | + | ==== Использование специализированного модуля |
MODULE UseList; | MODULE UseList; | ||
Строка 80: | Строка 92: | ||
END UseList. | END UseList. | ||
- | Следующий исходный(формальный) параметр-модуль не только служит болванкой для фактических параметров-модулей, | + | ==== Ссылки ==== |
- | + | ||
- | MODULE Param; IMPORT V; | + | |
- | TYPE T* = POINTER TO V.Base; | + | |
- | END Param. | + | |
Весь код в [[https:// | Весь код в [[https:// | ||
[[https:// | [[https:// |