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; |
| Оглавление| |