Модули
Ключевой концепцией внутреннего языка И++ является его расширяемость. Для этого была разработана технология подключаемых модулей внутреннего языка. Ядро языка содержит ограниченный набор необходимых определений, а все необходимые для работы функции, типы, константы и циклы определяются в подключаемых модулях, разработанных на языках более низкого уровня. Помимо модулей, могут использоваться специальные расширения языка, призванные решать конкретные задачи. Модуль представляет собой динамическую библиотеку, которая содержит необходимый для расширения возможностей код. В отличие от обычных библиотек, подключаемые модули не требуют явного указания их использования в исходном тексте программы на внутреннем языке, то есть модули автоматически добавляют в язык И++ новые возможности. Средства расширения, подобные модулям, иногда называют плагинами (от англ. plugins).
В подключаемых модулях могут объявляться:
- объектные типы (с полями и методами);
- интерфейсы;
- синонимы типов (в основном, для типов контейнеров и типов функций);
- функции;
- константы;
- циклы.
Типы, функции и константы могут объявляться и средствами самого внутреннего языка, однако технология подключаемых модулей предоставляет значительно более широкие возможности. В сравнительной таблице приведены возможности ядра внутреннего языка и возможности подключаемых модулей для объявления основных определений языка:
Определения языка | Возможности объявления | |
---|---|---|
в подключаемых модулях | в тексте программы на И++ | |
Типы | Помимо обычных объектов, можно объявлять физические объектные типы. | Можно объявить объектный тип. Можно объявить тип, унаследованный от типа, объявленного в подключаемом модуле. Новые физические типы объявлять нельзя. |
Функции | Можно объявлять функции и методы, в том числе использующие нестандартный механизм передачи параметров. | Можно объявлять функции и методы только с использованием стандартного механизма передачи параметров. |
Константы | Можно объявлять константы, а также создавать группы констант, используя механизм перечисления. | Можно объявлять константы. |
Циклы | Можно объявлять циклы, использующие произвольный алгоритм перебора значений. | Объявлять циклы средствами внутреннего языка нельзя. |
Переменные | Переменные в модулях не объявляются. | Поддерживается возможность объявления переменных. |
Итак, наличие подключаемых модулей предоставляет прикладным программистам богатейший инструментарий для реализации разнообразных проектных решений, и более того, целый ряд необходимых языковых возможностей может быть реализован только с помощью модулей. Функции в подключаемых модулях могут производить оптимизированные расчеты, взаимодействовать с внешними данными и устройствами, т.е. решать самый широкий круг задач. Функции и методы, определяемые в подключаемых модулях, могут иметь нестандартного вида параметры, что в некоторых случаях бывает очень полезно. Определения объектных типов в подключаемых модулях позволяет естественным образом вводить в язык некие логически законченные концепции с необходимым набором данных и методов их обработки. В модулях можно объявлять типы, связанные с некоторым физическим представлением, в том числе и визуальные типы. Особо следует отметить возможность определения в подключаемых модулях специальных циклов, т.е. алгоритмов перебора некоторых значений по определенным для данного цикла правилам. Синтаксически аналогичные стандартным циклам ПОКА и ДЛЯ, специальные циклы позволяют скрыть для пользователя возможно сложную организацию того или иного перебора.
Список модулей
ATHENA | – | объединяет возможности для работы с основной базой данных программы и дополнительными клиентскими сессиями; |
FC | – | содержит описания визуальных типов форм и элементов управления, которые можно помещать на эти формы; |
FILES | – | представляет некоторые возможности по работе с файловой системой; |
FORMAT | – | предназначен для форматированного вывода чисел, дат и времени; |
GNET | – | содержит средства доступа к глобальной сети Интернет; |
IBSTD | – | содержит определения основных функций для работы со стандартными типами данных; |
LOCALDB | – | предназначен для работы с локальными вспомогательными базами данных; |
LOCCFG | – | предназначен для конфигурирования клиентского приложения (рабочего места); |
MODCOM | – | предназначен для осуществления взаимодействия с Component Object Model (COM); |
PROFILE | – | предназначен для работы с профилями: локальным, пользовательским и сеансовым; |
RVMC | – | предназначен для запуска дополнительных программ И++ в различных режимах; |
SPECDLG | – | содержит средства вызова специализированных окон клиентского приложения; |
XML | – | предназначен для работы с XML-документами. |