Введение в программирование - Учебное пособие (Корочкин А. В.)

12.1 спецификация и тело защищенного модуля

Явяляясь еще одним видом программного модуля в Аде, защи­щенный модуль имеет унифицированную структуру, принятую в языке . то есть состоит из спецификации и тела.

137

Глава 12. Защищенные модули

136

Ада 95. Введение в программирование

 

Спецификация защищенного модуля:

PROTECTED   [TYPE]   Имя_Защищенного_Модуля

[Дискриминант ]      IS

-  -    Описание_Защищенных_Операций [ PRIVATE 1

-  -    Описание _Защищенных_Элементов

END      Имя_Защищенного_Модуля;

Здесь Описание Защищенных _Операции - описание защищенных подпрограмм, защищенных входов, контекстов представления ; Описание_Защищенных_Элементов - описание защищенных операций и описание компонент.

Защищенный тип является лимитированным типом. Он может иметь дискриминант, аналогично задачному типу, что позволяет минимизировать число операций при инициализации защищенных обьектов.

Защищенные операции - это функции. процедуры и входы, описанные в спецификации защищенного модуля. Приватная часть спецификации ограничивает видимость защищенных элементов : операций и обьектов, описанных в ней. Общие данные, доступ к которым координируется защищенным модулем, описываются в приватной части его спецификации.

Защищенные функции обеспечивают доступ только по чтению компонентов защищенного модуля.

Защищенные процедуры обеспечивают эксклюзивное чтение и запись компонент защищенного модуля.

Защищенные входы обеспечивают те же фунции, что и входы задач, дополнительно реализуя с помощью барьеров эксклюзивный доступ к телу защищенного входа.

D Примеры спецификации защищенного модуля :

protected   Circle   is procedure  Control;

- - защищенные подпрограммы

function    Best (X :    Float); end    Circle;

protected  type     Monitor    is

entry  Wait;           - - защищенные входы entry   Signal;

private

Condition : Boolean   : =   False ; - - защищенная компонента

end    Monitor;

protected   Systems (Id : in Positive )   is

entry Read ( X : out integer);             - - защищенный вход procedure Write (Y : in integer);    - - защищенная процедура

private

Data : array (1.. Id ) of integer;   - - защищенная компонента end  Systems;

Защищенные подпрограммы ( процедуры и функции ) не являются блокирующими защищенными операциями. С блокированием вызывающих задач связаны действия только над защищенными входами.

Тело защищенного модуля реализует защищенные операции, объявленные в его спецификации , используя для этого локальные ресурсы, объявленные непосредственно в теле.

PROTECTED   BODY        Имя_Защищенного_Модуля          IS

Локальные_Описания BEGIN

-    -   Реализация защищенных операций и защищенных элементов END    Имя_Защищенного_Модуля; В теле защищенного модуля видны описания из его приватной части.

138

Ада 95. Введение в программирование

139

Глава 12. Защищенные модули

 

 

Condition : =    False ; Block ( Process_Name); end   Wait;

Защищенные процедуры и функции реализуются в теле защищенного модуля точно так же, как это делается в теле пакета.

В отличие от задачного типа, реализация защищенного входа в теле защищенного модуля не связана с оператором принятия accept, a выполняется с помощью тела входа, в котором обязательно используется       барьер. Тело защищенного входа обеспечивает эксклюзивные операции чтения и записи.

Описание тела защищенного входа :

ENTRY     Имя_Защищенного_Входа      WHEN       Условие        IS

BEGIN

- - Последовательность _Операторов

END     Имя_Защищенного_Входа   ;

Здесь конструкция When Условие является барьером, а само Условие - логическим выражением, которое определяет : открыт или закрыт вход. Проверка условия во входе выполняется при вызове защищенного входа. Если значение Условия - True, то вход открыт и выполняется тело защищенного входа, иначе - вход закрыт и выполнение тела блокируется до тех пор, пока Условие в барьере не будет изменено другой задачей при помощи вызова защи­щенной процедуры или другого защищенного входа.

D ЛТример тела защищенного модуля:

protected   body    Monitor   is

procedure Block (X : in Process ) is - - локальная процедура

*    *    •

end   Block;

procedure Deblock (X : in Process ) is - - локальная процедура

end     Deblock ;

entry  Wait begin

when   Condition

is       - -   тело

защищенного входа с барьером

 

Signal   with not  Condition     is         - - тело

- - защищенного  входа с барьером

entry begin

Condition : = True ; Deblock ( Process_Name ); end   Signal; end    Monitor;