Язык описания интерфейсов объектов
Язык IDL позволяет описывать типы данных, интерфейсы объектов и модули, которые вызываются для выполнения, а также предоставляет средства для описания параметров объектов, передаваемых в сообщении другим объектам. В нем описываются интерфейсные программы клиента и сервера (клиент-stub и сервер-skeleton), а сами программы описываются в ЯП С++ или JAVA.
Описание интерфейсов начинается с ключевого слова interface, за которым следует идентификатор (имя интерфейсной программы), образующие вместе заголовок, и тело, содержащее описание типов параметров для обращения к объекту. Пример описания заголовка описания интерфейса:
interface A { ... }
interface B { ... }
interface C: B,A { ... }.
Тело интерфейса содержит описание: типов данных (type_dcl), констант (const_dcl), исключительных ситуаций (except_dcl), атрибутов параметров (attr_dcl), операций (op_dcl).
Описание типов данных начинается ключевым словом typedef, за которым следует базовый или конструируемый тип и его идентификатор. В качестве константы может быть некоторое значение типа данного или выражение, составленное из констант. Типы констант могут быть: integer, boolean, string, float, char и др.
Описание операций op_dcl включает: атрибуты операции, тип результата, наименование операции интерфейса, список параметров (от нуля и более) и др.
Атрибуты параметров могут начинаться следующими служебными словами:
in - при отсылке параметра от клиента к серверу;
out - при отправке параметр-результатов от сервера к* клиенту;
inout - при передаче параметров в оба направления (от клиента к серверу и от сервера к клиенту).
Описание интерфейса может наследоваться другим объектом, тогда такое описание интерфейса становится базовым. Пример базового интерфейса приведен ниже:
const long l=2
interface A {
void f (in float s [l]);
}
interface B {
const long l=3
}
interface C: B,A { }.
В нем интерфейс С использует интерфейс B и А и их типов данных, которые по отношению к С – глобальные. Имена операций могут использоваться во время выполнения интерфейсного посредника (Skeleton) для динамического вызова интерфейса. Пример описания интерфейса для динамического вызова приведен ниже:
interface Vlist {
status add_item (
in Identifier item_name,
in typeCode item_type,
in void * value,
in long value_len,
in Flags item_flags
);
status free ( );
status free_memory( );
status get_count (
out long count);
};
Описание модуля в языке IDL начинается с ключевого слова module, за которым следует имя модуля и описание его тела.
Средства описания типов. Язык IDL позволяет описывать типы данных, которые задают параметры, передаваемые от объекту к объекту. Типы данных подразделяются на базовые, cсылочные и конструируемые.
К базовым типам относятся фундаментальные типы данных:
16- и 32-битовые (короткие и длинные) знаковые и беззнаковые двухкомпонентные целые;
32- и 64-битовые числа с плавающей запятой, что соответствует стандарту IEEE;
cимвольные;
8-битовый непрозрачный тип данных, обеспечивающий преобразование данных в момент пересылки между объектами;
булевые (TRUE, FALSE);
строка, которая состоит из массива одинаковых длин символов, допустимых во время выполнения;
перечисляемый тип, включающий упорядоченную последовательность идентификаторов;
произвольный тип any, который представляет любой базовый или конструируемый тип данных.
Конструируктивные типы создаются из базовых типов и включают:
– запись, состоящая из множества упорядоченных пар (имя-значение);
– структура, состоящая из совокупности разнородных базовых элементов;
различительное объединение, содержащее дискриминатор, за которым располагается подходящий тип и значение;
– последовательность, представляющая собой массив, компоненты которого имеют переменную длину и одинаковый тип;
– массив, состоящий из компонентов фиксированной длины одинакового типа;
– интерфейсный тип, специфицирующий множество операций, которые клиент может послать в запросе.
Каждому типу данных соответствует значение, которое задается в запросе клиента или объекта, отправляющего ответ на запрос.