Объектная модель DCOM устанавливает связь распределенных объектов и документов, а архитектура ОМА системы CORBA — взаимосвязь объектов выполняет брокером ORB через запросы и наличия описания stub-клиента и stub /skeleton сервера. Объекты описываются в современных ЯП, в том числе С, C++.
Формализмы сборки компонентов и объектов в системе CORBA такие:
- 1) механизмы передачи запросов удаленным объектам через stub и skeleton;
- 2) обмен данными через сеть и их преобразование в случае различий в архитектуре и платформе компьютеров среды;
- 3) системы преобразования типов данных для каждой пары ЯП (C"->Smaltalk, Smaltalk<-ADA, ADACOBOL, COBOL~ JAVA, СОВОЬ<-АДА и др.), которые строятся аналогично описанным в главе 1.
Формализмы в системе DCOM такие:
- 1) механизмы передачи данных (типа RPC-вызов);
- 2) сетевой обмен данными;
- 3) системы передачи данных и преобразования нерелевантных типов данных (СС++), кодирование и декодирование данных, передаваемых с разных архитектур компьютеров.
Процедуры преобразования данных для сред ONC, DCE и CORBA реализованы на языке C++. Интерфейс описывается в языке IDL. Спецификации ТД в языке IDL системы CORBA такие: in — входные, out — выходные, inout — результат. К передаваемым ТД относятся — simple (short, long, unsigned short, unsigned long, float, double, boolean, char, octet, enum). При изменении типа поля у структуры, также изменяется тип fixed или variable. Это приводит к переписыванию таких полей во многих местах программы. Определение типа переменной длины — рекурсивное, оно влечет за собой изменение «fixed или variable» для составных типов. Параметры OUT и RESULT для любых типов переписывают их в тексте программы.
Для любого сложного типа данных Т вводится специальный тип указателей на данные этого типа Tvar. Схема работы с параметрами на стороне клиента в интерфейсном посреднике одинакова для всех таких типов. Все параметры для объекта сервера передаются через T var. Во всех таких типах конструктор типа T var (Т) и оператор присваивания T var & operator = (Т) параметр Т использует память для динамического выделения памяти. Данные копируются перед заполнением их в T var.
Например, заполнение типа String var: CORBA: String_var var = «some string», где копирование строк выполняется с помощью функции stringdup: CORBA: String_var var = CORBA: string_dup («some string»). Для всех других типов данных функция string dup отображения не предусмотрена. Заполненный по умолчанию T var не может использоваться для доступа к данным типа Т, поскольку в нем до первого явного присваивания значения Т сохраняется нулевая ссылка. Поэтому не заполненный T var не используется для параметров OUT.