Готовая модель содержит объекты (точнее было бы сказать «классы»), которые должны быть описаны с помощью языка IDL, что необходимо не только для трансляции этих описаний в базовые исходные тексты на конкретном языке программирования, но и для последующего добавления IDL-описаний в репозитарий интерфейсов.Обратимся к трансляции объектов.
В каждой версии VisiBroker имеется свой компилятор IDL: VisiBroker for C++ оснащен компилятором idl2cpp, а VisiBroker for Java — idl2java. Первый на основе IDL-описания объектов генерирует исходные тексты на языке Cи++ и включаемые заголовочные файлы, а второй делает описания классов на языке Java и пакетную структуру имен.
Правда, VisiBroker for Java обладает еще парочкой компиляторов java2iiop и java2idl, иначе называемых технологией Caffeine. Однако пока они реализованы лишь в Java-версии VisiBroker да и больше подходят для переноса в среду CORBA старых классов Java, а не для создания новых объектов.
Итак, предположим, что у нас уже есть готовое описание некоего объекта, представляющего собой абстрактный предок для компонентов системы. Мы так и назовем его — AbstractComponent. Предположим также, что каждый компонент должен возвращать свое краткое текстовое описание, скажем, для того, чтобы сетевой администратор мог выбрать из списка объектов самый подходящий. Кроме того, по запросу программы компонент должен возвратить некий интерфейс, с помощью которого его клиент сможет получить дополнительную информацию нижнего уровня: например, к какой категории относится объект, какова его логическая модель. Да мало ли что можно реализовать подобным способом! Еще одна операция присваивает объекту уникальный идентификатор, который может быть ключом поиска в базе данных объектов:
Файл component.idl #pragma prefix "pcworld.ru" module AbstractComponent { // Опережающее описание некоего интерфейса // для получения информации о компоненте interface ComponentInfo; interface ServiceProvider { // Компонент возвращает строку со своим // кратким текстовым описанием string getDescription(); // Операция получения информации о компоненте // в машинном виде ComponentInfo getComponentInfo(); // Операция присвоения компоненту // уникального идентификатора void setUniqueID(in long id); }; };
Дальнейшие действия для программистов на Java и Cи++ будут несколько различаться. Трансляция на Cи++ должна быть запущена командой:
idl2cpp -src_suffix cpp component.idlа трансляция на Java командует:
idl2java corba.idl
Если ошибок в IDL не было, то в результате на диске появятся всего четыре файла для Cи++, в то время как для Java файлов может оказаться гораздо больше, да и размещаться они будут в каталогах со сложной структурой.