Методы и средства инженерии программного обеспечения

       

Язык описания интерфейсов объектов


 

Язык IDL позволяет описывать типы данных, интерфейсы объектов и модули, которые вызываются для выполнения, а  также предоставляет средства для описания параметров объектов, передаваемых в сообщении другим объектам. В нем описываются интерфейсные программы клиента и сервера (клиент-stub и  сервер-skeleton), а сами программы описываются в ЯП С++ или JAVA.

 

Описание интерфейсов начинается с ключевого слова interface, за  которым следует идентификатор (имя интерфейсной программы), образующие вместе заголовок,  и тело, содержащее описание типов  параметров  для обращения к объекту. Пример описания заголовка  описания интерфейса:

      interface A { ... }

      interface B { ... }

      interface C: B,A { ... }.

Тело интерфейса содержит описание:  типов данных  (type_dcl), констант (const_dcl), исключительных ситуаций (except_dcl), атрибутов параметров (attr_dcl), операций (op_dcl).

                 

Описание типов  данных начинается ключевым словом typedef, за которым следует базовый или конструируемый тип и его идентификатор.  В качестве константы может быть некоторое значение типа данного или выражение,  составленное из констант. Типы констант могут быть:  integer, boolean, string, float, char и др.

Описание операций op_dcl включает: атрибуты операции, тип результата, наименование операции интерфейса, список параметров (от нуля и более) и др.

Атрибуты параметров могут начинаться следующими служебными словами:

in  - при отсылке параметра от клиента к серверу;

out - при отправке параметр-результатов от сервера к* клиенту;

inout - при передаче параметров в оба направления (от клиента к серверу и от сервера к клиенту).

    



Описание интерфейса может наследоваться другим объектом, тогда такое описание интерфейса становится базовым. Пример  базового интерфейса приведен ниже:

     const long l=2

     interface A  {

          void f (in float s [l]);

       }

     interface  B {

          const long l=3

      }

     interface C: B,A {  }.


В нем интерфейс С использует интерфейс B и А и их типов данных, которые по отношению к С – глобальные. Имена операций могут использоваться во время выполнения интерфейсного посредника (Skeleton) для динамического вызова интерфейса.  Пример описания  интерфейса для динамического вызова приведен ниже:

    

interface Vlist  {

status add_item (

     in Identifier item_name,

     in typeCode   item_type,

     in void       * value,

     in long       value_len,

     in Flags      item_flags

                );

status free ( );

status free_memory( );

status get_count (

     out long count);

                 };

    

Описание модуля  в языке IDL начинается с ключевого слова module, за которым следует имя модуля и описание  его тела.

Средства описания типов. Язык IDL позволяет описывать типы данных, которые задают параметры, передаваемые от объекту к объекту. Типы данных подразделяются на базовые, cсылочные и конструируемые.

К базовым типам относятся фундаментальные типы данных:

16- и 32-битовые (короткие и длинные) знаковые и беззнаковые двухкомпонентные целые;

32- и 64-битовые числа с плавающей запятой, что соответствует стандарту IEEE;

cимвольные;

8-битовый непрозрачный тип данных, обеспечивающий преобразование данных в момент пересылки между объектами;

булевые (TRUE, FALSE);

строка, которая состоит из массива одинаковых длин символов, допустимых во время выполнения;

перечисляемый тип, включающий упорядоченную последовательность идентификаторов;

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

Конструируктивные типы создаются  из базовых типов и включают:

– запись, состоящая из множества упорядоченных пар (имя-значение);

– структура, состоящая из совокупности разнородных базовых элементов;

различительное объединение, содержащее дискриминатор, за которым располагается подходящий тип и значение;

– последовательность, представляющая собой массив, компоненты которого имеют переменную длину и одинаковый тип;

– массив, состоящий из компонентов фиксированной длины одинакового типа;

– интерфейсный тип, специфицирующий множество операций, которые клиент может послать в запросе.

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


Содержание раздела