IDL Interface Definition Language

OMG определяет IDL как средство для описания интерфейсов, к которым обращаются клиенты и которые должны быть реализованы на стороне сервера. Объявления интерфейсов, написанные на OMG IDL, полностью определяют интерфейс и задают параметры каждой операции.

CORBA по определению не привязана ни к языкам программирования, ни к операционным системам, ни к транспортным протоколам, ни к двоичным структурам объектов. Совместимость CORBA – приложений, написанных на разных языках программирования с помощью программных инструментов различных производителей и работающих в разных операционных средах, обеспечивается строгой стандартизацией языка IDL и схемы его отображения на конкретные языки программирования.

IDL – декларативный язык, похожий на С++. Помимо объявлений IDL описание может содержать директивы препроцессора (которые полностью взяты из С++).

Классический CORBA – проект начинается с создания его IDL –объявлений.

После создания необходимого набора IDL-деклараций и помещения их в один или несколько файлов с расширением IDL происходит следующее. Эти файлы обрабатываются специальным компилятором, результатом работы которого является набор сгенерированных файлов, часть которых используется на стороне сервера, а часть – на стороне клиента. Файлы на стороне сервера определяют структуру серверных объектов, поэтому их обычно называют «скелетами» sceleton. Задача программиста – нарастить этот скелет, то есть дописать текст процедур. Файлы на стороне клиента образуют образуют так называемую заглушку (stub). Заглушка содержит полностью готовый к выполнению код, который превращает вызовы клиентом локальных методов заглушки в вызов соответствующих им удаленных методов реальных серверных объектов.

Базовые типы языка IDL: целое, беззнаковое целое и т.п., строка, логическое значение, перечисление (совокупность именованных констант), тип – любой (any). Заметим, что строки бывают двух видов: ограниченные и неограниченные.

Особо выделяется тип octet, который предполагает передачу данных от сервера к клиенту без всяких преобразований. Данные других типов при переходе от сервера к клиенту могут пересекать границы операционных систем и аппаратных платформ. При этом может происходить, например, перекодировка символов из ASCII в EBCDIC или изменение порядка байтов внутри целых чисел.

В IDL особо выделяются сконструированные типы данных. К ним относят массивы (arrays), последовательности (sequence), структуры (struct) и объединения (union). Сконструированные типы описываются при помощи инструкции typedef.

IDL позволяет задавать многомерные массивы. При создании массива обязательно говорить typedef. Массив может содержать произвольное количество размерностей, любое число элементов, элементы массива могут быть разных типов. При описании массива следует явно (то ест ь числом) указать количество элементов в каждой размерности.

Последовательности IDL во многом похожи на массивы. Разница заключается в том, что размерности массива должны быть указаны явно, а длина последовательности может быть произвольной, изменяющейся.

Структура - именованная совокупность полей любого типа. Структура не может содержать ни методов, ни определений типов – только данные. Структура может содержать вложенные структуры.

Объединение. Семантика объединений IDL такая же, как и в С++: объединение можно трактовать как структуру, все поля которой расположены, начиная с одного и того же адреса. В любой момент времени активным является поле только одного и того же типа. В качестве типов полей могут использоваться любые типы IDL. Объединение всегда содержит признак, говорящий о том, поле какого типа используется в настоящий момент. Часто этот признак называют дискриминатором. Дискриминатор может иметь только один из так называемых «интегральных» типов: char, Boolean, перечисление, целое.