Как уже было сказано, данный язык предназначен для описания интерфейсов. Когда вы пишете CGI, вы держите в голове то, как называется скрипт, какие у него параметры, каким методом (GET или POST) он общается с web-сервером и т.д. В CORBA-системах любые подобные соглашения явно декларируются на IDL. IDL-описание на начальном этапе представляет собой файл, в котором содержится объявление констант, интерфейсов, свойств, методов и т.д. Синтаксис IDL схож с синтаксисом C++. В принципе написание IDL можно представить себе как написание заголовочного файла в C++. Когда мы пишем IDL-описание, мы тем самым оговариваем ответственность удаленных CORBA-объектов. Как и в любом другом языке, основой IDL являются используемые типы данных. Типы данных IDL можно разбить на следующие группы: базовые типы данных, сконструированные типы данных и интерфейсы.

К базовым типам данных относятся типы для представления чисел (целых, с плавающей запятой), символов (в том числе и двухбайтовых) и строк.

К структурированным – объединения, массивы, последовательности, структуры, типы-значения (объекты, которые, в отличие от объектных ссылок, передаются по значению) и исключения.

Последняя категория элементов IDL-интерфейс. Интерфейс определяет ответственность элемента CORBA-системы (CORBA-объекта). Интерфейс, как и структуры и объединения, определяет новое пространство имен. Внутри интерфейса могут находиться объявления:

Интерфейсы не могут быть вложенными и не могут задавать права доступа к своим элементам. Интерфейсы могут находиться по отношению друг к другу в иерархии «IS-A». Рассмотрим пример интерфейса, демонстрирующий большинство возможностей:


interface MyProgram

{

  // Определение синонимов типов

  typedef sequence CommandLineArgs;

  typedef long ResultType;

// Определение исключений 

exception WrongArgsNumber {};

exception SomethingStirage

{

long code;

string description;

};

// Определение констант 

const double PI=3.14159828;

const string TITLE = “It is my best program :)”;

// Определение атрибутов 

readonly attribute ResultType ret_code;

 /* Определение операций Считается, что любой метод может сгенерировать любое системное исключение.

Кроме того, мы имеем возможность явно задать типы пользовательских исключений, которые могут быть сгенерированы

методом (помимо исключений системного уровня) */

ResultType runProgram(in CommandLineArgs args) raises (WrongArgsNumber,. SomethingStrange);

string getTitle();

void getUserName(out string name);

 };

 

Рассмотрим, что происходит с приведенным IDL далее.