ГОСТ Р ИСО/МЭК 10746-3-2001
параметрам вызова. Продукция Term соответствует завершению. Nil в левой части продукции Opsig означает, что данный вызов не имеет параметров. Nil в правой части продукции Opsig (т.е. в сигнатуре сообщения) означает, что завершение не ожидается. Метки а; соответствуют именам операций. Метки q соответствуют именам завершений.
Отношение подтипа для типов интерфейсов операционного сервера (< о) определяется следующим образом:
V lb l2 е Type0(S), ф< l2 = l^optype < l2.optype
А.5 Типы интерфейсов потоков
Полное определение правил подтипов сигнатур для интерфейсов потоков находится вне сферы действия настоящей базовой модели (см. 7.2А2). Отметим, однако, что отдельные типы сигнатур потоков могут быть формализованы путем их интерпретации на языке Type.
Элементы Type, связанные с сигнатурой потока, определяются строго определенными средами с общим подмножеством Type, определяемым грамматикой рисунка А.8, где метка а; соответствует имени потока.
В этом случае правила подтипов в 7.2А2, связанные с соответствующими потоками (при условии, что они имеют одинаковую причинность), соответствуют отношению подтипа.
|
a : |
: = < aj: Flowsig> |
|
Flowsig : |
= Arg ^ Nil |
|
Arg : |
= Nil | t |
Рисунок А.8 — Абстрактный синтаксис для типов сигнатур интерфейсов потоков
А.6 Пример
Рассмотрим следующие определения типа сигнатуры интерфейса операций (т.е. строго определенную среду):
Y = { t — > a f — > Р),
где a = def : <op: t ^ [ok : Nil, nok : Nil], factory : Nil ^ [ok : ft] >
P = def < new : Nil ^ [ok : t]>
и t, ft е Tvar; op, factory, new, ok, nok е L (op, factory и new — имена операций; ok и nok — имена завершений).
Интуитивно ясно, что среда у соответствует определению двух типов t и ft. ft имеет только одну операцию new, которая не имеет аргументов и возвращает указатель на экземпляр типа t. Можно представить, например, что ft является типом производителя объектов, который по запросу (т.е. при каждом вызове операции new) создает объекты с интерфейсом типа t. t имеет две операции: op и factory. Операция ор получает в качестве аргумента указатель на экземпляр объекта типа t — это первый пример рекурсивного определения. Операция factory не имеет аргументов и возвращает указатель на экземпляр типа ft. Можно представить, например, что в целях управления каждый объект с интерфейсом типа t может по запросу (т.е. при вызове операции factory) возвращать указатель на создавшего его производителя. Это второй пример рекурсивного определения, так как ft ссылается на t.
Применяя данное выше определение Val, определяя у; = def{ft |—> р} и используя правило равенства Е.10, получаем:
Val(t, у) = pt. Val(a, {ft |— > Р_
= pt. < op : Val(t, у;) ^ [ok : Nil, nok : Nil] factory : Nil ^ [ok : Val(ft, y2)]>
= pt.< op : t ^ [ok : Nil, nok : Nil] factory : Nil ^ [ok : pft. Val(P, 0)] >
= pt. < op: t ^ [ok : Nil, nok : Nil]
factory : Nil ^ [ok : p<ft < new : Nil ^ [ok : t]>]>
= pt. < op: t ^ [ok : Nil, nok : Nil] factory : Nil ^ [ok :<new : Nil ^ [ok : t]>]>
51