Език за интерфейсни дефиниции (Interface Definition Language, IDL)
Езикът за интерфейсни дефиниции (The Interface Definition Lnaguage, IDL) е технологоично независим синтаксис за описание на капсулацията
на обектите. Той дефинира интерфейсите, като по този начин създава обекти. IDL е само дефиниционен език, има mapping - и към програмните езици
за извикване и управление. Интерфейсите имат атрибути и оперативен подпис. Всеки интерфейс, специфициран в IDL, определя оперативните подписи, чрез които се
правят заявки. IDL поддържа онаследяване за спомагане на повторната употреба. Тези спецификации са събрани в заглвните файлове, в stub и склетните програми.
Интерфейсната спецификация myspec.idl е създадена чрез употребата на Интерфейсния език за дефиниции. IDL въвеждането се компилира, създават се три файла myspecs.cpp, myspecc.cpp и myspec.hh. Myspecc.cpp и myspecs.cpp съдържат кода на реализациятаза декларациите , определени в myspecs.hh респективно за клиента и сървъра. Myspec.hh и myspecs.cpp са компилирани с други файлове на сървъра, за създаването на сървърната или обектна реализация. Myspec.hh и myspecc.cpp се компилират с други файлове на клиента за създаването на клиента. Myspecc.cpp се отнася за stub, а myspecs.cpp се отнася към скелета (skeleton). Програмите на stub и програмите на скелета служат за попълването на Интерфейсното Хранилище (Interface Repository). За клиента, програмата на stub има действието на извикване на локална функция. Stub -ът реализира кодирането и декодирането на параметри. Програмата на stub-a е създадена вътре в езика за програмиране.
За обектната реализация (сървъра) се създава програма на скелета. Програмите на скелета извикват методите, които са част от обектната реализация. Няма части от реализацията, които да са част от "скелета", програмистът добавя детайлите. Обикновено IDL скелета зависи от Обектния адаптор (Object Adapter). Обектните адаптори могат да създават реализации "в движение", без да използват програмата на скелета.
Динамичното извикване на интерфейси (Dynamic Invocation Interface) позволява динамично създаване на заявки.
IDL Спецификации
IDL спецификациите са модулни спецификации, константни дефиниции, дефиниции на типове, интерфейсни дефиниции или дефиниции на изключения. Един файл на IDL може да съдържа една или повече спецификации. Всяка спецификация формира обхвата на именуването. Едно име може да бъде използвано като абсолютна форма в определена сфера. Ако в тази сфера името е неустановено, то се търси извън нея. Имената също така могат да използват формата < SCOPE name > :: < IDENTIFIER > за специфично определяне на име.
Имената имат общ обхват, поради което общото име
module1::interface1::enumeration1::indentifer1
ще представлява identier1, дефиниран в спсъка (enumeration1), който е дефиниран в интерфейса (interface1),
дефиниран в модула (module1).
Интерфейсите са главната част от IDL спецификациите. Те групират атрибутите и операциите. Интерфейсите са съставени от глава и тяло. Главата определя интерфейсната структура. Интерфейсите могат да наследяват декларации от базовите (главните) интерфейси. Поддържа се множествено наследяване на интерфейси. Двусмислията се решават чрез дефинирането на идентификатори.
Типовете в IDL се опрделят от типовете, дефинирани в обектния модел на CORBA.
Операциите в IDL се определят от операциите, дефинирани в обектния модел на CORBA.
Атрибутите на интерфейса са логически еквивалентни на двойка (set и get) на функциите за достъп. Ако даден атрибут е обявен като read-only, не се дефинира set функция.
Декларациите на изключения имат вида на структурни дефиниции. Те имат идентификатор и дефиниции на членовете. Стандартни изключения се дефинират за ORB. Стандартните изключения могат да бъдат породени от която и да е операция без изрична клауза за извикването им. Всяко стандартно изключение има статус (да, не, може би), който описва дали метода е завършен преди пораждането на изключението.
Динамично извикване на интерфейси (Dynamic Invocation Interface, DII)
Клиентът може динамично да определи обект, операция или съвкупност от параметри. Обикновено тази информация се възвръща от Интерфейсното хранилище. Клиентът може да посочи типа на обекта и операцията, които трябва да бъдат изпълнени, както и да построи програмно извикване чрез подаването на извиквания.
Клиентът използва обектните референции при подаването на заявки. Семантиката на заявките е идентична с тази на IDL заявките, въпреки че процеса на изграждането им е различен. Заявката има операционно име, обектна референция и параметри. Параметрите се намират в списък с имена-стойности, който се попълва по време на изпълнението. Списъкът може да съдържа различен брой параметри, а DII може да поддържа всяко тяхно извикване.
Заявките се създават с помощта на псевдо-обект за заявки (има и обикновен интерфейс, но той може и да не се изпълни като обект). Заявките първо се създават, а после се изпращат. Заявка се създава чрез извикването на операцията create_request на обекта, който ще бъде извикан. Интерфейсът на заявките разполага със следните операции: add_argument (добавяне на аргумент), invoke (извикване), delete (изтриване), send (изпращане) and get_response (получаване на отговор). Списъка с параметрите се състои от успешни извиквания на операцията add_argument. Параметрите в самата add_argument съдържат име, тип данни, стойност, дължина и флагове. Необходими са само стойността и дължината, останалите се ползват за проверка на типа.
След като е създадена и изградена, заявката може да бъде извикана чрез използването на методи за извикване или изпращане. Методат за извикване блокира изпращача докато не се получи резултат от обектната реализация. Изпращачът не се блокира, когато се използва операция за изпращане. Методът get_response може да бъде използван за възвръщане на отговор на по-късен етап.
Хранилища
Интерфейсни хранилища (Interface Repository, IR)
Интерфейсното хранилище поддържа представянията на IDL дефинициите. То подкрепя DII чрез осигуряването на устойчиви обекти, които представят информация за интерфейса на сървъра. Клеинтът може да отправи запитване относно обект, който е непознат по времето на компилиране, също така да прави запитване за услугите на реализацията и да изгради заявка.
Интерфейсите се поддържат от постоянни "живи" обекти, които са на разположение по време на изпълнението. DII ги използва, за да извиква заявки на обектите , чиито интерфейси са били непознати по времето на компилирането на програмата. IR се използва също така от Обектния брокер за заявки за съставянето и разбиването на параметри.
IR операциите са дефинирани за възвръщането на информационни обекти, съхранявани в IR. Интерфейсното хранилище съхранява информация за интерфейсите и всеки
интерфейс се представя като интерфейсен обект. Всеки обект в IR може да бъде един от следните типове:
AttributeDef - Обект, представляващ атрибут.
ParameterDef - Обект, представляващ параметър на операция.
ExceptionDef - Обект, представляващ изключение, което може да бъде породено.
TypeDef - Обект, който представлява дефиниция на тип.
ConstantDef - Обект, представляващ константа.
OperationDef- Обект, представляващ операция.
InterfaceDef - Представлява интерфейсна дефиниция. Този обект съдържа сбор от операции,
типове, атрибути, константи и изключения.
ModuleDef - Сбор от обекти (интерфейси, типове, константи, изключения), отговарящ на модулна дефиниция.
Repository - Обект, който поддържа сбор от дефиниционни обекти.
Интерфейсите могат да бъдат възвърнати от IR по следните начини:
InterfaceDef обект може да бъде възстановен чрез използването на обектна референция.
Чрез get_interface операция (част от интерфейса на ORB).
ТПреминаването през IR структури, чрез използването на имената на индивидуалните подструктури.
Хранилище на реализациите (Implementation Repository)
Хранилището на реализации поддържа информация, която е необходима на ORB за 'start-up' (и намирането) на обектните реализации. Спецификацията също така съдържа и друга информация за обект, като например такава за debugging на информацията за версията. Конструирането на Хранилището за реализации не е специфицирано в CORBA, тъй като тя е независима от платформата.