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

9.1 спецификация задачи

Спецификация задачи (task) задаёт имя задачи и содержит описания входов задачи и спецификаторов представления:

TASK      [TYPE]    Идентификатор_задачи

[ Дискретный диапазон]     IS

-   -   Описание Входов

 

83

Глава 9.   Задачи

-   -          Спецификатор_Представления

- -            Описание_Входов

- -            Спецификатор представления ]

END     Идентификатор _задачи;

О   Примеры: task    Metro ;         - - задача с вырожденной спецификацией

task   Stack  is

entry   Read (X:  out   Elem ); - -   входы для приёма

- -  и передачи

entry   Write (Y:   in    Elem);  - -   информации от

- - других задач private

entry  Get (Z:   in integer); end    Stack;

задача имеет входы только для синхронизации - -   спецификатор адреса

task  Semaphore  is

entry    P;

entry    V;

for  P   use  at   Spec_Address; end   Semaphore;

Наряду с описанием единичной задачи в Аде разрешается описание множества задач через использование задачного типа. О   Например:

task   type    Silk; - - заданный тип

А, В :    Silk ;       - - создание двух одинаковых задач А и В типа  Silk Тор :    array (1 ..5) of  Silk; - - создание массива задач Тор(1 . .5) Использование сылочного типа для создания задач типа    Silk

Глава 9.   Задачи

85

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

84

 

 

type Cotton is access Silk ; Event : Cotton : = new Silk ; Anchor : Cotton ;

Задачный тип является лимитированным приватным типом, для кото­рого запрещены все операции.

В задачном типе в языке допускается использование дискримина-тов, что предоставляет дополнительные удобства при работе с задач-ным типом. Механизм дискриминантов позволяет параметризировать задачи при их описании. Например, с помощью дискриминанта можно идентифицировать (внутренне) задачи, создаваемые на основе задачно-го типа:

task type Node( Name :    Character ) ;     - - задачный тип

- -   с дискриминантом

создание задач

Z1 Z2 Z3

Node( A); Node( В); Node( С);

task   body    Node   is       - - тело задачного типа begin

put( Name); case    Name do A= >     ...

В = >     ...      - - обработка дискриминанта в теле задачи С = >     ...

end   Node;

Здесь созданы три одинаковые задачи Zl, Z2, Z3 , однако их поведе­ние можно сделать разным за счет анализа в теле задачного типа дис­криминанта Name , который у всех трех задач разный.

С помощью дискриминанта задачи можно связывать с данными, встраивая задачи в данные, или данные, логически связанные задача­ми, размещать вне задач, используя ссылочный дискриминант.

type   Box    is record

Z:     integer;

X:     integer; end   record;

task   type    Monterey ( Mr : access Box );

Теперь тип Box можно использовать в теле задачного типа Monterey.

Ш СОВЕТЫ:

*  Используйте дискриминант для инициализации задач.

*  Используйте дискриминант для установления приоритета задачи, размера семейства входов, размера памяти, неодходимого для зада­чи.

»  Используйте дискрминант для указания данных, ассоциируемых с задачей.

*   Минимизируйте динамическое порождение задач.