Как уже было сказано, данный язык предназначен для описания интерфейсов. Когда вы пишете 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);
};